混合模式程序集是针对运行时的“2.0.50727”版本构建的,无法在 4.0 运行时中加载

Posted

技术标签:

【中文标题】混合模式程序集是针对运行时的“2.0.50727”版本构建的,无法在 4.0 运行时中加载【英文标题】:Mixed mode assembly is built against version '2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime 【发布时间】:2013-01-08 15:20:06 【问题描述】:

我正在使用 Visual Studio 2012 和 .Net Framework 4.5 我有 2 个解决方案:1) WPF 应用程序 2) 类库 (dll)

类库包含 3 个按钮和一个必须位于 WindosFormsHost 控件内的控件,因为它是为 WinForms 制作的。

.NET Framework 之外唯一引用的程序集是用于上述 winforms 控件和 iTextSharp。

winforms 控件似乎有点旧,当我将引用放入我的 dll 中时,我得到了与标题相同的错误,但在其他 SO 问题/答案之后,我将它放在我的配置文件中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

错误:

混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载

正如我所提到的,我已经看到发布此问题的问题,他们确实在我的 DLL 项目中解决了该问题,但在使用该 DLL 的项目中,我尝试了所有这些都无济于事。供参考:

    What 'additional configuration' is necessary to reference a .NET 2.0 mixed mode assembly in a .NET 4.0 project? Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config? Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime Mixed mode assembly is built against version X and cannot be loaded in version Y of the runtime without additional configuration information

在那个项目中,我的配置文件具有完全相同的标签和相同的值。

还要注意,在我的 WPF 应用程序中,一开始我收到一个错误,提示它无法找到指定的 dll(用于 winforms 控件),最后我将该控件的 dll 放入 GAC。

我已经尝试为所有可能性(4.5、4.0 完整和客户端、3.5 完整和客户端、3.0 和 2.0)更改我的目标框架,在调试和发布中构建我的 DLL,并将“生成序列化程序集”设置为OFF 也将平台目标从 Any CPU 更改为 x86 和 x64。我只尝试一次更改一个设置的值。

这是 VS2012 中的问题还是我需要做些什么来解决这个问题?

编辑:

上述错误在设计时显示在错误列表中,设计器显示错误“无法创建'my_class'的实例”

那个内部异常说:“Set connectionId throw an exception”,这个内部异常是标题消息。

这仍然允许构建解决方案,并且在运行应用程序时,我得到的基本相同,除了最里面的异常说:

“无法加载文件或程序集 'SigPlusNET, Version=1.1.3358.14336, Culture=neutral, PublicKeyToken=6aef07010bb0624f' 或其依赖项之一。试图加载格式不正确的程序。”

那个是winForms控件的程序集,通过dotPeek检查,它唯一的依赖是.NET Framework的

【问题讨论】:

右键单击您的 EXE 项目,属性,调试选项卡,取消选中“启用 Visual Studio 托管进程”选项,然后重试。 我没有在我的问题中提到这一点,但是我在设计时从工具箱中拖放控件时得到了这个(程序在运行时也会崩溃),我将编辑我的问题并添加我在运行时遇到的异常 您刚刚在编辑中发布的第二个错误是因为 SigPlusNET(或它使用的东西)是错误的目标平台。您的应用程序是 32 位的,而 SigPlusNET(或依赖项)是 64 位的,或者相反。 【参考方案1】:

我的方法有点不同。该错误清楚地表明某些 .NET 2.0.50727 组件包含在 .NET 4.0 中 在 App.config 文件中而不是使用这个:

<startup useLegacyV2RuntimeActivationPolicy="true"> 

解决了我的问题

【讨论】:

在所有的爆炸头在这里之后,我得到了它的工作。这是从 3.5 到 4.5.2 的升级,DTSX 执行失败。【参考方案2】:

使用 Bling for DirectX 10.0(CodePlex 的 Bling UI 工具包)。我得到了错误,导致我在此页面上寻找解决方案,D3D10.example 中的 app.config 文件包含支持的运行时,version=4 行。但它不包含 version=2 .net 行的后续行,使用 app.config 作为:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" />
  <supportedRuntime version="v2.0.50727" />
 </startup>
</configuration>

解决了这个问题,一旦将配置文件修改为所示代码,所有示例都在 VS2012 中运行。

我不知道这篇文章是不是太晚了,我这个月刚开始在 Windows 7 和 VS2012 上做一个图形项目,配置更改解决了我的问题。

【讨论】:

【参考方案3】:

这可能是因为您在此行的 1 个位置有 4.0,而在另一个位置有 4.5:

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

试试:

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

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

【讨论】:

报错说是4.0运行时,vs2012用的是其他版本吗?我的 wpf 和 dll 都使用 .net 4.5,所以这就是这些值的原因,无论如何,我只是尝试了你所说的,问题仍然存在。 我没用过4.5,所以不确定。我希望它对你有用。我想您可能同时拥有 4.0 和 4.5 项目,并且您需要有 2 个“supportedRuntime”标签,1 个用于 4.0,另一个用于 4.5。你可以试试吗? 我确实尝试过,但不起作用,环顾四周,如果 vs2012 使用另一个运行时我发现了这个:hanselman.com/blog/… 请参阅“为 .NET 4 和安全开发”中第三张图片下方的 xml .NET 4.5" 部分,和我的一样

以上是关于混合模式程序集是针对运行时的“2.0.50727”版本构建的,无法在 4.0 运行时中加载的主要内容,如果未能解决你的问题,请参考以下文章

混合模式程序集是针对版本X构建的,如果没有其他配置信息,则无法在运行时的版本Y中加载

混合模式程序集是针对运行时的“v2.0.50727”版本构建的,无法在 4.0 运行时中加载 - 研究的解决方案不起作用

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

混合模式程序集是针对“v2.0.50727”错误构建的

SQLite.dll混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。

c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。