Roslyn将文档添加到项目中

时间:2012-09-11 10:43:59

标签: c# 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 个答案:

答案 0 :(得分:6)

这里有两个问题:

  1. Roslyn ISolutionIProjectIDocument个对象是不可变的,因此要查看更改,您需要创建一个带有更改的新ISolution,然后调用Workspace.ApplyChanges()
  2. 在Roslyn中,IDocument个对象仅为传递给编译器的文件创建。另一种说法是项目文件中Compile ItemGroup的一部分。对于其他文件(包括html文件),您应该使用常规的Visual Studio界面,如IVsSolution

答案 1 :(得分:4)

工作区是不可变的。这意味着任何听起来像是修改工作区的方法都会返回一个 new 实例并应用更改。

所以你想要这样的东西:

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%。