【问题标题】:Compiling transformation: The type 'Object' is defined in an assembly that is not referenced编译转换:“对象”类型在未引用的程序集中定义
【发布时间】:2016-05-26 13:05:54
【问题描述】:

我正在对 asp.Net MVC5 webapp 进行一些更改,其中我使用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 中添加 bindingRedirect 吗?

我正在使用带有 Update2 CTP 的 VS2015。

【问题讨论】:

  • 我不使用 typelite,但我也收到 mscorlib 警告,因为我将 VS2015 更新为 CTP 2。
  • 我找到了你的问题并且正在阅读“完美 - 与我完全相同的情况”一直到 VS2015 的版本等。然后当我没有看到答案时感到悲伤。我猜这是更新 2 CTP 的问题。我将在几个小时后安装 Update 2 RC,因此如果有帮助,我会回复您的答案
  • 更新到 Update 2 RC,同样的错误
  • 我为此打开了一个 Connect 项目:connect.microsoft.com/VisualStudio/feedback/details/2451005
  • 更新 2 RTM 中的同样问题。而且,作为记录,我的 .tt 文件不访问任何外部第三方库,也不针对 PCL,它只是一个标准 T4 模板,没有做任何壮观的事情,只是使用 EnvDTE(这是我的程序集.tt 文件抱怨)。

标签: c# asp.net asp.net-mvc typescript typelite


【解决方案1】:

我可以确认在 Visual Studio 2015 Update 2 中结合 T4 模板的可移植类库会导致此问题。我找不到更好的解决方案,然后将 TypeLITE 重新定位到完整的 .NET 框架。

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

【讨论】:

  • @mythz 也应该被通知 ServiceStack
  • 请尝试为 VS 2015 Update 2 安装 KB3151378。
  • 我在 VS 2019 Preview 2 的 .NET Core 3.1 应用中遇到了这个问题。有人找到实际的解决方案吗?
【解决方案2】:

感谢Ian Yates 打开连接项。

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

来自知识库页面:

问题 6:

在 T4 模板中,当您引用为不同于桌面(完整)框架的 .NET Framework 版本构建的程序集时会发生错误。例如,当您引用可移植库时会发生错误。

【讨论】:

    【解决方案3】:

    看起来这个问题应该由KB3151378修复。

    版本 14.0.25130.0 的注意事项:

    问题 6

    在 T4 模板中,当您引用为不同于桌面(完整)框架的 .NET Framework 版本构建的程序集时会发生错误。例如,当您引用可移植库时会发生错误。

    【讨论】:

      【解决方案4】:

      特别是对于 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 中的回归。

      【讨论】:

      • 谢谢!这对我有用(警告仍然存在,但错误消失并且运行成功)。对于其他来这里的人,您可以从这里下载最新版本的 TypeLite:bitbucket.org/LukasKabrt/typelite/downloads。我只需要转换一个项目,它被称为“TypeLite.Net4”。另一个“TypeLite”已经是一个类库。最后一步是从项目中卸载 TypeLite nuget 包并添加对那些新编译的 dll 的引用。
      • 很高兴它帮助了其他人:)
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-29
        • 2014-09-17
        • 2019-06-11
        • 2011-08-16
        • 2014-08-15
        • 2016-05-01
        • 2018-01-10
        • 1970-01-01
        相关资源
        最近更新 更多