При создании пользовательского задания, как получить доступ к многословности MSBuild? - PullRequest
0 голосов
/ 08 июля 2010

В контексте создания пользовательского Microsoft.Build.Utilities.Task как получить доступ к многословности MSBuild?

Microsoft.Build.Utilities.Task: http://msdn.microsoft.com/en-us/library/microsoft.build.utilities.task.aspx

MSBuild многословие: http://blogs.msdn.com/b/saraford/archive/2008/10/07/did-you-know-you-can-configure-the-msbuild-verbosity-in-the-output-window-329.aspx

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Я не думаю, что это так работает. Вы получаете ссылку на механизм сборки через свойство Task.BuildEngine. Затем просто вызовите его LogMessageEvent, чтобы сгенерировать сообщение. BuildMessageEventArgs.Importance определяет, будет ли сообщение на самом деле видимым, на основе настройки многословия. Это согласуется с другими API ведения журналов.

0 голосов
/ 18 июля 2011

Причина принятия решения о проектировании (то, что сборка не может видеть многословие) заключается в следующем:

(1) Процесс сборки не должен предполагать, что хочет пользователь (и выбранные им регистраторы).Они не обязательно принадлежат одному и тому же человеку.Подумайте о том, чтобы подойти к сборке, в которой задача знает многословие и регистрирует только определенную информацию при диагностическом многословии.Вы хотите построить на консоли тихую многословность, а также подключить регистратор базы данных, который регистрирует абсолютно все.Вы не можете этого сделать, потому что задача никогда не запускала событие, потому что она видит тихое многословие.

(2) Важность и многословие запутаются.Важность - это подсказка процесса сборки относительно того, что регистраторы с определенной многословностью могут захотеть сделать с событием.Они существуют в отдельных сферах: важность в задачах и процессе сборки, многословность только в регистраторах.

(3) Сама многословность (например, / verbosity) является просто значением по умолчанию.Регистраторы, как правило, позволяют вам указать конкретное многословие для них.Например / fileloggerparameters: verbosity = подробный.Что должно получить задание?Их может быть несколько.

Сказав, что в ретроспективе есть одна веская причина пересмотреть это.Это связано с тем, что запуск большого количества событий в объекте Log, что вы могли бы разумно сделать для диагностики, может значительно повлиять на производительность сборки даже при более низких подробностях, когда они удаляются регистратором.Чтобы исправить это, мы, вероятно, должны позволить процессу сборки, по крайней мере, знать, находится ли он в каком-то «супер-многословном» режиме, в котором безопасно вести себя как сумасшедший.

Кроме того, в конечном итоге важно то, как выполнить свою работу.Так что, возможно, все эти тонкости были слишком сложными вещами.

Дэн - много лет назад я помогал спроектировать это.

...