2010-03-26 5 views
0

Я хотел бы избежать командной строки для этого. Я использую 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 может его построить (я проверил).

На данный момент я начинаю задаваться вопросом, не взял ли я какой-то код, который устарел, или методология, которая была заменена чем-то другим. Мнения?

+0

Любопытно, зачем вам нужно создать файл .csproj в коде? –

+0

Тот же вопрос здесь. Почему бы просто не использовать превосходный exe msbuild? Вы также можете запустить его из своего кода. –

+0

@ Andy: Обработка исключений - первое, что приходит на ум. Я предполагаю, что этот API - это тот же набор кода, который использует msbuild, поэтому почему бы не вырезать среднего человека? – jcollum

ответ

1

Метод LoadXml() ожидает строку, содержащую xml, а не путь к файлу. Вместо этого используйте метод Load().

Нет, ничего не известно о пространстве имен Microsoft.Build. Предполагая, что вы используете версию 3.5.

+0

/headlap; jeez Теперь я чувствую себя немой. – jcollum

+0

Я все еще зациклен на том, где именно идет выход. Я получил его для успешного создания ранее (пришлось перейти к этому коду, потому что мой конечный результат входит в IlMerge, и ему было трудно разрешить расположение платформы .NET ...), но фактического вывода по-прежнему не было. – jcollum

Смежные вопросы