2010-07-06 27 views
6

默認情況下Visual Studio將所有dll'複製到每個項目的bin文件夾中。這還包括System.dll(除了mscorlib.dll和System.dll),如System.Xml.Linq,System.ComponentModel.Composition(自SL4以來包含)等。複製本地和系統dll' - 有什麼意義?

由於這些文件包含在每個XAP,XAP大小都有相當大的增長。在我有限的測試中,將「複製本地」設置爲false似乎不會破壞任何內容。爲什麼Visual Studio將這些文件添加到bin路徑中?由於用戶已經擁有Silverlight,我可以假設這些程序集已經安裝在每個用戶的GAC中,或者我錯過了什麼?

回答

5

你提到不包含在運行時的文件,安裝Silverlight的DLL的被稱爲。作爲下載的一部分,使用這些庫的Silverlight應用程序必須將它們提供給用戶。

您可以通過在項目屬性頁的Silverlight選項卡中設置「通過使用庫緩存來減少XAP大小」選項來最大限度地降低一些影響。

此選項會將這些文件中的每一個放置在單獨的Zip文件中,這些文件將放置在與XAP相同的文件夾中。

這有助於在您的網站可能有多個XAP的各種應用程序或頻繁發佈新版本的情況下。對於很少更改或被許多獨立訪問者訪問的單個應用程序,它並不那麼有用。

+0

完全合理。感謝您的信息...非常有幫助。 – user1961100 2016-07-14 14:09:42

0

不默認默認情況下,通常存儲在GAC中的特定於框架的dll不會複製到輸出bin目錄,並且您可以假定它們將位於客戶端計算機上。

上面提到的Copy Local默認爲false,所以我相信在某個階段它們被更改爲true。

然而,不知道到底該怎麼我不能說完全

+0

在我的情況下,它們是System.Xml.Linq,System.Windows,System.ComponentModel.Composition,System.Runtime.Serialization和System.Windows.Browser。 – 2010-07-06 11:54:12

+0

@Blake:所有這些DLL都是SDK的一部分,並且需要從站點提供,作爲緩存庫(請參閱我的答案)或作爲Xap的一部分。 – AnthonyWJones 2010-07-06 11:56:33

0

我認爲這裏的關鍵是「似乎沒有任何破壞」。因爲Silverlight應用程序可以在多種版本的平臺和瀏覽器上運行,所以您不能假設某些內容會起作用,因爲它可以在您的計算機上運行,​​甚至可以在一兩臺計算機上運行。

如果包含DLL,因爲它們可能是需要的,所以如果您計劃在廣泛的應用程序上進行規劃,您需要確定它們將在那裏。

例如,我一直在研究一個基於Prism的應用程序,並延遲加載模塊。大多數XAP已經減少到大約20k,因爲二級模塊可以保證能夠使用它們所需的DLL,因爲它們在Shell XAP中。

相關問題