2015-01-17 13 views
6

Questo dovrebbe aggiungere un documento.Roslyn Aggiungi documento a un progetto e Salva questa modifica nel file di soluzione reale

public static void AddDoc() 
    { 
     var msBuild = MSBuildWorkspace.Create(); 

     var sln = msBuild.OpenSolutionAsync 
      (@"D:\PanNiebieski\Documents\Visual Studio 14\Projects\WebApplication1" 
      + @"\WebApplication1.sln").Result; 

     foreach (var p in sln.Projects) 
     { 
      p.AddDocument(Guid.NewGuid().ToString() + ".txt", "test"); 

      var ok = msBuild.TryApplyChanges(sln); 

      Console.WriteLine(p.Name + ":" + ok); 
     } 

     Console.ReadKey(); 
    } 

Metodo "TryApplyChanges" restituisce true in modo che il documento sia stato aggiunto. Poi di nuovo quando controllo la soluzione non esiste nulla del genere. Ho lo stesso problema con l'aggiunta di riferimenti a un progetto.

La domanda è come posso salvare il cambiamento come aggiungere un documento a un progetto reale. Mi manca qualcosa. Molte domande in StackOverflow sull'aggiunta di riferimenti a un progetto dicevano che semplicemente non funziona. Anche il metodo "AddDocument" non fa nulla?

Questo metodo indica che questa azione è supportata. Sono confuso.

enter image description here

+1

Cosa succede se aggiungi un file .cs? Esaminando http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.Workspaces.Desktop/Workspace/MSBuild/MSBuildWorkspace.cs,1285b31dd95f5004, vedo alcune estensioni lì. (Inoltre, questo codice è cambiato rispetto all'anteprima VS2015) –

+0

Non funziona dopo l'aggiornamento dei pacchetti da beta1 a beta2. l'estensione del file "cs" non ha funzionato. – user2932893

risposta

8

intero spazio di lavoro & API di sintassi di Roslyn sono immutabili.

p.AddDocument crea un nuovo Project e Solution (che viene restituito nella Project proprietà del restituita Document), che si sta ignorando.

+0

Grazie. Se riesco a creare uno snippet basato sulla tua risposta, allora vinci. – user2932893

5

questo dovrebbe fare la cosa:

IWorkspace workspace = Workspace.LoadSolution(@"..\RoslynTest.sln"); 
var originalSolution = workspace.CurrentSolution; 
var project = originalSolution.GetProject(originalSolution.ProjectIds.First()); 
IDocument doc = project.AddDocument("index.html", "<html></html>"); 
workspace.ApplyChanges(originalSolution, doc.Project.Solution); 

fonte: http://www.wenda.io/questions/982766/roslyn-add-a-document-to-a-project.html

UPDATE: non è più applicabile.

+0

Anche questo è stato utile. La cosa che puoi ottenere da un nuovo oggetto Document e da una nuova soluzione non era così ovvia. – user2932893

+3

Si noti che questa risposta e il collegamento nella risposta utilizzano le interfacce non più utilizzate 'IWorkspace' e' IDocument' piuttosto che il 'Workspace' attualmente in uso e' Document' –

Problemi correlati