Я хотел бы избежать командной строки для этого. Я использую API MSBuild (Microsoft.Build.Framework
и Microsoft.Build.BuildEngine
) с кодом, который выглядит следующим образом:Что такое эффективный способ создания файла csproj в коде?
this.buildEngine = new Engine();
BuildPropertyGroup props = new BuildPropertyGroup();
props.SetProperty("Configuration", "Debug");
this.buildEngine.RegisterLogger(this.logger);
Project proj = new Project(this.buildEngine);
proj.LoadXml(this.projectFileAndPath, ProjectLoadSettings.None);
this.buildEngine.BuildProject(proj, "Build");
Однако я столкнулся достаточно проблем, которые я не могу найти ответы на которые я действительно интересно, если я сделаю это правильно. Во-первых, я не могу найти результат (нет каталога bin в любом из мест, где я решил, что dll закончится). Во-вторых, я попытался создать проект, который я сделал в VS2008, и строка proj.LoadXml(
не работает для недействительной кодировки xml. Но, конечно, файл xml действителен, так как VS2008 может его построить (я проверил).
На данный момент я начинаю задаваться вопросом, не взял ли я какой-то код, который устарел, или методология, которая была заменена чем-то другим. Мнения?
Любопытно, зачем вам нужно создать файл .csproj в коде? –
Тот же вопрос здесь. Почему бы просто не использовать превосходный exe msbuild? Вы также можете запустить его из своего кода. –
@ Andy: Обработка исключений - первое, что приходит на ум. Я предполагаю, что этот API - это тот же набор кода, который использует msbuild, поэтому почему бы не вырезать среднего человека? – jcollum