2015-01-17 3 views
6

Powinno to dodać dokument.Roslyn AddDocument do projektu i Zapisz tę zmianę w rzeczywistym pliku rozwiązania

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(); 
    } 

Metoda "TryApplyChanges" zwraca wartość true, co oznacza, że ​​dokument został dodany. Potem znowu, gdy sprawdzam rozwiązanie, nic takiego nie istnieje. Mam taki sam problem z dodawaniem odniesień do projektu.

Pytanie, w jaki sposób mogę zapisać zmiany, np. Dodając dokument do prawdziwego projektu. Czy coś mi brakuje? Wiele pytań w StackOverflow dotyczących dodawania odniesień do projektu mówiło, że to po prostu nie działa. Czy metoda "AddDocument" również nic nie robi?

Ta metoda mówi, że ta akcja jest obsługiwana. Jestem zdezorientowany.

enter image description here

+1

Co stanie się, jeśli dodasz plik .cs? Patrząc na http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.Workspaces.Desktop/Workspace/MSBuild/MSBuildWorkspace.cs,1285b31dd95f5004, widzę tam pewne dodatki. (Również ten kod zmienił się od czasu podglądu VS2015) –

+0

Nie działa po aktualizacji pakietów z wersji beta1 do wersji beta2. Rozszerzenie pliku "cs" nic nie dało. – user2932893

Odpowiedz

8

cały obszar roboczy & API składniowe Roslyn są niezmienne.

p.AddDocument tworzy nowy Project i Solution (która jest zwracana w nieruchomości Project zwróconego Document), który jesteś ignorując.

+0

Dzięki. Jeśli mogę utworzyć fragment na podstawie Twojej odpowiedzi, wygrasz. – user2932893

5

Ten powinien zrobić rzeczy:

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); 

źródło: http://www.wenda.io/questions/982766/roslyn-add-a-document-to-a-project.html

UPDATE: nie ma już zastosowania.

+0

To też było pomocne. To, co można uzyskać z nowego obiektu w dokumencie i nowego rozwiązania, nie było tak oczywiste. – user2932893

+3

Należy zauważyć, że ta odpowiedź i link w odpowiedzi używa raczej nieużywanych interfejsów 'IWorkspace' i' IDocument' zamiast obecnie używanych 'Przestrzeni roboczej' i' Dokumentu' –

Powiązane problemy