获取我的MSBuild脚本中的当前日志详细级别

获取我的MSBuild脚本中的当前日志详细级别,msbuild,Msbuild,我们的MSBuild脚本使用Exec任务调用一些命令行应用程序。大多数应用程序都有自己的输出详细度设置,我希望这些设置与调用它们的MSBuild脚本的详细度级别相同 有没有办法获取MSBuild进程的日志详细级别 我原以为可以编写一个自定义任务来处理此问题,但仔细查看MSBuild API,我找不到任何可以提供详细级别的属性或类。您不能: 相反,您可以设置包含详细级别的属性(例如,通过命令行传递该属性)。在问了我的问题后不久,我注意到MSBuild 4将System.Environment.Co

我们的MSBuild脚本使用Exec任务调用一些命令行应用程序。大多数应用程序都有自己的输出详细度设置,我希望这些设置与调用它们的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(&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>

$([System.Environment]::CommandLine.Trim().ToLower())
假的
假的
真的
假的
假的
$(CommandLine.LastIndexOf(“/v”))
$(CommandLine.IndexOf(“:”,$(indexoflastwerbosityArg)))
$([MSBuild]::添加($(IndexOfVerbosityArg),1))
$(CommandLine.IndexOf(“,$(IndexOfVerbosityArg)))
$(CommandLine.Length)
$([MSBuild]::减去($(indexofendorbosityArg),$(IndexOfVerbosityArg)))
$(CommandLine.Substring($(IndexOfVerbosityArg),$(LengthOfVerbosityArg)).Trim()
$(verpositylevel.StartsWith('q'))
$(verposityLevel.StartsWith('m'))
$(verposityLevel.StartsWith('n'))
$(verpositylevel.StartsWith('di'))
$(verposityLevel.StartsWith('d'))
记住,这只适用于MSBuild 4+。


丑陋?是的。乱七八糟的?大概它有用吗。是的

这在VisualStudioIDE中不起作用,因为msbuild似乎是使用进程间通信从IDE查询信息,而不是像命令行参数那样普通和可靠。