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 ответов
здесь есть два вопроса:
- Рослин
ISolution,IProjectиIDocumentобъекты неизменяемы, поэтому для того, чтобы увидеть изменения, вам нужно будет создать новыйISolutionс изменениями, затем вызовитеWorkspace.ApplyChanges(). - В Рослин,
IDocumentобъекты создаются только для файлов, которые передаются компилятору. Другой способ сказать это вещи, которые являются частьюCompileItemGroupв файле проекта. Для других файлов (включая 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%.