2009-06-05 7 views
3

Angenommen, ich habe zwei Projektdateien "Parent.proj" und "Child.proj". Wenn ich eine Immobilie in Parent.proj MyProp genannt erklären kann ich das Child.proj mit dem folgenden Code übergeben:MSBuild extrahieren Eigenschaften von einem Projekt zum anderen

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

Das ist in Ordnung, aber ich möchte wissen, ob es einen Weg gibt, der Referenzierung MyProp innerhalb Child .proj ohne Child.proj wird von Parent.proj aufgerufen.

Ich weiß, ich kann die gleiche Eigenschaft in Child.proj deklarieren und dies wird überschrieben, wenn Child.proj von Parent.proj aufgerufen wird, aber ich möchte vermeiden, einen Eigenschaftswert zu wiederholen.

Antwort

8

Wenn Sie Ihre Eigenschaften in einer externen Projektdatei definieren, kann jedes der Projekte die Eigenschafteneinstellungen importieren.

Hier ist eine sehr einfache Eigenschaften Dateien namens orders.properties, an denen ich gerade arbeite.

<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> 

In meinem Haupt-Build-Projekt importieren ich die Auftragseigenschaften in der orders.build.proj-Datei und alle Teilprojekte, die sie benötigen.

Hier ist der erste Abschnitt der Haupt-Build-Datei.

<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"/> 

Hoffe das beantwortet Ihre Frage.

Mit freundlichen Grüßen Noel

+0

+1 Brilliant! Das ist eine gute Idee, die Eigenschaften in eine separate Datei zu setzen, um eine Zwei-Wege-Abhängigkeit zu verhindern. Danke vielmals! –

+0

Gibt es auch eine Möglichkeit, Tasks aufzurufen, die diese globalen Eigenschaften festlegen können, z. Erstellen Sie die Eigenschaft namens buildDate und setzen Sie dann buildDate mit

+0

Sie können jederzeit einen Zeitstempel in eine Eigenschaft innerhalb eines Build-Ziels über Eigenschaftsfunktionen einfügen. Im PropertyGroup-Abschnitt eines Ziels beispielsweise wurde $ (DateTime.Now) festgelegt. Siehe http://msdn.microsoft.com/en-us/library/dd633440.aspx. – d3r3kk

Verwandte Themen