2010-12-02 2 views
9

Unsere MSBuild-Skripte verwenden die Exec-Task, um einige Befehlszeilenanwendungen aufzurufen. Die meisten dieser Anwendungen haben ihre eigenen Ausgabe-Ausführlichkeitseinstellungen, die ich gerne der Ausführlichkeitsstufe des MSBuild-Skripts hätte, das sie aufruft.Erhalte die Ausführlichkeitsstufe der aktuellen Protokollierung in meinem MSBuild-Skript

Gibt es eine Möglichkeit für mich, die Ausführlichkeitsstufe für die Protokollierung meines MSBuild-Prozesses zu erhalten?

Ich dachte, ich könnte eine benutzerdefinierte Aufgabe schreiben, um damit umzugehen, aber stocherte um die MSBuild-API herum, konnte ich keine Eigenschaften oder Klassen finden, die mir die Ausführlichkeitsstufe geben würde.

Antwort

10

Kurz nach meinen Fragen zu stellen, bemerkte ich, dass MSBuild 4System.Environment.CommandLine als Eigenschaft Funktion macht, die alle Ausführlichkeit Argumente enthalten soll. Mit dem folgenden Bit-Parsing, können Sie mehrere Boolesche Eigenschaften erstellen, die Sie die aktuelle Protokollstufe sagen wird:

<PropertyGroup> 
    <CommandLine>$([System.Environment]::CommandLine.Trim().ToLower())</CommandLine> 
    <IsQuietVerbosity>False</IsQuietVerbosity> 
    <IsMinimalVerbosity>False</IsMinimalVerbosity> 
    <IsNormalVerbosity>True</IsNormalVerbosity> 
    <IsDetailedVerbosity>False</IsDetailedVerbosity> 
    <IsDiagnosticVerbosity>False</IsDiagnosticVerbosity> 
</PropertyGroup> 

<PropertyGroup Condition="'$(CommandLine.Contains(&quot;/v&quot;))' == 'True'"> 
    <IndexOfLastVerbosityArg>$(CommandLine.LastIndexOf("/v"))</IndexOfLastVerbosityArg> 
    <IndexOfVerbosityArg>$(CommandLine.IndexOf(":", $(IndexOfLastVerbosityArg)))</IndexOfVerbosityArg> 
    <IndexOfVerbosityArg>$([MSBuild]::Add($(IndexOfVerbosityArg), 1))</IndexOfVerbosityArg> 
    <IndexOfEndOfVerbosityArg>$(CommandLine.IndexOf(" ", $(IndexOfVerbosityArg)))</IndexOfEndOfVerbosityArg> 
    <IndexOfEndOfVerbosityArg Condition="'$(IndexOfEndOfVerbosityArg)' == '-1'">$(CommandLine.Length)</IndexOfEndOfVerbosityArg> 
    <LengthOfVerbosityArg>$([MSBuild]::Subtract($(IndexOfEndOfVerbosityArg), $(IndexOfVerbosityArg)))</LengthOfVerbosityArg> 
    <VerbosityLevel>$(CommandLine.Substring($(IndexOfVerbosityArg), $(LengthOfVerbosityArg)).Trim())</VerbosityLevel> 
    <IsQuietVerbosity>$(VerbosityLevel.StartsWith('q'))</IsQuietVerbosity> 
    <IsMinimalVerbosity>$(VerbosityLevel.StartsWith('m'))</IsMinimalVerbosity> 
    <IsNormalVerbosity>$(VerbosityLevel.StartsWith('n'))</IsNormalVerbosity> 
    <IsDiagnosticVerbosity>$(VerbosityLevel.StartsWith('di'))</IsDiagnosticVerbosity> 
    <IsDetailedVerbosity Condition="'$(IsDiagnosticVerbosity)' == 'False'">$(VerbosityLevel.StartsWith('d'))</IsDetailedVerbosity> 
</PropertyGroup> 

Denken Sie daran, wird dies nur in MSBuild arbeiten 4+.

Hässlich? Jep. Kludgy? Könnte sein. Funktioniert es. Jep!

+0

Das funktioniert nicht von der Visual Studio-IDE, da Msbuild scheint, Informationen von der IDE abzufragen, die Inter-Prozesskommunikation lieber als etwas banaler und zuverlässiger als ein Befehlszeile-Parameter verwendet. – jstine

Verwandte Themen