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

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

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

需要什么“额外配置”?


当前回答

经过3-4小时的谷歌搜索,我找到了解决这个问题的方法。我添加了以下内容

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

If this doesn't solve your problem then--> In the Project References Right Click on DLL where you getting error --> Select Properties--> Check the Run-time Version --> If it is v2.0.50727 then we know the problem. The Problem is :- you are having 2.0 Version of respective DLL. Solution is:- You can delete the respective DLL from the Project references and then download the latest version of DLL's from the corresponding website and add the reference of the latest version DLL reference then it will work.

其他回答

我使用这样的配置:

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

为我工作

同时使用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>

或者项目不是Windows窗体。在Web项目中,将此添加到Web。配置文件。

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

我在升级到Visual Studio 2015时遇到了这个问题,这里发布的解决方案都没有任何区别,尽管配置是正确的,但更改的位置不是。我通过添加以下配置修复了这个问题:

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

到:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config

然后重启Visual Studio。

为了使用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中指定。

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

这样做解决了问题