我正在运行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);
Run Code Online (Sandbox Code Playgroud)
这导致没有写入任何更改.我想让新的html文件出现在VS中
这里有两个问题:
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);
Run Code Online (Sandbox Code Playgroud)
然而,我目前不在安装 Roslyn 的机器附近,所以我不能 100% 保证这一点。