2017-04-11 14 views
0

プリズム付きのWPFプロジェクトがあります。基本的にサブフォルダ(PrismModules)に格納されているモジュールを動的にロードしています。ClickonceでプロジェクトのDLLの宛先としてサブフォルダを指定する方法はありますか?

アプリケーションは正常に動作しますが、ClickOnceで展開しようとすると、出力パス構造が無視され、 "PrismModules"サブフォルダの代わりにすべてがルートフォルダに格納されます。その後、アプリケーションはそれらのモジュールをロードしません。

これはClickOnceの展開の制限ですか?

Solution 
- WpfClient 
- PrismModules 
    - Module A 
    - Module B 
    - Module C 

彼らはすべて同じルートディレクトリに組み込まれている、モジュールA/B /:

EDITは

少しにより多くの情報を与えるために、ここでどのように解決策を構造化されていますCはサブフォルダPrismModulesにあります。

WpfClientはいずれのモジュールも参照していないため、実行時にPrismModulesというフォルダをスキャンし、実装が含まれているすべてのDllをロードします(IModule)。私が気づいた何

参照されているいくつかのDLLは、(私たちが何かを設定することはできません(とないPrismModulesフォルダ内の)ルートに入れ、そして唯一の動的にロードされているものも存在していないされていますClickOnceのメニューでそれら。サブフォルダPrismModulesを作成し、それがあなたのモジュールのDLLへのをリンクとして追加(ClickOnceので展開されている)あなたの主なプロジェクトで

答えて

0

すること。コンテンツへの「ビルドアクション」を設定し、「出力ディレクトリにコピーします。 」を「常にコピー」に変更します。

Crea WpfClientのサブフォルダPrismModulesにリンクを追加します。出力場所からDLLを取得します(ModuleAの出力先は何でも構いません)

追加のチェック:Deploy/Application Filesの下に追加されたこれらのdllには、「データファイル"通常はVSがそれを正しく行います。

ソリューションのビルドオーダーを正しく設定してください。WpfClientは、古いdllで新しいバージョンのアプリケーションを展開できないように、モジュールXに依存する必要があります。

ステップバイステップ:

は(リリースの)すべてのプロジェクトをビルドします。

WpfClientの上に立って右クリックして[新しいフォルダを追加]を選択し、名前をPrismModulesにします。

新しく作成されたPrismModuleの上に立つと、右クリックして "Add Existing Item"を選択します。どこにビルドしたモジュールdllに移動します。 "Add"の代わりに "Add As Link"を押してください( "Add"の右にある三角形に注意してください)。

+0

私のdllはこのディレクトリに作成されたばかりのプロジェクトです – J4N

+0

プロジェクトの構造を理解していません。説明できますか? – dvorn

+0

私が理解していないこと:私のDLLを更新すると、それらを再度コピーしなければならないということですか?それはデバッグで動作しますか? – J4N

関連する問題