2011-12-28 51 views
1

我有以下問題:
我有一個解決方案,例如, Core.prjExtension.prj
現在,Core.prj引用了一個名爲profile.dll(v1)和Extension.prj的dll,它引用了具有相同名稱和相同名稱空間但不同版本profile.dll(v2)的dll。 Extension.prj也參考Core.prj項目。
Core.prj具有源文件,例如, A.cs,其中定義了一些虛擬方法。 Extension.prj有一個源文件,例如B.cs它有一些方法覆蓋A.cs中定義的虛擬方法,從Core.prjexe和dll引用dll具有相同的名稱和相同的命名空間

我的想法是構建並運行Extension.prj,並在B.cs中調用A.cs中的虛擬方法來避免重寫方法。現在,在B.cs方法將使用類型從profile.dll(V2)和方法A.cs將使用類型從profile.dll(V1),但這是不可能的,因爲從A.cs使用類型的虛擬方法從profile.dll(V2),而不是從profile.dll(V1 )。

這種想法引用不同版本的DLL,具有相同的名稱和命名空間,從EXE和DLL無論如何可行?

+0

我知道你可能有你的理由,但使用不同的版本在運行同一個庫的是要不惜一切代價避免的噩夢。您當然可以在環境中使用同一個庫的不同版本,只需使用程序集重定向來「升級」應用程序使用的版本,但通常應用於整個解決方案,而不是解決方案內部。 – 2011-12-28 12:42:05

回答

1

我認爲你可以在這種情況下使用extern alias指令。

從MSDN:

要引用兩個組件具有相同的完全限定的類型名稱, 別名必須在命令提示來指定,如下所示:

/R:GridV1 =格.DLL

/r:GridV2=grid20.dll

這將創建外部別名GridV1和GridV2。要在程序中使用這些 別名,請使用extern 關鍵字引用它們。例如:

extern alias GridV1;

extern alias GridV2;

http://msdn.microsoft.com/en-us/library/ms173212.aspx

相關問題