http://blog.csdn.net/woshidaniu/article/details/7061449
在vs2010 .net 4.0 引用dll .net 2.0
出现
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration
的包错,查了很多资料,花了很多时间
终于搞定,各位大侠见笑了。
外文网站上的。一个老外给别人的解答
From the Solution Explorer, select your project->right click->add->new item
Select Application Configuration, highlight everything and paste this (from earlier or perhaps other posts)
修改app.config即可。
<?xml version="1.0" encoding="utf-8" ?>
< configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<requiredRuntime version="v4.0.20506" />
</startup>
< /configuration>
在一个.net4.0的项目中要引用一个基于.net2.0的dll,直接添加应用后,无法使用,也无法编译,提示目标框架不能加载引用。
搜索了半天,不容易找到匹配的网页,估计是遇到这样的问题太少了吧。
大部分都是解释.net2.0的项目如何在.net4.0的环境中使用,例如在app.config中增加如下代码。
<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup>
上述代码是否好用,没验证。
但是我的问题还未解决。
无奈之下,想把当前程序的目标框架改成.net2.0,但是还是有顾虑。
注意到当前目标框架式.net 4.0 Client Profile,而不是.net4.0,想必有区别,于是改成了.net4.0居然问题解决了。
<startup> 元素
指定公共语言运行时启动信息。
<startup useLegacyV2RuntimeActivationPolicy="true|false" > </startup>
以下几节描述了特性、子元素和父元素。
特性
特性 | 说明 |
---|---|
useLegacyV2RuntimeActivationPolicy | 可选特性。 指定是否启用 .NET Framework 2.0 运行时激活策略,或者是否使用 .NET Framework 4 激活策略。 |
useLegacyV2RuntimeActivationPolicy 特性
值 | 说明 |
---|---|
true | 为所选运行时启用 .NET Framework 2.0 运行时激活策略,该策略要将运行时激活技术(如 CorBindToRuntimeEx 功能)绑定到从配置文件选择的运行时,而不是将它们盖在 CLR 版本 2.0 上。 因此,如果从配置文件选择 CLR 版本 4 或更高版本,则使用 .NET Framework 的早期版本创建的混合模式程序集将与所选 CLR 版本一同加载。 设置此值可防止 CLR 版本 1.1 或 2.0 加载到同一进程,有效地禁用进程中的并行功能。 |
false | 使用 .NET Framework 4 及更高版本的默认激活策略,即允许旧式运行时激活技术将 CLR 版本 1.1 或 2.0 加载到进程。 设置此值可防止混合模式程序集加载到 .NET Framework 4 或更高版本,除非他们内置有 .NET Framework 4 或更高版本。此值为默认值。 |
子元素
元素 | 说明 |
---|---|
指定应用程序仅支持公共语言运行时 1.0 版。 用运行时 1.1 版本或更高版本生成的应用程序应使用<supportedRuntime> 元素。 | |
指定此应用程序支持的公共语言运行时版本。 |
父元素
元素 | 说明 |
---|---|
configuration | 每个配置文件中的根元素,常用语言 runtime 和 .NET Framework 应用程序会使用这些文件。 |
<supportedRuntime> 元素应由使用运行时 1.1 版或更高版本生成的所有应用程序使用。 仅为支持运行时 1.0 版而生成的应用程序必须使用<requiredRuntime> 元素。
Microsoft Internet Explorer 中承载的应用程序的启动代码忽略 <startup> 元素及其子元素。
useLegacyV2RuntimeActivationPolicy 特性
如果您的应用程序使用旧式激活路径,如 CorBindToRuntimeEx function(CorBindToRuntimeEx 功能),并且您希望这些路径激活 CLR 的版本 4(而不是较早的版本),或者如果您的应用程序是用 .NET Framework 4 生成的,但在使用较早版本的 .NET Framework 生成的混合模式程序集上有依赖项,则此特性将派上用场。 在这些方案中,将特性设置为 true。
说明 |
---|
将该属性设置为 true 可以防止把 CLR 版本 1.1 或 CLR 版本 2.0 加载到同一进程,有效地禁用进程中的并行功能(请参见 COM 互操作的并行执行)。 |
下面的示例说明如何在配置文件中指定运行时版本。
<!-- When used with version 1.0 of the .NET Framework runtime --> <configuration> <startup> <requiredRuntime version="v1.0.3705" safemode="true"/> </startup> </configuration> <!-- When used with version 1.1 (or later) of the runtime --> <configuration> <startup> <supportedRuntime version="v1.1.4322"/> <supportedRuntime version="v1.0.3705"/> </startup> </configuration>