我的代码依赖于第三方库(dll)。
由于Nugget's inability to manage different platforms(also here),我创建了两个具有相同代码重复的项目(将代码保持在最低限度 - 基本上是一个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在内存中找到了一个具有相同名称的程序集,并自动将第二个引用到第一个程序集。
这是一个已知问题吗?有办法吗?
答案 0 :(得分:1)
VS2010曾经存在一个错误,在这种情况下,在VS UI中没有正确显示引用,但在编译期间会复制正确的文件。在您的情况下,您是否在构建输出目录中获得了正确的文件版本?
此外,您可能希望为引用的程序集设置不同的别名(来自引用属性)。这可能有所帮助。