2012-04-04 24 views
6

実行可能なプロジェクトが1つあります。具体的にはAとしましょう。Bを実行中に起動します。 Aの現在の作業フォルダにB.exeを入れるために、Aの参照としてBを追加して、コンパイル後にB.exeAのフォルダにコピーされるようにします。しかし、Bの設定がAのフォルダにコピーまたは生成されていないことがわかりました(AのフォルダにはB.exe.configファイルがありません。B.exeのみ)ので、Bのようなものはトレースされません正しく設定されています。App.config情報を.NETの参照実行ファイルに含めるにはどうすればよいですか?

もちろん、B.exe.configを手動でAのフォルダにコピーすることはできますが、それを行うための自動方法がいくつかあります。誰も私を助けることができますか?

+0

A.exeはどのようにB.exeを起動しますか?コードで使用しない場合は、参照を作成しないでください。それを正しいフォルダにコピーするポストビルドスクリプト(または何か)を作成します。一般に、appdomainごとに1つの.configファイルしかないので、参照されたときにBの構成がA.exe.configにある必要があります(これは自動プロセスではありません)。 – albertjan

+0

@the_ajpあなたの返事をありがとう。私は実際には2つの理由からB.exeを起動しています.1)A.exeは64ビットのアプリケーションで、B.exeは32ビットなので、A.exeはBをアプリケーションドメインにロードできません。 2)A.exeが存在するたびにB.exeを強制終了します。だから、ポストビルドスクリプトがベストプラクティスだと思いますか? – tete

答えて

-1

アプリケーションディレクトリに2つのapp.configsを持つことはできません。
Visual Studioは、デフォルトで起動プロジェクトのapp.configを使用します。
app.configをコピーするポストビルドイベントトリガーを作成することができますが、これは元のapp.config(必要なデータが含まれていると思われます)を置き換えます。

クリーンなdll +プロジェクトアーキテクチャを作成する以外にも、プロジェクトAのすべての構成データをプロジェクトBの構成データに手動でマージすることをお勧めします。

+0

b.exeのapp.configはa.exe.configではなくb.exe.configと呼ばれるので、app.configは上書きされません。あなたは基本的に私のコメントをコピーしました:(私はまだb.exeの使い方がわからないので、私は答えとして投稿しませんでした) – albertjan

+0

私が提出する前にページをリフレッシュしませんでしたが、私は2つのapp.configsをマージして問題を解決すると感じたので答えとして投稿しました。 – Kristof

+0

申し訳ありません:) hehe。ポストビルドのイベントは、そうでないときに行われます。 – albertjan

5

あなたはB.exe.configへのリンク参照を追加し、プロジェクトAではビルド後のイベント、または...

を使用することができます。既存の項目をプロジェクトに追加することでこれを行います。しかし、ファイルダイアログの[追加]ボタンを押す前に、[追加]ボタンの右にある下矢印を押して、[リンクとして追加]を選択します。次に、出力ディレクトリにコピーするファイルを設定します。 ProjectA.csprojから

:プロジェクトファイルでは、次のようになります

​​

あなたのプロジェクトファイルを編集して、手動で気にしない場合は、インクルードされるファイルは、ビルド構成に依存することができます。 (プロジェクトツリー内のアイコンをダブルクリックしたときにVS2013がファイルを開くことができませんけれども。)を構築

<None Include="..\ProjectB\bin\$(Configuration)\B.exe.config"> 
    <Link>B.exe.config</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 
+0

このアプローチがTeam Foundation Build Serverで動作しない理由を知りましたか? – pquest

+0

@pquest私はそうではありませんが、別のデータポイントがあります。私はVS 2015とVisualStudio.comのアカウントを使ってTFS 2015を使ってテストしました。ログには、「ProjectB \ bin \ Release \ ProjectB.exe.configからProjectA \ bin \ Release \ ProjectB.exe.configにファイルをコピーしてから、後で「ProjectA \ bin \ Release \ ProjectB.exeからコピーする」 .configファイルをドロップフォルダに追加しました。設定ファイルへのリンクに$(Configuration)変数を使用しました。 – Wally

5

のための次の作品ははるかに簡単な解決策は単純にcsprojファイルに以下のものを含むことであろう。これには、参照ファイルの対応するファイル拡張子が含まれます。

<PropertyGroup> 
    <AllowedReferenceRelatedFileExtensions> 
     .pdb; 
     .xml; 
     .exe.config; 
     .dll.config 
    </AllowedReferenceRelatedFileExtensions> 
    </PropertyGroup> 
+0

AllowedReferenceRelatedFileExtensionsが認識されません – Loaderon

関連する問題