我有一个运行 .net4 的 webapi 应用程序,我正试图在服务器上工作。该 api 在本地运行良好。
无法从程序集“mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”加载类型“System.Runtime.CompilerServices.ExtensionAttribute”。
我需要改变什么才能让它在我的服务器上工作?
我有一个运行 .net4 的 webapi 应用程序,我正试图在服务器上工作。该 api 在本地运行良好。
无法从程序集“mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”加载类型“System.Runtime.CompilerServices.ExtensionAttribute”。
我需要改变什么才能让它在我的服务器上工作?
您确定您是针对 .NET 4 而不是 .NET 4.5 进行编译的吗?我们在 .NET 4.5 中将 ExtensionAttribute 移至 mscorlib(因此我们可以将扩展方法放在 mscorlib 中)。如果您针对 .NET 4.5 编译某些内容并尝试在 .NET 4 上运行它,我预计会看到这样的错误。
编辑:实际上,如果您使用 ILMerge,则需要在 targetplatform 开关中使用 .NET 4.0 引用程序集的路径,而不是实现的路径,如本博文所述:http://www.mattwrock .com/post/2012/02/29/What-you-should-know-about-running-ILMerge-on-Net-45-Beta-assemblies-targeting-Net-40.aspx
另一种可能的解决方案(其他有相同的例外)可能是您的构建服务器没有 .net 4.0 参考程序集,在安装 .net 4.5 后,您需要从您的开发框中复制它们。
这些通常是这样的:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0
有关更多详细信息,请参阅Marc 的博客文章
I had the same issue and fixed by creating a new application pool for my site after installing .NET Framework 4.5
我对 .NET 的经验很少,我对 .NET 也有同样的问题System.Runtime.CompilerServices.ExtensionAttribute
。
解决方案:删除项目引用,对 Framework 4.5 的引用,因为在我的情况下,因为我没有安装这个框架。
还要检查您的项目所依赖的 DLL。我遇到了同样的问题,发现一个 DLL 导致了这个问题。此 DLL 是我的本地计算机上的旧版本(为 .NET 4.0 编译),站点通过 localhost 运行良好,但在站点失败的实时服务器上是较新的版本(为 .NET 4.5 编译)。