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", ""); workspace.ApplyChanges(originalSolution, newSolution);
这导致没有写入任何更改。 我想让新的html文件出现在VS中
这里有两个问题:
- Roslyn
ISolution
,IProject
和IDocument
对象是不可变的,因此为了查看需要使用更改创建新ISolution
的更改,请调用Workspace.ApplyChanges()
。 - 在Roslyn中,仅为传递给编译器的文件创建
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", ""); workspace.ApplyChanges(originalSolution, doc.Project.Solution);
但是,我现在不在安装Roslyn的机器附近,所以我无法保证这100%。