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

当我只是试图运行我的4.0项目,同时引用2。我得到:

混合模式程序集是根据运行时版本“v2.0.50727”构建的 并且不能在4.0运行时加载 配置信息。

需要什么“额外配置”?


当前回答

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

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

关键是useLegacyV2RuntimeActivationPolicy标志。这将导致CLR使用最新版本(4.0)加载混合模式程序集。没有这一点,它就不会起作用。

注意,这只对混合模式(c++ /CLI)程序集有影响。你可以加载所有托管的clr2程序集,而不需要在app.config中指定。

其他回答

在将一些代码从VS 2008迁移到VS 2010时,我也遇到了类似的问题 修改App.config文件为我解决了这个问题。

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

我也有这个问题与类库,如果有人有问题与类库添加到您的主应用程序。只需添加

<startup useLegacyV2RuntimeActivationPolicy="true">

到你的主应用程序,然后由类库选择。

上面的方法对我没用(我正在开发一个web应用程序)——但是这个方法有用……

编辑文件夹中的sgen.exe.config文件(我必须先创建一个); C:\Program Files (x86)\Microsoft sdk \Windows\v8.0A\bin\NETFX 4.0工具 (也有一个在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>

在此位置添加以下内容C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64 文件名:sgen.exe。config(如果你没有找到这个文件,创建并添加一个)

<?XML版本="1.0"?> < >配置 运行时> < < generatePublisherEvidence启用= " false " / > 运行时> < / <启动useLegacyV2RuntimeActivationPolicy = " true " > <supportedRuntime version="v4.0" /> 启动> < / > < /配置

这样做解决了问题

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

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

关键是useLegacyV2RuntimeActivationPolicy标志。这将导致CLR使用最新版本(4.0)加载混合模式程序集。没有这一点,它就不会起作用。

注意,这只对混合模式(c++ /CLI)程序集有影响。你可以加载所有托管的clr2程序集,而不需要在app.config中指定。