2012-07-18 61 views
2

我有兩個項目的解決方案:Proj1和Proj2,其中Proj1是啓動項目。需要一種方法來引用同一第三方DLL的2個不同版本

Proj1引用Proj2(爲了調用Proj2的類),它有現有的代碼也引用了一個名爲A的第三方DLL,版本爲1.0.0.0。

Proj2引用了相同的第三方DLL A,但它在2.0.0.0版中引用它,因爲此項目中的類需要1.0.0.0中不提供的較新實現。

到目前爲止,我已經試過如下:1。 引用 2.增加了一個名爲「v2Folder」在Proj2文件夾時,切換到「特定版本」爲真,並添加了V2.0.0.0它,設置其「複製到輸出目錄」以便始終複製 3.向app.config添加「探測路徑」以指向使用v2.0.0.0 DLL的子文件夾

我想要的是查看A v1。在正常的\ bin \文件夾中有0.0.0,在\ bin \ v2Folder中有一個2.0.0.0版本,我期望當我運行我的Proj1.exe時,Proj1的舊代碼仍然會調用一個v1.0.0.0的方法,只有在調用Proj2實現時才調用A v2.0.0.0的方法。

問題是,當我構建我的解決方案時,v1.0.0.0被替換爲v2.0.0.0,構建日誌有類似於「無法解決」A,Version = 2.0.0.0,文化=中立,PublicKeyToken = blah「和」A,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = blah「,任意選擇」A,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = blah「。

有人可以幫忙嗎?

+0

謝謝你的建議Adriano。我的問題是我希望我的應用程序在代碼的不同部分使用這兩個版本,即我想保留版本1和2. – codetc 2012-07-18 22:06:14

+0

爲什麼不升級Proj1以使用較新版本的DLL「A」?不建議使用不同版本的相同DLL,並且在沒有使用AssemblyResolver進行黑客入侵的情況下實際上不可能。這裏是描述如何NuGet可以幫助你在這種情況下的鏈接:http://blog.davidebbo.com/2011/01/nuget-versioning-part-1-taking-on-dll。html – 2012-07-18 22:07:37

回答

0

將第三方dll版本2.0重命名爲A_2.dll,並添加對重命名的dll的引用。

+0

將不起作用,因爲內部的namspaces和類名稱保持不變,這將導致命名衝突 – 2014-09-19 13:34:04

1

這可能使用extern alias功能。當您編譯,包括別名的DLL文件,例如:

csc.exe ... /reference:AV1=v1.0.0.0/A.dll /reference:AV2=v2.0.0.0/A.dll 

(這可以在Visual Studio中通過改變基準的aliases屬性設置爲好)

在CS文件你可以使用extern alias引用命名空間:

extern alias AV1; 
extern alias AV2; 
// using statements 

這使您可以參考各個版本獨立:

var v1foo = new AV1::Foo(); 
var v2foo = new AV2::Foo(); 

對於只使用其中一個DLL的項目,可以包含對所需版本的引用。

// ProjA cs file 
extern alias AV1; 
using Foo = AV1::Foo; // alternately, path to namespace 
... 
var foo = new Foo(); // from version 1 of library 


// ProjB cs file 
extern alias AV2; 
using Foo = AV2::Foo; // alternately, path to namespace 
... 
var foo = new Foo(); // from version 2 of library 

這允許在相同的解決方案中獨立引用這兩個版本的DLL。 (MSDN Reference。)

+0

感謝您爲示例代碼drf。我剛剛嘗試過,除了我單獨離開Proj1(所以它的別名仍然是「全局」),並且只指定了Proj2的代碼來使用「外部別名AV2」。我還在我的app.config中添加了「探測privatePath =」v12;「」,以便它知道從哪裏加載v12 DLL。在運行時,我仍然收到一個「FileLoadException」,說「無法加載文件或程序集'A,版本= 2.0.0.0,....」。 – codetc 2012-07-19 21:40:14

相關問題