Как программно собрать и скомпилировать другой проект C# из текущего проекта

Программа A: выведите функцию aC# и вставьте функцию в файл (например, Classifier.cs) в другом проекте C# B. Эти шаги уже были выполнены.

Мне интересно, есть ли способ программно собрать и скомпилировать проект C# внутри B внутри проекта A. Поэтому я могу нажать кнопку в проекте A, и он автоматически вставит новую функцию в проект B, соберет, скомпилирует проект B. И наконец, запустите новый проект B.

Спасибо.

3 ответа

Для.NET существует множество сборочных сборок, которые сейчас устарели. Для компиляции используйте Microsoft.Build.

Сначала добавьте следующие ссылки:

  • Microsoft.Build
  • Microsoft.Build.Engine

Во-вторых, импорт:

using Microsoft.Build.Evaluation;

И, наконец, напишите этот код:

var configuration = "Release";
var projectDirectory = @"C:\blabla";
var collection = ProjectCollection.GlobalProjectCollection;
var project = collection.LoadProject($@"{projectDirectory}\MyProject.csproj");
project.SetProperty("Configuration", configuration);

project.Build();

Нет необходимости выполнять новый процесс. .NET дает нам возможность вызывать компилятор C# программно. Я считаю, что эта техника хорошо работает:

http://blogs.msdn.com/b/dohollan/archive/2010/08/09/programmatically-invoke-the-c-compiler.aspx

Предполагая, что вы используете Visual Studio, вы можете просто запустить MSBuild для своего ProjectB.csproj. Таким образом, ваш проект должен быть построен так же, как в Visual Studio.

Другие вопросы по тегам