Проекты TFS и MSBuild Регистрация для каждого проекта

Я собираюсь построить большое количество (300+) проектов на TFS. Я рассматриваю файл proj для управления ими следующим образом:

Это действительно отлично работает, но я не могу этого добиться, чтобы получить Log для каждого из проектов, упомянутых в ItemGroup.

Мне нужны отдельные журналы, поэтому, если какой-либо проект выходит из строя, этот журнал можно отправить по электронной почте.

Кроме того, в командной строке msbuild я попытался /distribFileLogger, но не смог понять, как использовать это, чтобы получить файл журнала для каждого проекта отдельно.

Это правильный подход? Может кто-нибудь предложить несколько лучших решений, которые могли бы обеспечить отдельную регистрацию для каждого проекта?

2 ответа

Распределенный файловый регистратор, как следует из названия, предназначен для ведения журнала с отдельных узлов MSBuild в "распределенной" системе сборки, а не для ведения журнала из отдельных проектов, целей или задач. Вы можете попробовать создать простой пользовательский журнал, это довольно тривиально, я написал образец ниже. Хотя, возможно, вам захочется поиграть с типами событий для многословия и использовать что-то вроде NLog а не добавлять файлы, поскольку вы можете получить блокировки.

msbuild PerProjectLogger.sln/logger:PerProjectLogger\bin\Debug\PerProjectLogger.dll

using System.Collections.Concurrent;
using System.IO;
using Microsoft.Build.Framework;
namespace PerProjectLogger
{ public class Logger : Microsoft.Build.Utilities.Logger { public override void Initialize(IEventSource eventSource) { var loggers = new ConcurrentDictionary<string, fileinfo="">(); eventSource.AnyEventRaised += (s, a) => { var property = a.GetType().GetProperty("ProjectFile"); if (property == null) return; var project = property.GetValue(a) as string; if (project == null) return; var logger = loggers.GetOrAdd(Path.GetFileName(project), name => new FileInfo(name + ".log")); using (var writer = logger.AppendText()) writer.WriteLine(a.Message); }; } }
}
</string,>


Самый простой способ добиться этого с помощью TFS - создать единое задержание, а затем на вкладке "Процесс" вы увидите возможность выбора решений для сборки. Здесь вы можете добавить каждый Проект отдельно. Когда вы выполняете сборку, процесс сборки по умолчанию будет выполнять проект foreach и строить их. Вы получите файл журнала в папке для каждого проекта.

licensed under cc by-sa 3.0 with attribution.