2009-09-24 108 views
23

私はmanaging configuration with PreBuild EventsのScott Hanselmanのブログ記事をたどり、うまく働いています。Visual Studioで複数のビルド前のイベント?

私は構成をいくつかの異なるファイルに分割したいので、ビルドの前に再度コマンドを実行する必要があります。問題はPreBuildイベントのテキストがすべて1つのコンソールコマンドとして実行されることです。どうやっていくつかのコマンドとして分割できますか?

答えて

39

はスコットの例では、callコマンドが含まれていないという問題点が判明batch1.batとbatch2.batの両方を実行しますラインの始めに。異なるパラメータで.batファイルを複数回実行しない限り、これは問題ありません。

この:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config" 
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config" 

は私のためにうまく働きました。

+1

VS2008では、複数のCMDファイルを別々の行に入れても機能しませんでした。 VSはビルド時に最初のスクリプトのみを呼び出しました。私は各行の前にCALLを追加し、それがすべて働いた。 –

+0

なぜこれらの 'call'コマンドを聞くのですか? [ここ](https://msdn.microsoft.com/en-us/library/ms165412.aspx)を参照してください。 – Pascal

0

コマンドを別々の行に置くことができます。次に、各コマンドが順番に実行されます。または、次のように同じことを行うには「詐欺師」の方法は次のとおりです。

  • 2つの成分のバッチファイルを実行し、親バッチを作成し、新しい機能の所望の部分を実行する第二のバッチファイルを作成し、ビルド前のイベントで新しいバッチを実行してください。たとえば:batch1.batはbatch2.batは、ファイル2を変更し、ファイル1を変更し、その後、batch3.batは
+1

これらは別々の行にありますが、1つとして実行されているようです。私はバットファイルのアプローチを考えているが、解決策ではなく回避策のように思える。 – Kirschstein

+0

奇妙な。私はセミコロンをセパレータとして追加するなど、他の提案もしていますが、わたしはストローを掴んでいます。ごめんなさい! – MBillock

5

Windows 7の64ビット版Visual Studio 2010を使用しています。

私は自分の好みに合わせて良いでしょう解決策を見つけた、私は、例えば、&& ^と一緒にコマンドを連鎖ので、同じように私.vcxprojのxmlファイルを編集しています:

<PreBuildEvent> 
     <Command>echo "hello 1" &amp;&amp;^
echo "hello 2" &amp;&amp;^
echo "hello 3"</Command> 
     <Message>Performaing pre-build actions ...</Message> 
    </PreBuildEvent> 

私は一緒に3つのコマンドを連鎖してきました。 '& &'は、前のコマンドのエラーが発生した場合にシェルが実行を停止するように指示します。

注:.xmlファイルでは、は、直接&&を使用できないため、'& amp; & amp; '代わりにを使用する必要があります。また、^文字の使用に注意してください。これは、cmdシェルの行継続文字(BASHの\ charなど)です。

各新しいコマンドは、行の先頭から開始する必要があります。この方法を使用すると、1つのコマンドを多数のチェーンにまとめることができますが、いずれかが失敗した場合、チェーンの残りの部分は実行されません。

は、ここに私の実際のユースケースは、私は別のサブプロジェクトのディレクトリに私のプリコンパイルされたヘッダのデバッグファイルをコピーして、その後、Pythonスクリプトで、いくつかの環境チェックを実行しています:

<PreBuildEvent> 
     <Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp;^
copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command> 
     <Message>Performaing pre-build actions ...</Message> 
    </PreBuildEvent> 

> nul使い方

:それはサブプロジェクト間でプリコンパイルされたヘッダを共有する 0 file(s) copied.

リファレンスがここにあると言うとき、私のチームメイトがびびる取得することはできませんので、コピーコマンドは、ビルドウィンドウに現れて任意の出力を防止します3210

Sharing precompiled headers between projects in Visual Studio

関連する問題