2014-04-09 35 views
6

Vorrei leggere, modificare e riscrivere i file csproj. Ho trovato questo codice, ma sfortunatamente la classe del motore è ammortizzata.Modificare i file csproj programmaticamente con Microsoft.Build.Evaluation (invece di Engine)

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

Così ho continuato basa sulla suggerimento dovrei usare Evaluation.ProjectCollection invece di motore:

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 

non esiste un metodo di carico più. Ho provato a impostare la proprietà FullPath, ma il progetto sembra ancora vuoto. Mi mancava qualcosa?

(Si noti che il file .csproj è un file XML standard con schema XSD e so che è possibile leggerlo/scriverlo utilizzando XDocument o XmlDocument. Si tratta di un piano di backup.) metodo nella classe Progetto penso ho perso qualcosa, se non riesco a caricare un csproj esistente thx)

risposta

9

realtà ho trovato la risposta, si spera aiutare gli altri:.

invece di creare un nuovo progetto (...) e cercando di .Load (...), dovremmo usare un metodo factory della classe 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

È possibile rilasciare artefatti di build in una cartella personalizzata? – Bandara

Problemi correlati