在Roslyn项目中创建新文件夹

时间:2016-01-22 20:03:48

标签: c# roslyn

我有Project引用,我通过Document向该项目添加了新的AddDocument()。问题是,无论我发送到调用中的是什么,新文件总是最终在项目的根目录中。我已经尝试在文件的name前添加一个子目录:

project.AddDocument(@"\GoHere\MyNewFile.cs", ...)

但这不起作用。这也不是:

project.AddDocument(@"\GoHere\MyNewFile.cs", ..., filePath: @"C:\ProjectPath\GoHere");

我尝试过其他选择也无济于事。在编译器API中是否有某种方法可以将文件添加到不存在的新子目录中的项目中?如果是这样,怎么样? TIA。

2 个答案:

答案 0 :(得分:3)

我认为您只需要在AddDocument

上使用可选参数folders
SourceText text; 
List<string> folders = new List<string>() { "GoHere" };
project.AddDocument(@"MyNewFile.cs", text, folders: folders);

因为您提到了VS,所以我只是从VSPackage的Initialize()对此进行了双重检查。

var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
var workspace = componentModel.GetService<VisualStudioWorkspace>();

var sourceText = SourceText.From("Test");
var folders = new List<string>() { "GoHere" };
var proj = workspace.CurrentSolution.Projects.Single();
var document = proj.AddDocument("Test.cs", sourceText, folders);

var result = workspace.TryApplyChanges(document.Project.Solution);

似乎正确添加了文档:

enter image description here

答案 1 :(得分:0)

获取项目的根文件夹,然后在添加文件之前自己创建目录。使用Directory.Create()Path.Combine()来实现这一目标。