2009-06-05 17 views
3

「Parent.proj」と「Child.proj」の2つのプロジェクトファイルがあります。私はMyPropと呼ばParent.projでプロパティを宣言した場合、私は次のコードでChild.projにこれを渡すことができます。MSBuildはあるプロジェクトから別のプロジェクトにプロパティを抽出します

<MSBuild Projects="Child.proj" Targets="dostuff" Properties="MyProp=MyValue" /> 

これは結構ですが、私は子供の中MyPropを参照する方法があるかどうかを知りたいです.projをChild.projがParent.projによって呼び出されることなく。

私はChild.projで同じプロパティを宣言できますが、これはChild.projがParent.projによって呼び出されたときにオーバーライドされますが、プロパティ値を繰り返さないようにしたいと思います。

答えて

8

外部プロジェクトファイルでプロパティを定義した場合、各プロジェクトはプロパティ設定をインポートできます。

私が現在取り組んでいるorders.propertiesという非常に単純なプロパティファイルがあります。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- always include the root properties --> 
    <Import Project="$(root)\root.properties.proj"/> 
    <PropertyGroup> 

    <!-- Version numbers/names for this branch --> 
    <orders_ver_major>99</orders_ver_major> 
    <orders_ver_minor>0</orders_ver_minor> 
    <orders_ver_release>0</orders_ver_release> 
    <orders_ver>$(orders_ver_major).$(orders_ver_minor).$(orders_ver_release)</orders_ver> 
    <orders_ver_db>$(orders_ver_major)_$(orders_ver_minor)_$(orders_ver_release)</orders_ver_db> 

    <!-- setup folders specific to the orders project --> 
    <orders_database>$(orders_root)\btq.orders.database</orders_database> 

    <!-- 
     Setup order database default properties, can be overriden if passed in when called from 
     the command line or from other build scripts. 
    --> 
     <orders_force_create Condition="'$(orders_force_create)' == ''">false</orders_force_create> 
    <orders_db_server   Condition="'$(orders_db_server)' == ''" >.\sqlexpress</orders_db_server> 
    <orders_db_username  Condition="'$(orders_db_username)' == ''" >yyyyyyyy</orders_db_username> 
    <orders_db_password  Condition="'$(orders_db_password)' == ''" >xxxxxx</orders_db_password> 
    <orders_db_name    Condition="'$(orders_db_name)' == ''"  >$(COMPUTERNAME)_btq_orders_v$(orders_ver_db)</orders_db_name> 
    </PropertyGroup> 
</Project> 

私のメインビルドプロジェクトでは、注文プロパティをorders.build.projファイルとそれを必要とするサブプロジェクトにインポートします。

ここに、メインビルドファイルの最初のセクションがあります。

<Project DefaultTargets="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- 
    Always setup the path to the root and also the orders root folder. 
    We then include the orders properties, which includes the root properties 
    For this project the orders folder is in the same folder as this build file 
    so can just reference the ms build project directory property as the orders_root. 
    --> 
    <PropertyGroup> 
    <root>$(MSBuildProjectDirectory)\..\..</root> 
    <orders_root>$(MSBuildProjectDirectory)</orders_root> 
    </PropertyGroup> 

    <!-- 
     Once we have the roots configured we can now include all the standard properties, 
     this also includes the root.properties also. 
    --> 
    <Import Project="$(orders_root)\orders.properties.proj"/> 

これはあなたの質問にお答えします。

いいえ ノエル

+0

+1ブリリアント!これは、双方向の依存関係を避けるためにプロパティを別のファイルに置くことをお勧めします。どうもありがとう! –

+0

これらのグローバルプロパティを設定できるタスクを呼び出す方法はありますか? buildDateという名前のプロパティを作成し、次にbuildDateを

+0

プロパティ・ファンクションを使用して、ビルド・ターゲット内の任意のプロパティにタイムスタンプを入れることができます。たとえば、TargetのPropertyGroupセクションに $(DateTime.Now)と設定します。 http://msdn.microsoft.com/en-us/library/dd633440.aspxを参照してください。 – d3r3kk

関連する問題