首页 文章

什么'additional configuration'是在.NET 4.0项目中引用.NET 2.0混合模式程序集所必需的?

提问于
浏览
506

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

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

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

需要什么“附加配置”?

16 回答

  • 33

    我用过这个配置:

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

    为我工作

  • 0

    在此位置添加以下C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \ x64 FileName:sgen.exe.config(如果找不到此文件,请创建并添加一个)

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

    这样做解决了这个问题

  • 8

    要使用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程序集,而无需在 app.config 中指定它 .

  • 677

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

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

    But had to place it as the first child element of configuration tag in App.config for it to take effect .

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

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

    编辑文件夹中的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>
    
  • 4

    这是.NET Framework开发人员中心的forum post . 它可能会提供一些见解 .

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

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

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

  • -1

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

  • 0

    在将一些代码从VS 2008迁移到VS 2010时,我遇到了类似的问题 . 对App.config文件进行更改后,我解决了这个问题 .

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

    我也有这个类库的问题,如果有任何人有问题,你的主应用程序中添加了类库 . 只需添加

    <startup useLegacyV2RuntimeActivationPolicy="true">
    

    你的主要应用程序,然后由类库选择 .

  • 13

    升级到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 .

  • 1

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

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

    如果这不能解决你的问题那么 - >在项目参考 Right Click on DLL 你得到错误 - > Select Properties - > Check the Run-time Version - >如果它是 v2.0.50727 那么我们就知道了这个问题 . 问题是: - 你有 2.0 Version of respective DLL. 解决方案是: - 您可以从项目引用 delete the respective DLL 然后从相应的网站 download the latest version of DLL's 添加最新版本DLL引用的引用然后它将工作 .

  • 0

    我遇到了同样的错误,并花了很多时间将建议的启动语句添加到我的解决方案中的各种配置文件中,试图隔离框架不匹配 . 没有任何效果 . 我还添加了startup information to my XML schemas . 这也没有帮助 . 查看导致问题的实际文件(仅表示它是"moved or deleted")显示它实际上是许可证编译器(LC) .

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

  • 3

    一起使用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.config文件 .

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

    当我们改为 Visual Studio 2015 时,我遇到了这个问题 . 上述答案都不适合我们 . 最后我们通过将以下配置文件添加到 ALL sgen.exe executables on the machine 来实现它的工作

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

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

    C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

  • 11

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

    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>
    

相关问题