2010-12-02 73 views
9

我們的MSBuild腳本使用Exec任務來調用幾個命令行應用程序。這些應用程序中的大多數都有自己的輸出詳細設置,我希望它們與調用它們的MSBuild腳本的詳細級別相同。在我的MSBuild腳本中獲取當前日誌記錄詳細程度

有沒有辦法讓我的MSBuild進程的日誌記錄詳細程度?

我想我可以編寫一個自定義任務來處理這個問題,但是圍繞MSBuild API,我找不到任何可以給我詳細級別的屬性或類。

回答

10

不久後,在提出我的問題後,我注意到MSBuild 4System.Environment.CommandLine作爲屬性函數公開,該屬性函數應包含任何詳細參數。隨着解析以下一點,你可以創建幾個布爾屬性會告訴你當前的日誌記錄級別:

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

請記住,這隻會在工作的MSBuild 4+。

醜?對。缺憾?也許。它工作嗎?對!

+0

這不適用於Visual Studio IDE,因爲msbuild似乎使用進程間通信從IDE查詢信息,而不是像普通和可靠的命令行參數那樣。 – jstine 2018-01-04 16:24:26