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

6
我正在使用Visual Studio 2012和.NET Framework 4.5。我有两个解决方案: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的项目中,我已尝试了所有方法,但都无济于事。供参考:

  1. 需要在.NET 4.0项目中引用.NET 2.0混合模式程序集,还需要进行哪些“附加配置”?
  2. 混合模式程序集是针对运行时版本“v2.0.50727”构建的
  3. 在.NET 4配置中,“useLegacyV2RuntimeActivationPolicy”是做什么用的?
  4. 混合模式程序集是针对运行时版本“v2.0.50727”构建的,无法在4.0运行时中加载
  5. 混合模式程序集是针对版本X构建的,在没有额外的配置信息的情况下无法在版本Y的运行时中加载
在那个项目中,我的配置文件具有完全相同的标签和相同的值。
另外需要注意的是,在我的WPF应用程序中,一开始我遇到了一个错误,关于无法找到指定的dll(针对winforms控件),最终我将该控件的dll放入GAC中。
我尝试更改所有可能的目标框架(4.5、4.0完整版和客户端版本、3.5完整版和客户端版本、3.0和2.0),以及在调试和发布模式下构建我的DLL,并将“生成序列化程序集”设置为OFF,还将平台目标从任意CPU更改为x86和x64。我只尝试更改一个设置的值。
这是VS2012中的问题吗?或者我需要做什么来解决这个问题?
编辑:
上述错误显示在错误列表中的设计时间,设计器显示错误,说“无法创建'my_class'的实例”。
其中的内部异常说:“设置connectionId引发了异常”,而这个内部异常是标题消息。
这仍然允许解决方案被构建,在运行应用程序时,我基本上得到相同的结果,除了最内层的异常会说:
"无法加载文件或程序集'SigPlusNET,版本=1.1.3358.14336,文化=中立,PublicKeyToken=6aef07010bb0624f'或其某个依赖项。尝试加载格式不正确的程序。" 这是winForms控件的程序集,在通过dotPeek进行检查后,它唯一的依赖关系是.NET Framework的依赖项。

右键单击您的EXE项目,选择属性,调试选项卡,取消选中“启用Visual Studio托管进程”选项,然后再次尝试。 - Hans Passant
我在问题中没有提到这一点,但当我从工具箱拖放控件时,在设计时出现了这个问题(程序在运行时也会崩溃),我将编辑我的问题并添加我在运行时遇到的异常。 - Emmanuel Medina
2
您刚刚在编辑中发布的第二个错误是因为SigPlusNET(或其使用的某些内容)是错误的目标平台。要么您的应用程序是32位,而 SigPlusNET(或其依赖项)是64位,要么反之亦然。 - Kevin Crowell
3个回答

4

在使用DirectX 10.0的Bling UI Toolkit(位于CodePlex上)时,我遇到了错误,最终导致我来到这个页面寻求解决方案。D3D10.example中的app.config文件包括支持的运行时version=4行,但并没有包括后续的.net版本为version=2的行,使用的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上进行图形项目的开发,而配置更改解决了我的问题。


2

可能是因为您在同一行中的一个位置使用了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,这就是这些值的原因,在任何情况下,我刚刚尝试了您说的方法,问题仍然存在。 - Emmanuel Medina
我没有使用过4.5,所以我不确定。我希望它能对你有用。我猜可能你同时有一个4.0和4.5项目,需要有两个"supportedRuntime"标签,一个是4.0的,另一个是4.5的。你可以试试看吗? - Kevin Crowell
我尝试过了,不起作用,查看vs2012是否使用另一个运行时,我发现了这个链接:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx 请参见“同时为.NET 4和.NET 4.5安全开发”部分中第三张图片下面的xml,它与我的相同。 - Emmanuel Medina

2

我的做法有些不同。错误明确地指出在.NET 4.0的App.config文件中包含了一些.NET 2.0.50727组件。请使用以下代码替换:

<startup useLegacyV2RuntimeActivationPolicy="true"> 

它解决了我的问题。

在这里翻了很久,终于通过以下方法解决了问题。这是从3.5升级到4.5.2版本,DTSX执行失败的问题。 - DirtyHowi

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