混合模式程序集是针对版本“v1.1.4322”构建的。

49

我在这里(答案2)包含了一个在C# .NET 4.0应用程序中的DirectX播放器。问题是当我尝试初始化该对象(即Player mPlayer = new Player())时,出现以下错误:

混合模式程序集是针对版本“v1.1.4322”运行时构建的,在没有其他配置信息的情况下无法加载到4.0运行时中。

有人知道这是什么问题吗?


重要提示:如果错误的列“文件”为SGEN,则修复需要在sgen.exe旁边创建一个名为sgen.exe.config的文件。例如,对于VS 2015,请创建C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config。来源:SGEN混合模式程序集 最小文件内容:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration> - ToolmakerSteve
3个回答

72

我修复这个错误的方法是通过更改我的app.config上的'configuration'节点,从这个:

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

到这样:

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

9
感谢您进一步澄清对于我们这些不常修改app.config xml文件的人来说如何将该值设置为true。+1 - Jacklynn
很高兴能帮忙,杰克。当时我不得不自己寻找,所以我想还有其他人也可以用到这些额外的信息 :) - Gustavo Mori
以上解决方案在我之前遇到这个问题的每一个情况下都有效。如果有人发现自己继承了一个项目,其中此方法不起作用,并且您知道它应该起作用,请确保检查“将App.Config复制到输出目录”=始终或更新,否则您会感到沮丧。 - El-Ahrairah

70

您需要添加一个 app.Config 文件并将 useLegacyV2RuntimeActivationPolicy 设置为 true。

这是在 .NET 4 应用程序中使用混合模式 CLR 2 组件所必需的。


3
@Badescu 我也很好奇,这里有一个解释链接:http://msdn.microsoft.com/zh-cn/library/x0w2664k.aspx - Badaro
1
谢谢!!!这是我遇到过的最奇怪的问题。在VS 2012 .Net 4.0中,当我初始化与此DLL相关的任何类型的变量时,我的应用程序会立即挂起。我从未见过这样的情况。在找到这个之前,我找不到关于这个问题的任何信息! - Quinxy von Besiex
请原谅我的无知,但我遇到了同样的问题。我的问题是你实际上在哪里创建app.config文件?我在文件“dcexec.exe.config”中看到了相同的<startup>标签,但在这里更改并重新启动服务器没有任何效果。 - Neil
@Neil它在主可执行文件的app.config文件中。它必须与您正在运行的exe放在一起,名称相同等等。 - Reed Copsey
@ReedCopsey 尽管在典型的 Visual Studio 项目设置中,有一个名为“app.config”的文件,在项目的顶层文件夹中(紧挨着 C# .csproj 或 VB .vbproj 文件),它会被 Visual Studio 复制,成为主可执行文件的“myprojectname.exe.config”。至少这是我在 VS 2010 中看到的。今天尝试了 C# 和 VB 的 WinForm 应用程序。 - ToolmakerSteve

4
以下是可能的装配配置:

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
</configuration>

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