2

我的代码依赖于第三方库 (dll)。

由于Nugget 无法管理不同的平台也在此处),我创建了两个重复相同代码的项目(将代码保持在最低限度 - 基本上是一个 API 包装器)。

一个项目引用 dll 的 x86 版本,另一个项目引用 x64。

我的解决方案中只有一个项目引用了这些项目。
它同时引用它们,并且有条件地这样做(所以当我使用 x64 配置构建时,项目引用了 x64 dllis 引用等)

它的 .csproj 包含如下内容:

ProjectReference Include="..\3rdPartyModule.x86\3rdPartyModule.x86.csproj" Condition="'$(Platform)' == 'x86'"

ProjectReference Include="..\3rdPartyModule.x64\3rdPartyModule.x64.csproj" Condition="'$(Platform)' == 'x64'"

现在,发生了一件奇怪的事情:

如果我卸载两个项目,然后先加载 x86 一个,然后加载 x64 一个,x64 中的引用实际上表明它指向 x86 dll(我可以看到路径)。

如果我更改加载顺序,则相反:x64 很好,但 x86 引用 x64 版本!

我的猜测是 VS 在内存中找到了一个同名的程序集,并自动将第二个引用到第一个。

这是一个已知的问题?有办法解决吗?

4

1 回答 1

1

在 VS2010 中曾经有一个错误,在这种情况下,引用无法在 VS UI 中正确显示,但在编译期间会复制正确的文件。就您而言,您是否在构建输出目录中获得了正确版本的文件?

此外,您可能希望为引用的程序集设置不同的别名(来自引用属性)。它可能会有所帮助。

于 2012-10-18T13:10:04.037 回答