2014-06-11 3 views
9

Ich stecke in einer Situation fest, in der ich ein MSBuild-Skript habe, das die bedingten Kompilierungssymbole lesen muss, die in der Build-Eigenschaft des Projekts festgelegt sind. Ich habe den folgenden Code in meiner MSBuild SkriptdateiWie Sie bedingte Kompilierungssymbole in Projekteigenschaften mit MSBuild anhängen?

<PropertyGroup> 
    <DefineConstants>$(DefineConstants);INTER</DefineConstants> 
    </PropertyGroup> 


    <Target Name="Compile"> 
    <Message Text="$(DefineConstants)"/> 
    <MSBuild Projects="CustomAssemblyInfo.csproj" Targets="Rebuild" Properties="DefineConstants=$(DefineConstants)" /> 
    </Target> 

ich davon aus, dass der $ (DefineConstants); enthält den Wert von bedingten Kompilierungssymbolen, die gesetzt sind, und ich kann einfach nichts nach diesen Werten anhängen, wie in diesem Fall INTER, aber irgendwie werden die Werte, die in den Projekteigenschaften eingestellt sind, hier nicht übergeben. Kann mir bitte jemand helfen, was fehlt mir?

+0

nicht sicher, aber vielleicht wäre es eine gute Idee, auch uns zu sagen, * wie * Sie einstellen, dass die Immobilie in die Projekteigenschaften ...? – stakx

+0

Ich übergebe sie auf folgende Weise http://tinypic.com/r/1qgzle/8 –

+0

Wenn ich versuche, den Wert in $ (DefineConstants) mit der Nachricht Task wie Es zeigt nur; INTER, was bedeutet, dass nichts in $ übergeben wird (DefineConstants). –

Antwort

14

Eigenschaften über Properties Eigenschaft MSBuild Aufgabe bestanden sind, was globale Eigenschaften genannt, die gleichen wie bei /p: auf der Kommandozeile übergeben. Sie haben Vorrang vor jeder anderen Eigenschaft oder Umgebungsvariablen, selbst wenn diese bedingungslos, d. H. Die DefineConstants in Ihrer .csproj definiert ist.

Durch Ihre eigenen DefineConstants ersten Passieren Sie verhindern, dass es von der .csproj später eingestellt werden, so dass es so etwas wie $(Constants) in Ihrem Projekteigenschaften-Fenster hinzufügen, um zu verhindern, die DefineConstants als <DefineConstants>TRACE;DEBUG;$(Constants)</DefineConstants> und stattdessen Constants von Ihrem MSBuild/NAnt Skript übergeben neu definieren würde.

Edit: Wie pro @ sǝɯɐs Kommentar unten

https://i.imgur.com/jZiVy7J.png

enter image description here

+0

Danke llya, aber ich frage mich, warum kann ich nicht einfach die Werte aus den Projekteigenschaften in Msbuild-Dateien gelesen? –

+0

In meinem Fall möchte ich nur lesen, was überhaupt übergeben wird und dann einfach einige weitere Konstanten in Msbuild anhängen. Bitte beachten Sie auch, dass ich eine separate XML-Datei für MSBuild habe, ich benutze nicht die Änderung der csproj selbst. –

+0

@AfrazAli Sie können es nicht lesen, weil Sie von benutzerdefinierten Skript zu Projektdatei gehen und nicht anders herum, es sind einfach noch nicht geladen und ausgewertet. Sie können versuchen, es selbst als Text, als XML oder mit Microsoft.Build.Evaluation zu lesen und zu analysieren, andernfalls müssen Sie zu Projekteigenschaften gehen und ein $ (Placeholder) in 'bedingte Kompilierungssymbole' unter der Registerkarte Erstellen hinzufügen, die Sie dann steuern können von Ihrem MSBuild-, NAnt- oder .bat-Skript. –

Verwandte Themen