8

我正在运行 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 中

4

2 回答 2

6

这里有两个问题:

  1. Roslyn ISolutionIProjectIDocument对象是不可变的,因此为了查看更改,您需要ISolution使用更改创建一个新对象,然后调用Workspace.ApplyChanges().
  2. 在 Roslyn 中,IDocument仅为传递给编译器的文件创建对象。另一种说法是Compile ItemGroup项目文件中包含的内容。对于其他文件(包括 html 文件),您应该使用普通的 Visual Studio 界面,例如IVsSolution.
于 2012-09-11T13:31:47.030 回答
5

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

所以你想要这样的东西:

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

于 2012-09-11T12:32:36.467 回答