我們的MSBuild腳本使用Exec任務來調用幾個命令行應用程序。這些應用程序中的大多數都有自己的輸出詳細設置,我希望它們與調用它們的MSBuild腳本的詳細級別相同。在我的MSBuild腳本中獲取當前日誌記錄詳細程度
有沒有辦法讓我的MSBuild進程的日誌記錄詳細程度?
我想我可以編寫一個自定義任務來處理這個問題,但是圍繞MSBuild API,我找不到任何可以給我詳細級別的屬性或類。
我們的MSBuild腳本使用Exec任務來調用幾個命令行應用程序。這些應用程序中的大多數都有自己的輸出詳細設置,我希望它們與調用它們的MSBuild腳本的詳細級別相同。在我的MSBuild腳本中獲取當前日誌記錄詳細程度
有沒有辦法讓我的MSBuild進程的日誌記錄詳細程度?
我想我可以編寫一個自定義任務來處理這個問題,但是圍繞MSBuild API,我找不到任何可以給我詳細級別的屬性或類。
不久後,在提出我的問題後,我注意到MSBuild 4將System.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("/v"))' == '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+。
醜?對。缺憾?也許。它工作嗎?對!
您不能:http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/510f07b4-c5f7-43a8-b7cb-e3c398841725/
相反,你可以設置包含了詳細程度你的財產(與例如在命令行中傳遞)。
這不適用於Visual Studio IDE,因爲msbuild似乎使用進程間通信從IDE查詢信息,而不是像普通和可靠的命令行參數那樣。 – jstine 2018-01-04 16:24:26