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

14
我正在对一个asp.Net MVC5的Web应用程序进行一些更改,其中我使用typelite从C#类创建.ts定义(非常方便)。出于某种原因,当执行T4时,我遇到了以下错误:
编译转换:类型“Object”在未引用程序集“mscorlib,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes”中定义。您必须添加对程序集的引用“。
以及此警告:
编译转换:假定'EnvDTE'使用的程序集引用'mscorlib,Version = 1.0.3300.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'与'mscorlib'的标识符'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'匹配,您可能需要提供运行时策略Mair.Tracking.Web。
我猜这与TypeLite使用的EnvDTE版本以及EnvDTE引用mscorlib有关。我应该在web.config中添加一个bindingRedirect吗?
我正在使用带有Update2 CTP的VS2015。

2
我没有使用Typelite,但自从我将VS2015更新到CTP 2以后,我也收到了mscorlib警告。 - Akinzekeel
1
我发现了你的问题,并且正在阅读时想着“太完美了 - 和我完全一样的情况”,甚至包括VS2015的版本等等。然后,当我看到没有答案时感到失望。我猜问题可能是Update 2 CTP的原因。我将在几个小时后安装Update 2 RC,如果那有帮助的话,我会回报一个答案。 - Ian Yates
1
已更新至 Update 2 RC,仍出现相同错误。 - qwertoyo
2
我已经为此打开了一个连接项目:https://connect.microsoft.com/VisualStudio/feedback/details/2451005 - Ian Yates
1
@ThrowingDwarf 我的edmx也出现了同样的警告,但只是警告而已,T4转换仍能正常工作。 - qwertoyo
显示剩余6条评论
5个回答

11

我可以确认,在Visual Studio 2015 Update 2中,Portable类库与T4模板结合使用会导致这个问题。我找不到比重新针对完整的.NET Framework来重新定位 TypeLITE 更好的解决方案。

从1.8.0版本开始,TypeLITE NuGet包包含一个面向完整.NET Framework的库的副本。如果你的项目面向完整的.NET Framework,则在安装过程中会选择正确的TypeLITE程序集,一切正常在 Visual Studio 2015 Update 2 中工作。不幸的是,如果你的项目面向PCL,则在 Visual Studio 2015 Update 2 中你会感到很无奈。我正在寻找更好的解决方案。


1
@mythz 也应该被通知这个问题,因为它涉及到了 ServiceStack。 - James Gray
3
请尝试安装KB3151378补丁,以升级至Visual Studio 2015 Update 2版本。 - SvenAelterman
我在VS 2019 Preview 2中使用.NET Core 3.1应用程序时遇到了这个问题。有人找到了实际的解决方案吗? - tig

7
感谢Ian Yates提出了Connect item。
2016年5月4日,Microsoft重新发布了KB3151378。我可以确认此更新解决了使用EDMX文件时与T4模板相关的问题。不幸的是,我没有使用TypeLite,因此无法确认它是否解决了原作者的问题,尽管我认为它应该可以。
从KB页面上可以看到,其中一个问题如下:

问题6:

T4模板中,在引用一个为不同于桌面(完整)框架的.NET Framework版本构建的程序集时,会发生错误。例如,在引用便携式库时,就会出现错误。


2
看起来这个问题应该通过KB3151378得到解决。
版本14.0.25130.0的注意事项:
问题6:在T4模板中,当您引用一个为不同于桌面(完整)框架的.NET Framework版本构建的程序集时,会出现错误。例如,引用可移植库时会出现错误。

1
具体针对TypeLite,我打开了我的副本(相当过时但已经调整到适合我的需求),并停止了它成为可移植库。这是按照https://dev59.com/gmIj5IYBdhLWcg3wmWG1#23135170的步骤完成的。现在它不再是一个可移植库,我能够再次执行我的T4模板。
我有许多其他T4模板在我的解决方案中使用ImmutableObjectGraph(搜索GitHub),尽管它也使用可移植库,但它们都运行良好。我没有深入研究细节,但我学到了mscorlib 2.0.5.0与可移植库等相关联,而实际上我们不需要TypeLite本身是可移植的。
希望这能帮助其他人。
此外,由于这仍然是VS2015 Update 2中的回归,因此还存在一个开放的Connect问题https://blogs.msdn.microsoft.com/visualstudio/2016/03/03/visual-studio-2015-update-2-rc/

1
谢谢!这对我有用(警告仍然存在,但错误已经消失并且成功运行)。对于其他人来说,您可以从此处下载TypeLite的最新版本:https://bitbucket.org/LukasKabrt/typelite/downloads。我只需要转换一个名为“TypeLite.Net4”的项目。另一个“TypeLite”已经是类库了。最后一步是从项目中卸载TypeLite nuget包,并添加对这些新编译的dll的引用。 - Augusto Barreto
很高兴能帮助到其他人 :) - Ian Yates

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接