2014-04-09 10 views
6

Chciałbym czytać, modyfikować i zapisywać pliki csproj. Znalazłem ten kod, ale niestety klasa Engine jest amortyzowana.Modyfikuj programowo pliki csproj za pomocą Microsoft.Build.Evaluation (zamiast silnika)

Engine engine = new Engine() 
Project project = new Project(engine); 
project.Load("myproject.csproj"); 
project.SetProperty("SignAssembly", "true"); 
project.Save("myproject.csproj"); 

Więc ja w dalszym ciągu opiera się na podpowiedź należy używać Evaluation.ProjectCollection zamiast silnika:

var collection = new ProjectCollection(); 
collection.DefaultToolsVersion = "4.0"; 
var project = new Project(collection); 

// project.Load("myproject.csproj") There is NO Load method :-(
project.FullPath = "myproject.csproj"; // Instead of load? Does nothing... 

// ... modify the project 
project.Save(); // Interestingly there is a Save() method 

nie istnieje metoda ładowania więcej. Próbowałem ustawić właściwość FullPath, ale projekt nadal wydaje się pusty. Brakowało mi coś?

(Uwaga: plik .csproj jest standardowym plikiem XML ze schematem XSD i wiem, że możemy go odczytać/zapisać za pomocą XDocument lub XmlDocument.) To jest plan tworzenia kopii zapasowych. Po prostu zobaczenie .Save () metoda w klasie projektu Chyba coś przeoczyć, jeśli nie można załadować istniejący .csproj thx)

Odpowiedz

9

ja rzeczywiście znaleźć odpowiedź, mam nadzieję, że będzie pomagać innym.

Zamiast tworzenia nowego projektu (...) i próbując .Load (...), powinniśmy użyć metody fabrycznej klasy ProjectCollection.

// Instead of: 
// var project = new Project(collection); 
// project.FullPath = "myproject.csproj"; // Instead of load? Does nothing... 

// use this: 
var project = collection.LoadProject("myproject.csproj") 
+0

Czy można upuścić artefakty kompilacji do niestandardowego folderu? – Bandara

Powiązane problemy