Как программно компилировать проекты и решения в выпуске с помощью c #? - PullRequest
2 голосов
/ 10 августа 2010

Моя дилемма в том, что мне нужно собрать большое количество проектов и решений в соответствии с настройками конфигурации, указанными в файлах.Я нашел несколько разных способов сделать это, и я воспользовался классом Microsoft.Build.BuildEngine.Engine , который недавно устарел.

Вот пример кода, который иллюстрирует его использование: (обратите внимание, что node.Path - это путь к файлу проекта)

var builder = new Engine { BinPath = @"C:\Windows\Microsoft.NET\Framework\v3.5" };
var logger = new FileLogger { Parameters = @"logfile=" + Path.Combine(logdir, Path.GetFileName(node.Path)) + ".txt" };

compiler.RegisterLogger(logger);
bool success = compiler.BuildProjectFile(node.Path);
compiler.UnregisterAllLoggers();

return success;

Моя проблема - он компилируется в отладке: (

Просмотр членов класса не очень помог, так как не так много открытых свойств. Одним из советов было свойство PropertyGroup , которое, по-видимому, допускает настройкунекоторых вариантов сборки проекта ... однако неясно, как получить результирующий вызов BuildProjectFile для вывода в выпуске.

Буду очень признателен за любую помощь в этом!

Ответы [ 2 ]

3 голосов
/ 10 августа 2010

У вас есть , чтобы сделать это через код? Возможно, вам будет проще использовать что-то вроде NAnT вместе с NAntContrib , задача MSBuild является довольно всеобъемлющей и делает ее довольно простой указать, какую цель построить, например:

  <msbuild project="${ProjectBasePath}\${ProjectName}.sln">
    <property name="Configuration" value="debug"/>
  </msbuild>

Вы также можете вызвать MSBuild из командной строки , например:

msbuild.exe project.proj /t:rebuild /p:Configuration=Debug

Преимущество, которое даст вам nant перед msbuild, заключается в том, что вы можете создавать сценарии процесса сборки. Лично я нахожу это довольно простым, и вы можете извлечь из этого много силы и гибкости.

Вы также можете вызвать Visual Studio напрямую:

devenv.exe /Rebuild release "ProjectName.sln" /Out "c:\vs_errors.txt"

Это также выведет вывод сборки на c:\vs_errors.txt

1 голос
/ 10 августа 2010

Я не понимаю, почему вам нужно постоянно компилировать. Файлы настроек, которые вы упоминаете, должны быть в app.config или web.config (в зависимости от того, что это веб-сервис). Файлы настроек не должны изменять компиляцию кода приложения. Если это так, я предлагаю вам изменить модель программирования, чтобы можно было изменять настройки без перекомпиляции.

...