Roslyn Добавить документ к проекту

Я запускаю roslyn ctp2

Я пытаюсь добавить новый HTML-файл в проект

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

Это не приводит к записи изменений. Я пытаюсь получить новый html-файл, чтобы появиться в VS

2 ответов


здесь есть два вопроса:

  1. Рослин ISolution, IProject и IDocument объекты неизменяемы, поэтому для того, чтобы увидеть изменения, вам нужно будет создать новый ISolution с изменениями, затем вызовите Workspace.ApplyChanges().
  2. В Рослин, IDocument объекты создаются только для файлов, которые передаются компилятору. Другой способ сказать это вещи, которые являются частью Compile ItemGroup в файле проекта. Для других файлов (включая html-файлы) следует использовать обычные интерфейсы Visual Studio, такие как IVsSolution.

рабочие пространства являются неизменными. Это означает, что любой метод, который звучит так, как будто он собирается изменить вместо этого рабочая область будет возвращать новая экземпляр с примененными изменениями.

Так что вы хотите, что-то вроде:

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

тем не менее, я не рядом с машиной с установленным Roslyn на данный момент, поэтому я не могу гарантировать это на 100%.