7

假设我有两个项目,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?

4

2 回答 2

4

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

于 2012-01-31T15:01:53.413 回答
3

如果您可以控制 P3,则可以。转到项目的引用部分,找到 System.Data 引用,然后查看它的属性窗口(右键单击 -> 属性)。

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

请注意,如果在尝试加载程序集时计算机上未安装 .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>
于 2012-01-31T14:44:52.913 回答