2009-11-11 3 views
7

Я хотел бы скомпилировать решение, передав путь к файлу решения (файл .sln) и режим сборки (debug, release). Я не хочу вызывать процесс командной строки, такой как devenv.exe или msbuild.exe, вместо этого я хотел бы использовать API и знать, были ли ошибки компиляции.Как программно построить визуальное студийное решение?

Возможно ли это? Просьба предоставить образцы, если вы считаете, что знаете, как это сделать.

ответ

3

Вам нужно будет запустить процесс в какой-то момент, чтобы сделать компиляцию, которую вы могли бы, и создать процесс, чтобы начать компиляцию. Это будет намного проще, чем бороться с API.

Редактировать Андрей дает хороший совет о том, как вы можете это сделать, но я все же думаю, что это ошибка.

+0

Удивительно, насколько простым может быть код выхода. (Я думаю, слишком много людей не помнят, как работать с простым и легким пакетным файлом ... тогда снова прошло несколько лет с тех пор, как DOS была популярна, поэтому, возможно, они просто не знают.) –

+0

Достаточно справедливо, что звучит действительно намного проще, чем использование API. Я думаю, что стыдно, что нет простого API .net, хотя с правильным возвращенным объектом, где мы могли бы проверить наличие ошибок. и т.п. Спасибо – clems

+0

Угадайте, что вы пропустили API-интерфейс Build Engine, который указал itowlson http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine.engine.buildprojectfile.aspx –

2

Как itowlson отметил, вы можете также использовать Build Engine APIs

... из MSDN ...

// Build a project file 
bool success = engine.BuildProjectFile(@"c:\temp\validate.proj"); 

Вы можете использовать MSBuild из сценария, такие как пакетный файл. И просто проверьте ErrorLevel на что-то другое, кроме 0 ... или вы можете повеселиться с API.

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ MSBuild.exe

.. из MSBuild.exe /? ...

Microsoft (R) Постройте Engine версии 2.0.50727.4927 [Microsoft .NET Framework, версия 2.0.50727.4927] Copyright (C) Корпорация Microsoft 2005. Все права защищены.

Синтаксис: MSBuild.exe [опции] [файл проекта]

...

Примеры:

MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release 
    MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug 
+2

Поскольку он специально не хочет использовать командную строку MSBuild, возможно, стоит указать ему на API MSBuild, в частности http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine. engine.buildprojectfile.aspx. – itowlson

+0

Хорошая точка ... Я бы, скорее всего, просто обернул exe с помощью Process.Start(), но я мог видеть преимущества API. –

1

здесь является article обсуждение, используя # компилятор C программно. Вот article, обсуждающий формат файла sln. Sln-файл представляет собой xml-файл, поэтому его довольно легко прочитать.

0

Я также предлагаю использовать API MSBuild. Кажется, он работает неплохо. Однако он значительно изменился с .NET4 и VS2010.