引用.NET 4.0项目中的.NET 2.0混合模式程序集,需要什么“附加配置”?

人盡茶涼 提交于 2020-02-27 04:46:17

我有一个项目,我想在其中使用某些.NET 4.0功能,但核心要求是我可以使用针对2.X编译的System.Data.SQLite框架。 我看到有可能提及此问题,例如此处接受的答案,但我看不出如何实际实现。

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

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

需要什么“附加配置”?


#1楼

通过添加具有“ useLegacyV2RuntimeActivationPolicy”属性集的“ startup”元素可以解决此问题。

<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>
  ......
....

#2楼

上面的代码对我没有用(我正在使用网络应用程序)-但这确实...

编辑文件夹中的sgen.exe.config文件(我必须先创建一个); C:\\ Program Files(x86)\\ Microsoft SDKs \\ 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>

#3楼

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


#4楼

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

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

如果这不能解决您的问题,则->在项目参考中, Right Click on DLL出现错误的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引用的引用,然后它将起作用。


#5楼

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!