Как программно собрать и скомпилировать другой проект 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.