2011-06-01 132 views
0

我有一個通用的silverlight項目。這個項目項目包括常量和靜態類。Silverlight項目中常見的DLL引用

Silverlight應用程序我引用這個公共庫。 另外,我有一些按需加載的外部模塊(通過Prism)。每個模塊都是它自己的.Xap文件,它們也引用公共庫。

因此,現在Silverlight應用程序中的每個Xap都有一個對Common.dll的引用。 這是否意味着common.dll會在每次加載xap時加載,或者它是否意味着只有主應用程序的common.dll纔會被加載?

即時通訊的最終問題是: 如果我在common.dll中進行代碼更改(錯誤修復),我是否必須發佈所有Xap文件或只是主要的應用程序xap?

謝謝。

+0

仔細看看ChrisF對我的建議。我認爲這樣更合適一些。 – 2011-06-09 16:21:57

回答

0

默認情況下DLL是按需加載的。這意味着你不能確保他們將從哪個目錄加載。這是模塊化應用程序中的一個常見問題,並且沒有現成的處方。本質上取決於要求。

有些事情可以做:

  1. GAC的Common.dll在目標環境中。這將允許您集中控制該DLL的版本。
  2. 每次Common.dll更改時都會釋放一切(如您所述)。

爲了保持我們的xcopy部署完好,我們選擇了2號(我們將我們的「Common.dll」視爲一個很少發生更改的合約程序集)。

如果您預計Common.dll上的代碼流失率會很高,或者您希望保持模塊的部署計劃完全自治(如果模塊是由單獨的團隊單獨開發和部署的,那麼數字1可能會更有意義例如構建和源代碼庫)。

編輯:它看起來像Silverlight有東西可以提供GAC方法的xcopy變體。 ChrisF的答案可能就是我將使用Silverlight的方式(我們使用WPF,所以這有些不同)。我會在這裏留下後代。

1

如果您在所有參考常見dll的項目中使用Assembly Caching,那麼您只需下載一個副本,因爲它是自己的zip文件。這樣,所有不同的XAP文件都會引用相同的dll。否則common.dll將包含在每個引用的XAP文件中。

您需要爲您的common.dll創建一個common.extmap.xml文件,該文件需要位於引用dll的同一文件夾中。

+0

太棒了!我對Silverlight知之甚少。這聽起來像GAC方法的XCopy版本。很酷。 – 2011-06-01 22:08:34