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

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

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

需要什么“额外配置”?


当前回答

通过添加带有“useLegacyV2RuntimeActivationPolicy”属性集的“startup”元素能够解决这个问题。

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

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

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

其他回答

我使用这样的配置:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0"/>
    <supportedRuntime version="v4.0"/>
</startup>

为我工作

在此位置添加以下内容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" /> 启动> < / > < /配置

这样做解决了问题

如果您在web服务中工作,v2.0程序集是由WcfSvcHost.exe加载的依赖项,则必须包含

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
</startup>

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

这样,Visual Studio就能够在运行时通过加载器发送正确的信息。

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

我也遇到过同样的错误,花了很长时间将建议的启动语句添加到我的解决方案中的各种配置文件中,试图隔离框架不匹配。毫无效果。我还向XML模式添加了启动信息。这也无济于事。查看导致问题的实际文件(只会说它被“移动或删除”),发现它实际上是许可编译器(LC)。

删除有问题的license。Licx文件似乎已经解决了这个问题。