2

セカンダリ xap ファイルからいくつかのプラグインを動的にロードするために、Silverlight で MEF を使用しています。このセカンダリ XAP ファイルは、さまざまなプラグイン プロジェクトを参照するプロジェクトからビルドされます。これらはすべて、プライマリ XAP ファイルに既に存在する dll に対してビルドされます。

そのため、どの dll がこのセカンダリ xap で終了するかを明確に制御したいと考えています。メインの xap ファイルから dll を含めることは冗長です (また、MEF の再構成で問題が発生します)。しかし、Visual Studio は、プラグイン プロジェクトへの参照に対して CopyLocal プロパティが True にのみ設定されている場合でも、さまざまな依存 dll を含めることを主張しているようです。

これまでのところ、セカンダリ xap をビルドする最上位プロジェクトに問題のある常に含まれる dll への明示的な参照を追加し、参照プロパティで CopyLocal を False に設定することだけが機能することがわかっています。しかし、依存関係が変化するにつれて、これは脆弱です。

私はこれについて間違って考えていますか?プラグイン dll ごとに個別の xap を構築する必要がありますか (その場合、すべての参照に対して CopyLocal を false に設定すると機能するようです)。

4

2 に答える 2

1

プロジェクト設定 ( source )で [アプリケーション ライブラリ キャッシュを使用して XAP サイズを削減する] オプションを選択して、Silverlight プロジェクトでアプリケーション ライブラリ キャッシュを設定するだけでなく、共有 dll と同じ場所にファイルを配置する必要があります。extmap.xml

したがって、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 ファイルの変更時に変更されない場合は 1 回だけダウンロードしたりできます。

于 2011-02-10T14:22:25.960 に答える
0

ここを見てください: http://msdn.microsoft.com/en-us/library/dd833069(VS.95).aspx

具体的には、「アプリケーション ライブラリ キャッシュで使用するアセンブリを構成するには」というタイトルのセクションを参照してください。それは、あなたが探しているものに少なくともかなり近い何かをするための方法を説明しています.

于 2011-02-10T14:17:09.597 に答える