Получить текущий уровень подробности ведения журнала в моем скрипте MSBuild - PullRequest
10 голосов
/ 03 декабря 2010

Наши скрипты MSBuild используют задачу Exec для вызова нескольких приложений командной строки. Большинство из этих приложений имеют свои собственные настройки выходной детализации, которые я бы хотел, чтобы они были такими же, как уровень детализации вызывающего их скрипта MSBuild.

Есть ли способ получить уровень детализации ведения журнала моего процесса MSBuild?

Я думал, что смогу написать собственное задание, чтобы справиться с этим, но изучая API MSBuild, я не смог найти какие-либо свойства или классы, которые дали бы мне уровень многословия.

Ответы [ 2 ]

11 голосов
/ 03 декабря 2010

Вскоре после того, как я задал свои вопросы, я заметил, что 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>

Помните, это будет работать только в MSBuild 4 +.

Гадкий?Ага.Запутано?Может быть.Это работает.Да!

1 голос
/ 03 декабря 2010

Вы не можете: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/510f07b4-c5f7-43a8-b7cb-e3c398841725/

Вместо этого вы можете установить свое свойство (например, передав его вместе с командной строкой), которое содержит уровень детализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...