Окружающая среда:
C # проекты, Visual studio 2008, C #, .Net 3.5, MSBuild
Цель:
Запускаю мою собственную задачу сборки для моих проектов на C # и, основываясь на платформе (платформа конфигурации Soln), я делаю некоторые манипуляции с самим объектом Project перед сборкой. Например, установка BuildAction для EmbeddedResource и т. Д.
Как только это будет сделано, я звоню Project.Build()
. Я не хочу использовать объект Project в GlobalEngine, потому что он пометит файл как грязный (и извлечение из TFS), как только вы в любом случае измените объект Project.
Проблема:
Поскольку я использую свой собственный экземпляр Engine и Project, я не могу направить выходные данные сборки, ошибки в VS. Я только получаю bool из Project.Build()
.
Я не нахожу никаких событий, к которым я мог бы подключиться, чтобы разрешить доступ к BuildErrorEventArgs
и подобным вещам. Я знаю, что могу использовать Log.LogErrorEvent()
для записи сообщений в список ошибок VS. Но для этого мне нужно сначала получить сам вывод сборки.
Код:
// Execute method in my custom build task class, derives from a BaseTask class
public override bool Execute()
{
Engine engine = new Engine();
Project project = new Project(engine);
project.Load(ProjectName);
Log.LogMessage(Microsoft.Build.Framework.MessageImportance.High, "Got the Project");
// Set the project's DefaultTargets to "Build" to be able to build with CSharp targets
project.DefaultTargets = "Build";
IsBuilt = project.Build(); // Isbuilt bool is a property in my BaseTask class
// Here's where I want to get Build output and direct it to VS output window and errorlist window
engine.Shutdown();
return base.Execute();
}