Roslyn AddDocument 到项目并将此更改保存到实际解决方案文件
Roslyn AddDocument to a project and Save this change to real solution file
这应该添加一个文档。
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" returns true 这意味着文档已添加。
然后,当我再次检查解决方案时,不存在类似的东西。
我在添加对项目的引用时遇到同样的问题。
问题是如何保存更改,例如将文档添加到实际项目中。我想念什么吗? Whosebug 中的许多关于添加对项目的引用的问题都说这根本行不通。方法 "AddDocument" 也什么都不做吗?
此方法表示支持此操作。我很困惑。
Roslyn 的整个工作区和语法 API 都是不可变的。
p.AddDocument
创建一个新的 Project
和 Solution
(在返回的 Document
的 Project
属性 中返回),你忽略了。
这个应该做的事情:
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
更新:不再适用。
这应该添加一个文档。
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" returns true 这意味着文档已添加。 然后,当我再次检查解决方案时,不存在类似的东西。 我在添加对项目的引用时遇到同样的问题。
问题是如何保存更改,例如将文档添加到实际项目中。我想念什么吗? Whosebug 中的许多关于添加对项目的引用的问题都说这根本行不通。方法 "AddDocument" 也什么都不做吗?
此方法表示支持此操作。我很困惑。
Roslyn 的整个工作区和语法 API 都是不可变的。
p.AddDocument
创建一个新的 Project
和 Solution
(在返回的 Document
的 Project
属性 中返回),你忽略了。
这个应该做的事情:
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
更新:不再适用。