0

を使用してWindows.Formsパッケージ化されたクライアントがあります。MSIVisual Studio Deployment Project

app.configにはいくつかの構成プロパティがあり、その値は、クライアントをデプロイする環境に応じて正しいものに置き換える必要があります。

たとえば、私のクライアントはWCFファサードの背後にある一連のCOM +サービスに接続しているためURL、構成ファイルには環境(開発、統合など)によって異なるいくつかのがあります。

このようにして、次のようなアプリケーション構成行を見つけることができます。

<add ServiceName="MyService" ServiceEndpoint="$(WS_URL)/MyService.svc" MaxMessageSize="xxxxxx"></add>

バッチファイル(.bat)を実行していくつかの変数をロードしてから、の変数を置き換えるapp.config必要がありますが、にパッケージ化されているアプリケーション構成ファイルで置換を行う必要があり、MSI実行しないでください。クライアントプロジェクトにある「元の」構成ファイルの置換。

実際、私が必要とするのは、VSがパッケージ化しようとしているアプリケーション構成ファイルのパスを取得し、ファイルパスをスクリプトに渡して置換を実行することだけです。

注:上記のサンプル行では、 $(WS_URL)は変数であり、デプロイメント環境の構成に応じて正しい値に置き換える必要があります。

4

2 に答える 2

1

ソース管理でApp.Configのコピーを2つ作成し、1つをF5ビルド/開発デバッグ用のプロジェクトに関連付け、もう1つを本番環境で使用するためにインストーラーによって使用されます。

于 2012-08-31T13:28:07.667 に答える
0

最後に、私たちのニーズに合ったソリューションがあります。私が必要としていたのは、主にWindows.Formsクライアント用の一意の構成ファイルを1つだけ用意し、ファイルがMSIにパッケージ化される直前にその中のいくつかのプロパティ値を置き換えることができるようにすることでした。

MSI内にパッケージ化されているバイナリは、プロジェクトの出力ディレクトリから取得されたと思いましたが、そうではないため、その場所を使用して「変数置換」スクリプトを実行し、最終App.configファイルを準備することができませんでした。パッケージ化されます。

.batWindows.Forms、Web-Applications、COM + Serviced Componentsに適用する構成プロパティを一元化する、環境構成の種類ごとに1つのファイルがあるので、クライアントの構成ファイルを複製するというアイデアにうんざりしていました。 、私の目的は、構成ファイルの数を減らし、ビルド環境の作成/保守のプロセスを簡単に保ちながら、間違いを犯すリスクを減らすことでもあるためです。

MSIがパッケージ化される直前に、ファイルがどこにあるかなど、一時フォルダーのパスを取得する方法を教えてくれるドキュメントが見つかりませんでした。アクセスできる場合は、そのディレクトリを指す「変数置換」スクリプトを実行し、問題を解決しました。

私の回避策は、カスタマイズされたビルド前イベントを配置して、「テンプレート」App.configをプロジェクトディレクトリにコピーし、そこに配置されたら、スクリプトを実行してプロパティ値を置き換えることでした。

これで、デプロイメントプロジェクトがビルドされるたびに、有効な構成ファイルが含まれていることを確認できます。

参考までに、ビルド前のイベントは次のようになります。

XCOPY /Y $(ProjectDir)config\*.* $(ProjectDir)
CALL ..\ScriptsCentral\do_apply_config.bat $(ProjectDir)App.config etc
EXIT 0

注:EXIT 0すべてのプロジェクトをでビルドし、ビルドイベントを実行する部分でビルドプロセスを停止したため、明示的msbuilddevenv.com配置する必要がありました。

(時間とコメントをありがとう@ChristopherPainter。提案を+1してください)

于 2012-09-14T18:08:34.493 に答える