C# Roslyn将文档添加到项目中,并将此更改保存到real solution文件中

C# Roslyn将文档添加到项目中,并将此更改保存到real solution文件中,c#,roslyn,C#,Roslyn,这将添加一个文档 public static void AddDoc() { var msBuild = MSBuildWorkspace.Create(); var sln = msBuild.OpenSolutionAsync (@"D:\PanNiebieski\Documents\Visual Studio 14\Projects\WebApplication1" + @"\WebAppli

这将添加一个文档

    public static void AddDoc()
    {
        var msBuild = MSBuildWorkspace.Create();

        var sln = msBuild.OpenSolutionAsync
            (@"D:\PanNiebieski\Documents\Visual Studio 14\Projects\WebApplication1"
            + @"\WebApplication1.sln").Result;

        foreach (var p in sln.Projects)
        {
            p.AddDocument(Guid.NewGuid().ToString() + ".txt", "test");

            var ok = msBuild.TryApplyChanges(sln);

            Console.WriteLine(p.Name + ":" + ok);
        }

        Console.ReadKey();
    }
方法“TryApplyChanges”返回true,这意味着添加了文档。 当我再次检查解决方案时,没有类似的存在。 我在向项目添加引用时也遇到同样的问题

问题是如何保存更改,就像将文档添加到实际项目中一样。我错过了什么吗。StackOverflow中关于向项目添加引用的许多问题都表示,这根本不起作用。方法“AddDocument”也不做任何事情吗

此方法表示支持此操作。我很困惑


Roslyn的整个工作区和语法API是不可变的


p.AddDocument
创建一个新的
项目
解决方案
(在返回的
文档
项目
属性中返回),您将忽略它

这个应该可以做到:

IWorkspace workspace = Workspace.LoadSolution(@"..\RoslynTest.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);
IWorkspace workspace=workspace.LoadSolution(@.\roslynstest.sln”);
var originalSolution=workspace.CurrentSolution;
var project=originalSolution.GetProject(originalSolution.projectds.First());
IDocument doc=project.AddDocument(“index.html”和“”);
ApplyChanges(原始解决方案,doc.Project.Solution);
资料来源:


更新:它不再适用。

如果添加.cs文件会发生什么?看,我看到了一些扩展的东西。(此外,此代码自VS2015预览版以来已更改)在将包从beta1更新为beta2后不起作用。“cs”文件扩展名没有任何作用。谢谢。如果我能根据你的答案创建代码片段,那么你就赢了。这也很有帮助。从Document object new project和new solution中可以得到的东西并不那么明显。请注意,这个答案以及答案中的链接使用了不再使用的界面
IWorkspace
IDocument
,而不是当前使用的
工作区
文档