2011-05-12 26 views
3

の範囲は、私は、ターゲットのビルドのMSBuildタスクとプロパティ

<Target Name="Build"> 
    <Message Text="Version : $(FullVersionNr)" /> 
    <MSBuild Projects="@(WebProj)" Properties="WebProjectOutputDir=$(SitePublishPath);OutDir=$(SitePublishPath1);Configuration=$(Configuration)" />  
<Message Text="Version : $(FullVersionNr)" /> 

と1つのビルドプロジェクトを持っていると、ビルド時に私は、正確なアセンブリ番号に$(FullVersionNr)を設定し、それが最後にこのNRはありません

私も、別のファイルに$(FullVersionNr)小道具

<Import Project="Common.proj"/> 

を宣言し、それはグラムではありません外出する。

それは親から子プロジェクトへの一方向のみの通信がだ、と私はこのMSDNの記事は、あなたにこの達成するためにどのようにいくつかのアイデアを与えるべきである

答えて

1

双方向になりたい:MSBuild Propertiesを。具体的には、このブログ投稿は範囲の質問に答えてください:Scope of properties and item in an MSBuild script。最後の要約を必ず読んでください。

複数のプロジェクトにまたがってバッチ処理を行う場合、2回目に$(FullVersionNr)にアクセスしたときにローカルコンテキストがグローバルコンテキストにマージされていない可能性があります。子プロジェクト、最初のビルドは更新されますが、2番目のビルドは更新されません)。

解決方法の1つは、MSDNの記事に記載されているレジストリプロパティを使用し、その値が更新されたときにプロパティを書き込むことです。

+0

第2のリンクと結論について - 「ターゲットの実行が終了すると、ローカルコンテキストの更新された値がグローバルコンテキストにマージされます。 - 私の場合それは**グローバルなコンテキストにマージされません** –

+0

@Krzy、 '@(WebProj) 'リストに複数のプロジェクトがありますか?もしそうなら、 '$(FullVersionNr)'をそれぞれ一意かつ予測可能なものに設定し、ビルドを再実行し、最後に値が何であるかを見てください。依然として元の値と同じであれば、いずれのコンテキストもマージされていない。異なる場合は、変更したプロジェクトを追跡できます。 – slugster

+0

これは1つのWebプロジェクトであり、残りのプロジェクトは依存プロジェクトとして構築されています。それらのすべてが同じバージョン番号を設定し、最後にこの値は最初のプロジェクトに返されません。

関連する問題