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
объекты создаются только для файлов, которые передаются компилятору. Другой способ сказать это вещи, которые являются частью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%.