这个程序集是由一个比当前加载的运行时版本更新的运行时构建的,因此无法加载。

58
我遇到了这个错误:"此程序集是由一个比当前加载的运行时更新的运行时构建的,因此无法加载。"
我有一个.NET 4.0的dll项目被.NET 2.0的项目调用。有没有一种方法来协调框架之间的差异?

12个回答

50

我有一个.NET 4.0的dll项目,它被一个.NET 2.0的项目调用。有没有办法解决框架上的差异?

很遗憾,不能这样做。.NET 4 CLR可以加载.NET 2程序集(通常情况下可以,但有一些例外情况,例如混合模式程序集),但反过来是不可以的。

您需要将.NET 2项目升级到.NET 4,或将.NET 4项目降级到.NET 3.5(或更早版本)。


14

如果您已经尝试了本页面上的所有其他逻辑解决方案,请再仔细检查一下。在我的app.config文件中,我引用了一个旧框架。

<startup>
  <supportedRuntime version="v2.0.50727"/>
</startup>

应该已经是

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

项目标签页正确显示为v4.0,但是app.config文件没有提交到我们的仓库进行更改。为了解决这个问题,我将框架更改为其他版本,然后再更改回v4.0,这样更新了我的app.config文件。


10

我收到了相同的错误信息。 我一开始使用的是

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe "C:\MyService\MyService.exe"

而不是

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "C:\MyService\MyService.exe"


这个方法可行,谢谢!实际上错误提示是由于我们使用的 Installutil 与 .Net Framework 版本不匹配,需要使用 V4.0 或更高版本。在我的情况下,当我遇到这个错误时,我使用了 v2.0.50727 的 installutil,而使用 v4.0.30319 解决了问题! - sanrns

6

由于只能将一个版本的运行时加载到进程中(尽管,正向加载 - 4.0 加载 2.0 - 是可以的),您有几个选择:

  • 升级 .Net 2.0 项目
  • 包装 .Net 2.0 项目(如果源代码不是你自己的)
  • 降级 .Net 4.0 项目
  • 将 .Net 4.0 项目加载到它自己的进程中(我相信这可以工作-但会需要一些努力,我的意见是)

5
您需要将.NET 2项目升级到.NET 4,或将.NET 4项目降级到.NET 3.5(或更早版本)。
如何升级.NET版本?我不确定在哪里以及要指定什么。请帮忙。
编辑: 我自己找到了答案。选择项目,右键单击并选择“属性页面”。在那里,您可以选择框架版本。或者选择项目,然后点击Shift+F4。

4

有趣的是,我一直遇到这个错误。对我有用的解决方法是在与gacutil.exe相同的目录中创建一个名为gacutil.exe.config的配置文件。配置文件内容(一个文本文件)如下:

<?xml version ="1.0"?> <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup> </configuration>

我在这里发布此内容供参考,并询问是否有人知道实际发生的情况。我不是声称这是"正确"的做法。


基本上是强制让gacutil.exe在.NET 4.0下运行。但是,gacutil通常用于允许您注册程序集。 - vapcguy

2
我也遇到了这个错误,但我的问题是我使用了旧版本的 GACUTIL.EXE
当我安装了最新版本的 .NET 并使用正确的 GACUTIL 后,它就正常工作了。
这个错误很容易让人误解,因为它让你觉得你要注册的 DLL 是不正确的。

2

更改INSTALL_UTIL_HOME目录,从C:\WINDOWS\Microsoft.NET\Framework\v2.0更改为C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319以安装服务。此错误主要是由版本不匹配引起的。


1
当我更改了托管特定项目的应用程序池的.Net框架版本时,我能够解决这个问题。
应用程序池 -> 高级设置 -> .Net框架版本(将v2.0更改为v4.0)

1
这个错误也可能是由于在IIS中选择了错误的.NET框架版本作为默认版本而触发的。
单击左侧“连接”视图下的根节点,然后从右侧“操作”视图中选择“更改.NET Framework版本”,然后从下拉列表中选择适当的.NET版本。

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