2

ClickOnce で System.Addins API を使用することによる煩わしいビルド プロセスがあります。System.Addins を使用するには特定のディレクトリ構造が必要であり、メイン プロジェクトはアダプター、ビュー、およびコントラクトを直接参照しないため、ClickOnce アーキテクチャではうまく機能しません。

ビルド プロセスの面倒な部分は、ポスト ビルド イベントを介して、アドイン コンポーネントの .dll をメイン アプリ プロジェクトのディレクトリにコピーし、それらのファイルをメイン プロジェクトから手動で参照する必要があることです。それらが含まれます。第一に、正しくビルドするにはビルドを 2 回繰り返す必要があります。第二に、ソース管理に干渉します (コピーしたアドイン dll ファイルをソース管理から除外する必要があります。そうしないと、それらに加えられた変更にはチェックアウトが必要になります)。

それで、私の質問は、このハックを回避する方法はありますか? よりエレガントなもの?

4

5 に答える 5

3

あなたの質問に完全に答えることはできませんが、VisualStudioを介してClickOnceデプロイメントを作成しているようです。そのメソッドを捨てて、代わりにMageUIを使用します。これは、アプリケーションとデプロイメントのマニフェストファイルを生成するフレームワークSDKにあるスタンドアロンの実行可能ファイルです。GUIバージョン(mageui.exe)とコマンドラインバージョン(mage.exe)が付属しています。

Mageはビルド後のイベントを削除しない場合がありますが、ファイルを参照してClickOnceを表示する必要はありません。

于 2008-12-30T14:34:59.657 に答える
0

ご意見ありがとうございます。現在、おっしゃるようにやっています。プロジェクトにフォルダを作成し、必要なdllを含めます。それは機能しますが、それは醜い解決策であり、ソース管理に干渉します。

ClickOnceの制限を認識しており、それを回避する方法があるのではないかと期待していました。たとえば、デプロイメントプロジェクトを使用して、特定の構造に必要な適切な依存関係を作成できることをどこかで読みました。それに関する問題は、一度公開されると、それらの依存関係を更新する簡単な方法(ClickOnce内)がないことです。

于 2008-12-12T23:07:47.707 に答える
0

私が使用する解決策は、すべてのプロジェクトに対して 1 つの出力フォルダーを用意することです。すべてのプロジェクトは、独自のファイルを正しいサブフォルダーに配置します。アプリケーション ブートストラップ プロジェクトは、自分の dll も出力 (ルート) フォルダーに配置します。次に、ブートストラッパーのクリックワンを作成すると、出力フォルダーからすべてのコンテンツが取得されます。

最も難しい部分は、実際にすべての dll を適切な場所に配置することです (すべての dll を 1 回だけ配置します)。

于 2009-10-27T10:32:47.943 に答える
0

この問題は、パイプライン アセンブリをコンテンツとしてメイン ソリューション構造に追加することで解決しました。

これを行うには、出力フォルダーを (/bin/debug /bin/Release) から別のフォルダーに変更します。私は ../lib を使用しました。そうしないと、ビジュアル スタジオがこのファイルを参照できないというエラーが発生します。

メイン ソリューションにパイプライン フォルダーを作成する

  • \AddInSideAdapters
  • \AddInViews
  • \契約
  • \HostSideAdapters

各フォルダーを右クリックし、[既存のアイテムを追加] をクリックしてすべてのファイルを表示し、../lib (または出力セットがある場所) を参照して、追加ボタンをプルダウンします (下矢印をクリックします)。 [リンクとして追加] をクリックします。

各ファイルを右クリックし、コンテンツに設定します。

これにより、アセンブリを指す更新ファイルが作成され、clickonce マニフェストに含まれます。

于 2010-05-27T17:35:16.967 に答える
-1

ClickOnce では、必要な場所にソフトウェアをインストールできません。ドキュメントと設定にバイナリと dll がインストールされます。プロジェクトのプロパティで [発行] タブに移動し、[アプリケーション ファイル] を選択して、含める追加ファイルを選択できます。System.Addings がアセンブリに関連する特定のフォルダーに dll を必要とする場合は、プロジェクト内にフォルダーを作成し、ここから dll を含めることができます。これはうまくいくかもしれません。そうでない場合、「ハック」またはその他の解決策はありません。clickonce は優れていますが、いくつかの機能が制限されています。

于 2008-12-12T22:06:19.330 に答える