【发布时间】:2012-07-18 01:20:11
【问题描述】:
我有一个包含 2 个项目的解决方案:Proj1 和 Proj2,其中 Proj1 是启动项目。
Proj1 引用 Proj2(为了调用 Proj2 的类)并且它的现有代码还引用了一个名为 A 的第 3 方 DLL,版本为 1.0.0.0。
Proj2 引用了相同的第 3 方 DLL A,但它在 2.0.0.0 版本中引用它,因为该项目中的类需要更新的实现,而 1.0.0.0 中没有。
到目前为止,我已经尝试了以下方法: 1.引用A时将“特定版本”切换为true 2.在Proj2中添加了一个名为“v2Folder”的文件夹并添加了一个v2.0.0.0,将其“复制到输出目录”设置为始终复制 3. 在app.config中添加“探测路径”以指向带有v2.0.0.0 DLL的子文件夹
我想要的是在普通 \bin\ 文件夹中看到 A v1.0.0.0,在 \bin\v2Folder 中看到 A v2.0.0.0,我希望当我运行 Proj1.exe 时,Proj1 是旧的代码依然会调用A v1.0.0.0的方法,只有在调用Proj2实现的时候才会调用A v2.0.0.0的方法。
问题是,当我构建我的解决方案时,v1.0.0.0 被 v2.0.0.0 取代,构建日志有类似“无法解决冲突”A,版本 = 2.0.0.0,文化=neutral, PublicKeyToken=blah”和“A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=blah”。任意选择“A, Version=2.0.0.0, Culture=neutral, PublicKeyToken=blah”。
有人可以帮忙吗?
【问题讨论】:
-
感谢阿德里亚诺的建议。我的问题是我希望我的应用在代码的不同部分使用这两个版本,即我想同时保留版本 1 和 2。
-
为什么不升级 Proj1 以使用更新版本的 DLL "A"?不建议使用同一 DLL 的不同版本,如果不使用 AssemblyResolver 进行破解,实际上是不可能的。以下是描述 NuGet 如何在这种情况下帮助您的链接:blog.davidebbo.com/2011/01/…