我在asp.Net MVC5 webapp中进行了一些更改,其中我使用typelite从C#类创建.ts定义(非常方便)。由于某种原因,我在执行T4时遇到了这个错误:
编译转换:类型'对象'在未引用的程序集中定义。您必须添加对assembly&m; mscorlib的引用,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes'。
和这个警告:
编译转换:假设程序集引用' mscorlib,Version = 1.0.3300.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'由EnvDTE'使用匹配identity' mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'对于' mscorlib',您可能需要提供运行时策略Mair.Tracking.Web
我想这是与TypeLite使用的EnvDTE版本相关的东西以及对mscorlib EnvDTE使用的引用。我应该在web.config中添加bindingRedirect吗?
我使用VS2015和Update2 CTP。
答案 0 :(得分:10)
我可以确认可移植类库与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运气不佳。我是寻求更好的解决方案。
答案 1 :(得分:7)
感谢Ian Yates打开Connect项目。
Microsoft于2016年5月4日重新发布了KB3151378。我可以确认此更新解决了T4模板与EDMX文件一起使用时的问题。不幸的是我没有使用TypeLite,所以我无法确认它是否解决了OP的问题,尽管我怀疑它确实存在。
从KB页面:
第6期:
在T4模板中,当您引用为不同于桌面(完整)框架的.NET Framework版本构建的程序集时,会发生错误。例如,引用可移植库时会发生错误。
答案 2 :(得分:2)
看起来这应该由KB3151378修复。
版本14.0.25130.0的注释:
第6期
在T4模板中,当您引用为不同于桌面(完整)框架的.NET Framework版本构建的程序集时,会发生错误。例如,引用可移植库时会发生错误。
答案 3 :(得分:1)
特别是对于TypeLite,我打开了它的副本(相当过时,但我已经调整它以满足我的需要)并且停止它是一个可移植的库。这是按照https://stackoverflow.com/a/23135170/1053381的步骤完成的。现在它不是一个可移植的库,我可以再次执行我的T4模板。
我的解决方案中有许多其他T4模板使用ImmutableObjectGraph(搜索GitHub),尽管它也使用了可移植的库,但它们运行良好。我没有深入研究细节,但我了解到mscorlib 2.0.5.0与可移植库等相关联,而且我们真的不需要TypeLite本身就可以移植。
希望这有助于其他人。
在https://blogs.msdn.microsoft.com/visualstudio/2016/03/03/visual-studio-2015-update-2-rc/还有一个开放的Connect问题,因为这在VS2015 Update 2中仍然是一个回归。
答案 4 :(得分:0)
我安装了TypeLite 1.5.1的完整版本(Regular WebApplication .Net Full version 4.5.1),简单更新到1.8.1有助于解决问题。所以我应该说VS 2015 Update2 RC和Update2 RTM既不适用于TypeLite的完整版本也不适用于PORTABLE(是的,版本1.5.1已经有便携版本)