2011-02-09 49 views
2

我在Silverlight中使用MEF動態加載輔助xap文件中的一些插件。此次要XAP文件是從引用各種插件項目的項目構建的,所有這些都是針對已經在主要xap文件中的dll構建的。防止dls被包含在xap中?

因此,我想非常明確地控制哪個dll最終在這個輔助xap中。包括來自主要xap文件的任何dll都是多餘的(並且還會導致MEF重新組合的問題)。但是Visual Studio似乎堅持要包含各種依賴的dll,即使CopyLocal屬性只設置爲True以引用插件項目。

到目前爲止,我已經找到了工作的唯一的事情是添加明確提到在建立二級XAP頂級項目probelmatic始終包括dll文件,並設置CopyLocal爲False參考性質。但是隨着依賴關係的變化,這是脆弱的。

我在想這個錯嗎?我應該爲每個插件dll構建一個單獨的xap(在這種情況下,爲所有引用設置CopyLocal爲false似乎有效)?

回答

1

除了通過選擇在您的項目設置選項(source)「通過使用應用程序庫緩存減少XAP大小」,你需要在同一個位置上的extmap.xml文件作爲您的Silverlight項目設置應用程序庫緩存你的共享DLL。

因此,如果你的DLL是Microsoft.Expression.Effects.dll那麼你需要創建(或複製)Microsoft.Expression.Effects.extmap.xml

它看起來像這樣:

<?xml version="1.0"?> 
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <assembly> 
    <name>Microsoft.Expression.Effects</name> 
    <version>2.0.20525.0</version> 
    <publickeytoken>31bf3856ad364e35</publickeytoken> 
    <relpath>Microsoft.Expression.Effects.dll</relpath> 
    <extension downloadUri="Microsoft.Expression.Effects.zip" /> 
    </assembly> 
</manifest> 

版本號應該匹配的dll的版本號。

如果您沒有公共密鑰令牌,則可以用null替換它。

這將複製DLL到一個單獨的zip文件,然後可以由幾個xap文件共享或只下載一次,如果它在xap文件更改時不會更改。