Ich bin möglicherweise nur blind, aber gibt es eine Befehlszeile, um bedingte Kompilierungssymbole in MSBUILD anzugeben?
Ich habe derzeit diese Zeile in meinem Buildscript:
SET MSBUILD=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
SET CONFIG=Debug
%MSBUILD% /p:Configuration=%CONFIG% /p:OutputPath=..\..\output source\MyProject\MyProject.csproj
Und ich möchte eine Bedingung hinzufügen. In Visual Studio kann ich einfach in Projekteigenschaften => Erstellen => Bedingte Kompilierungssymbole gehen, aber ich habe diese Option für msbuild nicht gesehen?
Bonus Karma, wenn Sie wissen, ob ich alle bereits in den .csproj-Dateien angegebenen Symbole vollständig überschreiben kann, um sicherzustellen, dass nur die Bedingungen aus meinem Buildscript eingehen.
.net
msbuild
compiler-options
Michael Stum
quelle
quelle
Antworten:
Kennen Sie schon das ? (Die meisten Informationen finden Sie im vorletzten Beitrag)
quelle
MSBUILD: error MSBUILD0005: Invalid syntax. Property name and value expected as <prop name>=[<prop value>]
.csproj
Datei besser eine Eigenschaft hinzu :<DefineConstants>$(DefineConstants);FOO;BAR</DefineConstants>
.Ich musste in diesem Beitrag von Björn Lasar ein Leerzeichen anstelle eines Semikolons verwenden: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx
Update: Der Blog ist verschwunden; über das Internetarchiv abgerufen :
quelle
== "True"
- nicht sicher, was Sie mit dem goto-Exit in msbuild meinen - das Äquivalent wäre, einenCondition
auf den<Task
und / oder auf den Aufgabenaufruf zu setzen, z. B.<Exec Condtion="$(SignAssembly)=='True' ...
/p:DefineConstants
ist ein Alles-oder-Nichts-Geschäft.Wenn Sie nur das Trace-Symbol deaktivieren möchten, können Sie dies nicht einfach tun mit:
msbuild /p:DefineTrace=false
Sie müssen etwas definieren, um alle bereits definierten Symbole zu überschreiben:
msbuild /p:DefineConstants="RANDOM-SYMBOL"
Danke Michael Stum weist auf diese versteckte Regel hin Ich habe auch einen Blog darüber geschrieben --- toter Link
quelle
Was in den Antworten gesagt wird, gilt sowohl für
C#
Code als auch für ASP.NET-C # -Code "codebehind". Wenn Sie in ASP.NET-Webprojekten auch eine bedingte Kompilierung auf den ASPX-Seiten durchführen möchten, funktioniert das bedingte Rendern von HTML auf der Seite etwas anders (Hinweis, den ich entfernt habe,MasterPageFile="..." AutoEventWireup="true" CodeBehind="..." Inherits="..."
den Sie normalerweise auch in der<%@ ... %>
Deklaration haben):<%@ Page Title="MyPage" Language="C#" CompilerOptions="/d:DebugSym1;DebugSym2" %> <% #if DebugSym1 %> <h4>Section1</h4> <% #else %> <h4>(Section 1 skipped)</h4> <% #endif %> <% #if DebugSym2 %> <h4>Section2</h4> <% #else %> <h4>(Section 2 skipped)</h4> <% #endif %>
Wenn Sie das entfernen
DebugSym1
oderDebugSym2
aus dem entfernenCompilerOptions
, wird der#else
Teil der entsprechenden#if
Anweisung gerendert.Ich dachte, dies ist der Vollständigkeit dieses Themas wert und kann Ihnen Zeit sparen. Weitere Informationen finden Sie in diesem Artikel , wenn Sie interessiert sind.
quelle