2012-09-11 14 views
8

estoy corriendo Roslyn CTP2Roslyn Agregar un documento a un proyecto

Estoy intentando añadir un nuevo archivo html en un proyecto

IWorkspace workspace = Workspace.LoadSolution("MySolution.sln"); 
var originalSolution = workspace.CurrentSolution; 
ISolution newSolution = originalSolution; 
newSolution.GetProject(newSolution.ProjectIds.First()) 
         .AddDocument("index.html", "<html></html>"); 
workspace.ApplyChanges(originalSolution, newSolution); 

Esto da lugar a ningún cambio que se escriben. Estoy tratando de que aparezca el nuevo archivo html en VS

+0

La mayoría de los objetos en Roslyn son inmutables, por lo que creo que debe usar el proyecto que devuelve 'AddDocument()'. Pero no estoy seguro de cómo hacerlo, sin eliminar el proyecto anterior y luego agregar el nuevo. – svick

Respuesta

6

Hay dos cuestiones aquí:

  1. ISolution Roslyn, IProject y IDocument objetos son inmutables, por lo que con el fin de ver los cambios que se necesita para crear una nueva ISolution con los cambios, a continuación, llamar Workspace.ApplyChanges().
  2. En Roslyn, IDocument los objetos solo se crean para los archivos que se pasan al compilador. Otra forma de decir esto es cosas que son parte de CompileItemGroup en el archivo de proyecto. Para otros archivos (incluidos los archivos html), debe utilizar las interfaces normales de Visual Studio como IVsSolution.
4

Los espacios de trabajo son inmutables. Esto significa que cualquier método que suene como va a modificar, el espacio de trabajo en su lugar devolverá una nueva instancia con los cambios aplicados.

Así que quieres algo como:

IWorkspace workspace = Workspace.LoadSolution("MySolution.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); 

Sin embargo, no estoy cerca de una máquina con Roslyn instalada en este momento, así que no puede garantizar este 100%.

+3

No son los espacios de trabajo inmutables, sino casi todo lo demás. El espacio de trabajo en sí mismo muta, disparando eventos cuando cambia. Los objetos de solución, proyecto y documento son inmutables y existen en una jerarquía. Cuando cambia un proyecto al agregar un documento, obtiene una nueva instancia de proyecto que es miembro de una nueva instancia de solución. Debe usar la nueva instancia de la solución cuando aplique los cambios al espacio de trabajo o no verá los cambios en el área de trabajo. –

Cuestiones relacionadas