我的.Net应用程序可以引用两个不同版本的.net框架库吗?

时间:2012-01-31 14:37:08

标签: c# .net clr multitargeting

假设我有两个项目,P4和P3,分别针对.net 4.0和3.5。

每个项目也都有对System.Data的引用。 在P4的情况下,它将是System.Data v4.0.0.0 对于P3,它将是System.Data v2.0.0.0

项目P4也引用了P3。

如果加载并执行了P4,它将使用.net 4.0 CLR。在运行时,对System.Data的引用似乎在P4和P3内解析为v4.0。我可以通过使用assemblyBinding重定向覆盖它,但P4和P3都解析为v2.0。

有什么方法可以配置我的应用程序,以便P4使用v4.0而P3使用v2.0?

2 个答案:

答案 0 :(得分:4)

看看这个:In-Process Side-by-Side这可能会有所帮助。

答案 1 :(得分:3)

如果你能控制P3,是的。转到项目的references部分,找到System.Data引用,并查看它的属性窗口(右键单击 - > Properties)。

为“特定版本”属性选择“True”。重新编译,重新部署等。

请注意,如果程序集尝试加载时,如果计算机上未安装.NET 2,3或3.5,则会导致各种运行时故障。

修改

  

我试过这个,但没有运气。 P3仍然运行v4.0。你知道这个设置是否会对为P3生成的程序集有任何明显的影响吗?例如。清单显示“.ver 2:0:0:0”是否“特定版本”设置为真。

尝试将此添加到您的app.config:

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>