Roslyn AddDocument到项目并将此更改保存到实际解决方案文件

时间:2015-01-17 10:14:17

标签: c# roslyn

这应该添加一个文档。

    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”也什么都不做?

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

enter image description here

2 个答案:

答案 0 :(得分:8)

Roslyn的整个工作空间&语法API是不可变的。

p.AddDocument创建一个新的ProjectSolution(在返回的Project的{​​{1}}属性中返回),您忽略了它。

答案 1 :(得分:5)

这个应该做的事情:

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);

源: http://www.wenda.io/questions/982766/roslyn-add-a-document-to-a-project.html

更新:它不再适用。