2016-06-10 25 views
0

Ich untersuche die Verwendung des Roslyn-Compilers innerhalb einer Visual Studio-Erweiterung (VSIX), die den VisualStudioWorkspace verwendet, um vorhandenen Code zu aktualisieren.Roslyn: Wie man mehrere Projekte asynchron aktualisiert?

Stellen Sie sich vor, dass meine aktuelle Lösung 12 Projekte hat. Für jedes dieser Projekte mag ich:

  1. eine neue Code-Datei hinzufügen
  2. aktualisiert eine vorhandene Codedatei

ich über die Unveränderlichkeit dieser Objekte und als Proof-of-concept verstehen Ich habe ein Beispiel geschrieben, das die Änderungen am ersten Projekt, dann am zweiten Projekt und so weiter vornimmt.

Ich fragte mich dann, ob ich die Änderungen an jedem Projekt mit einer asynchronen Aufgabe vornehmen könnte, und wenn alle Aufgaben abgeschlossen sind (alle Projekte wurden aktualisiert), aktualisieren Sie die Lösung.

Zu diesem Zweck habe ich meine Proof-of-Concept geändert und bin in der Phase, in der ich jetzt 12 aktualisierte Projekte habe. Was mir nicht klar ist, ist, wie ich alle Änderungen wieder in meine aktuelle Lösung einfüge, so dass ich dann myWorkspace.TryApplyChanges(sln) in einem einzigen Schritt aufrufen kann.

Antwort

0

Ja, das sollte gut funktionieren. Wenn Sie das erste Projekt neu geschrieben haben, können Sie .Solution ausführen, und das gibt Ihnen eine neue Lösung mit dem Neuschreiben. Dann gehen Sie und schreiben Sie das zweite Projekt darin neu. Es gibt eine Solution.ProjectIds-Auflistung, die Ihnen eine Liste der IDs gibt, die nicht von Snapshot zu Snapshot ändern.

var originalSolution = ...; 
var rewrittenSolution = originalSolution; 

foreach (var projectId in originalSolution.ProjectIds) 
{ 
    var projectToRewrite = rewrittenSolution.GetProject(projectId); 

    // update projectToRewrite here 

    rewrittenSolution = projectToRewrite.Solution; 
} 

workspace.TryApplyChanges(rewrittenSolution);