编译转换:类型 'Object' 在未被引用的程序集中定义

Compiling transformation: The type 'Object' is defined in an assembly that is not referenced

我正在 asp.Net MVC5 webapp 中进行一些更改,我在其中使用 typelite 从 C# 类 创建 .ts 定义(非常方便)。由于某种原因,现在我在执行 T4 时遇到了这个错误:

Compiling transformation: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.

和这个警告:

Compiling transformation: Assuming assembly reference 'mscorlib, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' used by 'EnvDTE' matches identity 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' of 'mscorlib', you may need to supply runtime policy Mair.Tracking.Web

我猜这与 TypeLite 使用的 EnvDTE 版本和对 mscorlib EnvDTE 使用的引用有关。我应该在 web.config 中添加一个 bindingRedirect 吗?

我正在使用 VS2015 和 Update2 CTP。

特别针对 TypeLite,我打开了它的副本(相当过时,但我已经对其进行了调整以满足我的需要)并停止将其作为可移植库。这是按照 中的步骤完成的。现在它不是一个可移植的库,我可以再次执行我的 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/ 上还有一个未解决的连接问题,因为这仍然是 VS2015 更新 2 中的回归。

我可以确认便携式 class 库与 T4 模板相结合会在 Visual Studio 2015 更新 2 中导致此问题。我无法找到更好的解决方案,然后将 TypeLITE 重新定位到完整的 .NET框架。

从版本 1.8.0 开始,TypeLITE nuget 包包含一个针对完整 .NET 框架的库副本。如果您的项目以完整的 .NET 框架为目标,则在安装过程中会选择正确的 TypeLITE 程序集,并且在 Visual Studio 2015 Update 2 中一切正常。不幸的是,如果您的项目以 PCL 为目标,那么您运气不佳 Visual Studio 2015更新2.我正在寻找更好的解决方案。

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

感谢Ian Yates打开连接项目。

Microsoft 于 2016 年 5 月 4 日重新发布 KB3151378。我可以确认此更新解决了 T4 模板与 EDMX 文件一起使用时的问题。不幸的是,我不使用 TypeLite,所以我无法确认它是否解决了 OP 的问题,尽管我怀疑它确实解决了。

来自知识库页面:

Issue 6:

In T4 templates, errors occur when you reference an assembly that's built for a version of the .NET Framework that differs from the desktop (full) framework. For instance, errors occur when you reference portable libraries.

看来这应该由 KB3151378 解决。

版本 14.0.25130.0 的说明:

Issue 6

In T4 templates, errors occur when you reference an assembly that's built for a version of the .NET Framework that differs from the desktop (full) framework. For instance, errors occur when you reference portable libraries.