3

MSBuildを実行すると、を使用してコマンドラインで渡されたものはすべて、メインスクリプトから(タスク/p:MyProp=valueを介して)呼び出されたすべてのMSBuildスクリプトからアクセスできます。MSBuildタスク内のすべてのスクリプトから同様にアクセスできるプロパティを定義するにはどうすればよいですか?

例えば:

Script1.proj:
[...]
<Target Name="Test">
  <MSBuild Projects="Script2.proj"/>
  <Message Text="Script1, GlobalProp1=$(GlobalProp1)"/>
  <Message Text="Script1, GlobalProp2=$(GlobalProp2)"/>
</Target>

Script2.proj:
[...]
<Target Name="Test">
  <!-- ??? Set GlobalProp2 = VALUE2 ??? -->
  <Message Text="Script2, GlobalProp1=$(GlobalProp1)"/>
  <Message Text="Script2, GlobalProp2=$(GlobalProp2)"/>
</Target>

このように実行するとmsbuild Script1.proj /p:GlobalProp1=VALUE1、上記のスクリプトは次の出力を生成します。

Script2, GlobalProp1=VALUE1
Script2, GlobalProp2=
Script1, GlobalProp1=VALUE1
Script1, GlobalProp2=

Script2.projでGlobalProp2を設定して、次の出力を生成したいと思います。

Script2, GlobalProp1=VALUE1
Script2, GlobalProp2=VALUE2
Script1, GlobalProp1=VALUE1
Script1, GlobalProp2=VALUE2

これは可能ですか?もしそうなら、どのように?

環境変数を使用する提案を見てきましたが、それが役立つ唯一の状況は、変数がスクリプトに設定され、スクリプトがExecタスクを使用して呼び出された場合です(そうでない場合、env.variableの変更は無効)。

4

2 に答える 2

6

MSBuildタスクを使用しているため、Properties属性を使用して目的のプロパティを呼び出しに渡す必要があるため、例をに変更する必要があります。

<Target Name="Test">  
    <MSBuild Projects="Script2.proj" 
        Properties="GlobalProp1=$(GlobalProp1);GlobalProp2=$(GlobalProp2)"
    />  
    <Message Text="Script1, GlobalProp1=$(GlobalProp1)"/>  
    <Message Text="Script1, GlobalProp2=$(GlobalProp2)"/>
</Target>

プロパティは明示的に渡す必要があります。これは仕様によるものです。

より緊密な統合が必要な場合は、MSBuildタスクを使用する代わりに、1つの論理スクリプトを作成するファイルをインポートする必要があります。

于 2009-12-25T03:04:48.913 に答える
5

rspファイルを使用してグローバルプロパティを定義できます。これらのプロパティは、子プロジェクトに表示されます。

于 2012-11-07T08:01:12.417 に答える