2014-01-30 31 views
1

我有兩個DLL,app1.dll和app2.dll,它們使用相同的第三個DLL util.dll,這可能在爲特定應用程序構建時具有稍微不同的行爲。DLL Hell問題:分配強名稱

我想實現app1.dll和app2.dll是孤立的有關他們使用的util.dll的版本。在MSDN上,我讀到爲util.dll分配一個強名稱是解決方案,即這個強名稱包含dll的名稱和版本以及由於簽名而產生的指紋。

我目前建util.dll ...

  • 與KeyFileApp1.snk APP1和版本1.0.0.1
  • 的APP 2與KeyFileApp2.snk和版本1.0.0.2

並且在使用各自的util.dll構建部署應用程序時,這些接縫可以在目標機器上工作。

不過,我有一些模糊之處:

  1. 難道是足以建立util.dll總是1.0.0.0版本,但不同的密鑰文件,使它們的應用程序,並使用正確的DLL到底有兩種應用?
  2. 僅當將全局程序集放入全局程序集緩存或將其作爲私有程序集時才考慮強名稱?
+0

如果我是你,我肯定會區分util.dll的兩個版本的版本號(不需要是主要的),否則你正在問你的地獄,如你在標題中提到的。 – Grzenio

回答

2
  1. 是的,你可以用相同的名稱和版本,但不同的公鑰兼得。它是好的/可維護的解決方案 - 取決於你。可能會混淆更多的人,而不是你想要的。即沒有常規的人可以告訴你DLL使用的「公鑰」,但大多數人可以右鍵單擊並查看細節以查看版本(如果在組件上正確設置)。

  2. 強烈的名字總是被考慮。請注意,如果您擁有本地和GAC副本GAC,那麼將使用總是,如果GAC中的版本可以接受的話。

注:

  • 強名稱是「病毒」,因爲你不能有強命名程序集依賴於一個沒有強名稱。要小心,因爲你需要很多的程序集來強制簽名(本身不是壞事)並且有很好的版本控制計劃。
  • 您最終可能會加載相同程序集的多個版本,並將其加載到進程中 - 爲其做好準備或使用發佈者策略將所有版本映射到最新版本。