我正在 asp.Net MVC5 Web应用程序中进行一些更改,其中我使用typelite从C#类创建.ts定义(非常方便(。由于某种原因,现在我在执行 T4 时遇到此错误:
编译转换:类型"对象"在未引用的程序集中定义。必须添加对程序集"mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes"的引用。
和这个警告:
编译转换:假设"EnvDTE"使用的程序集引用"mscorlib, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"与"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"的"mscorlib"匹配,您可能需要提供运行时策略 Mair.Tracking.Web
我想这与TypeLite使用的EnvDTE版本以及对mscorlib EnvDTE使用的引用有关。我应该在 web.config 中添加绑定重定向吗?
我正在使用带有Update2 CTP的VS2015。
我可以确认可移植类库与 T4 模板相结合会导致 Visual Studio 2015 Update 2 中的此问题。我无法找到更好的解决方案,然后将TypeLITE重定向到完整的.NET框架。
从版本 1.8.0 开始,TypeLITE nuget 包包含面向完整 .NET 框架的库的副本。如果您的项目面向完整的 .NET 框架,则会在安装过程中选取正确的 TypeLITE 程序集,并且在 Visual Studio 2015 Update 2 中一切正常。不幸的是,如果您的项目面向 PCL,那么 Visual Studio 2015 Update 2 就不走运了。我正在寻找更好的解决方案。
感謝 Ian Yates 打開 Connect 項目。
Microsoft于2016年5月4日重新发布KB3151378。我可以确认此更新解决了 T4 模板与 EDMX 文件一起使用时的问题。不幸的是,我不使用 TypeLite,所以我无法确认它是否解决了 OP 的问题,尽管我怀疑它确实解决了。
从知识库页面:
问题 6:
在 T4 模板中,引用为不同于桌面(完整(框架的 .NET 框架版本生成的程序集时,会发生错误。例如,引用可移植库时会发生错误。
看起来这应该由KB3151378修复。
版本 14.0.25130.0 的说明:
问题 6
在 T4 模板中,引用为不同于桌面(完整(框架的 .NET 框架版本生成的程序集时,会发生错误。例如,引用可移植库时会发生错误。
特别是对于TypeLite,我打开了它的副本(相当过时,但我已经调整了它以满足我的需求(并停止了它作为一个便携式库。 这是按照 https://stackoverflow.com/a/23135170/1053381 的步骤完成的。 现在它不是便携式库,我可以再次执行我的 T4 模板。
我的解决方案中使用 ImmutableObjectGraph(搜索 GitHub(还有许多其他 T4 模板,尽管它也使用可移植库,但它们运行良好。 我没有深入研究细节,但我了解到mscorlib 2.0.5.0与可移植库等相关联,实际上我们不需要TypeLite本身是可移植的。
希望这对其他人有所帮助。
https://blogs.msdn.microsoft.com/visualstudio/2016/03/03/visual-studio-2015-update-2-rc/还有一个未解决的连接问题,因为这仍然是VS2015更新2中的回归。
的完整版本(常规WebApplication .Net 完整版4.5.1(,简单更新到1.8.1有助于解决问题。所以我应该说VS 2015 Update2 RC和Update2 RTM既不适用于TypeLite的完整版本,也不适用于便携式版本(是的,版本1.5.1已经具有便携式版本(