C# 什么';附加配置';是否需要在.NET 4.0项目中引用.NET 2.0混合模式程序集?

C# 什么';附加配置';是否需要在.NET 4.0项目中引用.NET 2.0混合模式程序集?,c#,.net,sqlite,.net-4.0,system.data.sqlite,C#,.net,Sqlite,.net 4.0,System.data.sqlite,我有一个项目,其中我想使用一些.NET4.0功能,但核心要求是我可以使用System.Data.SQLite框架,该框架是根据2.X编译的。我认为这是可能的,但我不知道如何真正做到这一点 当我在引用2.X程序集的同时尝试运行我的4.0项目时,我得到: 混合模式程序集是根据运行时版本“v2.0.50727”构建的 在4.0运行时中,如果没有额外的 配置信息 需要什么“附加配置”?为了使用CLR 2.0混合模式程序集,您需要修改App.Config文件以包括: <?xml version=&q

我有一个项目,其中我想使用一些.NET4.0功能,但核心要求是我可以使用System.Data.SQLite框架,该框架是根据2.X编译的。我认为这是可能的,但我不知道如何真正做到这一点

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

混合模式程序集是根据运行时版本“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)程序集重要。您可以加载所有托管CLR 2程序集,而无需在.NET Framework Developer Center的
app.config

中指定该程序集。这可能会提供一些见解

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


根据目标框架的版本,您可能希望查看此处以获得正确的字符串:

我花了好几个小时试图弄明白为什么我的发布目标.NET4.0客户端需要完整版本。 我最后用了这个:

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

我使用了这个配置:

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


为我工作

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

同时使用2.0和4.0程序集不是很简单

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

因此,如果您在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.config文件

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

通过添加“启动”元素和“useLegacyV2RuntimeActivationPolicy”属性集,解决了该问题

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

但必须将其作为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>
  ......
....

......
....

以上这些对我不起作用(我正在开发一个web应用程序)-但这确实

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

XML的内容应该如下所示(与前面的答案相同)


如果您在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将能够在运行时通过加载程序发送正确的信息。

我在谷歌搜索了3-4个小时后找到了解决方法。我补充了以下内容

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

如果这不能解决您的问题,那么-->在项目引用中-->右键单击DLL出现错误的地方-->
选择属性-->
-->
检查运行时版本-->如果它是
v2.0.50727
,那么我们知道问题所在。 问题是:-您拥有相应DLL的
2.0版本。

解决方案是:-您可以
从项目引用中删除相应的DLL
,然后
从相应的网站下载最新版本的DLL的
,并添加最新版本的DLL引用,然后它就会工作。

我也有这个类库问题,如果任何人对添加到主应用程序的类库有问题。加上

<startup useLegacyV2RuntimeActivationPolicy="true">


主要应用程序,然后由类库选择。

当我们更改为Visual Studio 2015时,我遇到了这个问题。以上所有答案都不适用于我们。最后,我们将下面的配置文件添加到机器上的所有sgen.exe可执行文件中,使其正常工作

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

尤其是在这个位置,即使我们的目标是.NET 4.0:


C:\Program Files(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6 Tools我遇到了同样的错误,我一直在将建议的启动语句添加到解决方案中的各种配置文件中,试图隔离框架不匹配。什么都没用。我还补充说。那也没用。查看导致问题的实际文件(只会说它被“移动或删除”)发现它实际上是许可证编译器(LC)


删除有问题的licenses.licx文件似乎解决了这个问题。

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

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

至:C:\Program Files(x86)\Micros
<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>