我正在运行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
中答案 0 :(得分:6)
这里有两个问题:
ISolution
,IProject
和IDocument
个对象是不可变的,因此要查看更改,您需要创建一个带有更改的新ISolution
,然后调用Workspace.ApplyChanges()
。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%。