【问题标题】:Get the current logging verbosity level in my MSBuild script在我的 MSBuild 脚本中获取当前的日志记录详细级别
【发布时间】:2010-12-02 23:38:50
【问题描述】:

我们的 MSBuild 脚本使用 Exec 任务来调用一些命令行应用程序。这些应用程序中的大多数都有自己的输出详细级别设置,我希望这些设置与调用它们的 MSBuild 脚本的详细级别相同。

有没有办法让我获得 MSBuild 进程的日志记录详细级别?

我以为我可以编写一个自定义任务来处理这个问题,但是在 MSBuild API 中查找时,我找不到任何可以提供详细级别的属性或类。

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    问完我的问题后不久,我注意到 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+。

    丑吗?是的。克鲁吉?也许。行得通吗。是的!

    【讨论】:

    • 这在 Visual Studio IDE 中不起作用,因为 msbuild 似乎使用进程间通信从 IDE 查询信息,而不是像命令行参数那样普通和可靠的东西。
    • 请注意,这个failsdotnet builddotnet msbuild,不知道为什么。
    • 我认为您可以通过检查MSBuildRuntimeType reserved property来检查它是否有效。
    【解决方案2】:

    你不能:http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/510f07b4-c5f7-43a8-b7cb-e3c398841725/

    相反,您可以设置包含详细级别的属性(例如通过命令行传递)。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2022-11-15
      • 2020-08-18
      • 1970-01-01
      • 2017-03-13
      • 2011-01-07
      相关资源
      最近更新 更多