在.NET 4.0项目中引用.NET 2.0混合模式程序集需要什么"附加配置"?

jam*_*one 517 .net c# sqlite .net-4.0 system.data.sqlite

我有一个项目,其中我想使用一些.NET 4.0功能,但核心要求是我可以使用针对2.X编译的System.Data.SQLite框架.我看到提到这是可能的,例如这里接受的答案,但我不知道如何实际实现这一点.

当我在参考2.X程序集时尝试运行我的4.0项目时,我得到:

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

什么"附加配置"是必要的?

Ree*_*sey 682

要使用CLR 2.0 混合模式程序集,您需要修改App.Config文件以包含:

<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

关键是useLegacyV2RuntimeActivationPolicy国旗.这会导致CLR使用最新版本(4.0)加载混合模式程序集.没有它,它将无法工作.

请注意,这仅适用于混合模式(C++/CLI)程序集.您可以加载所有托管CLR 2程序集而不指定此内容app.config.

  • Microsoft应该在异常对话框中创建一个按钮:"在stackoverflow上搜索此异常消息" (76认同)
  • 帮助我的是将这一行放到*NUnit的*配置文件中:<startup useLegacyV2RuntimeActivationPolicy ="true"> <supportedRuntime version ="v4.0"/> <requiredRuntime version ="v4.0.20506"/> </ startup> (19认同)

Jas*_*Cav 34

论坛帖子位于.NET Framework开发人员中心.它可能会提供一些见解.

(添加到应用程序的配置文件.)

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 如何将此应用程序配置用于NANT构建? (2认同)

Ant*_*ser 13

根据您所针对的框架的版本,您可能希望在此处获取正确的字符串:

http://msdn.microsoft.com/en-us/library/ee517334.aspx

我浪费了几个小时试图弄清楚为什么我的发布目标.Net 4.0客户端需要完整版本.我最后用这个:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0.30319" 
               sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
Run Code Online (Sandbox Code Playgroud)


Rah*_*han 11

设置app.config文件后,visual studio将在名为App.exe.config的bin文件夹中生成一个副本.在部署期间将其复制到应用程序目录.听起来很明显但令人惊讶的是很多人都错过了这一步.WinForms开发人员不习惯配置文件:).


小智 8

一起使用2.0和4.0程序集并不是一件容易的事.

app.config中受支持的框架声明的ORDER实际上对抛出混合模式的异常有影响.如果您翻转声明顺序,您将收到混合模式错误.这就是这个答案的目的.

因此,如果您在Windows窗体应用程序中收到错误,请尝试此操作,主要是Windows窗体应用程序.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>
Run Code Online (Sandbox Code Playgroud)

或者,如果项目不是Windows窗体.在Web项目中,将其添加到web.config文件中.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>
Run Code Online (Sandbox Code Playgroud)


Des*_*han 7

能够通过添加"startupLegacyV2RuntimeActivationPolicy"属性集的"startup"元素来解决问题.

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>
Run Code Online (Sandbox Code Playgroud)

但是必须将它作为App.config中配置标记的第一个子元素才能生效.

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....
Run Code Online (Sandbox Code Playgroud)


小智 5

以上对我没有用(我正在开发一个网络应用程序) - 但这确实......

编辑文件夹中的sgen.exe.config文件(我必须先创建一个); C:\ Program Files(x86)\ Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools(v7.0文件夹中也有一个,但我不需要更改那个,我使用的是VS2012)

XML的内容应该如下所示(在之前的答案中相同)

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您正在使用Web服务并且v2.0程序集是由WcfSvcHost.exe加载的依赖项,那么您必须包含

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
</startup>
Run Code Online (Sandbox Code Playgroud)

在..\Microsoft Visual Studio 10.0\Common7\IDE\WcfSvcHost.exe.config文件中

这样,Visual Studio将能够在运行时通过加载程序发送正确的信息.


归档时间:

查看次数:

180458 次

最近记录:

6 年,1 月 前