编译转换:类型“对象”在未引用的程序集中定义

本文关键字:引用 程序 程序集 定义 集中 转换 类型 对象 编译 | 更新日期: 2023-09-27 18:34:43

我正在 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中的回归。

我安装了TypeLite 1.5.1

的完整版本(常规WebApplication .Net 完整版4.5.1(,简单更新到1.8.1有助于解决问题。所以我应该说VS 2015 Update2 RC和Update2 RTM既不适用于TypeLite的完整版本,也不适用于便携式版本(是的,版本1.5.1已经具有便携式版本(