我有Project
引用,我通过Document
向该项目添加了新的AddDocument()
。问题是,无论我发送到调用中的是什么,新文件总是最终在项目的根目录中。我已经尝试在文件的name
前添加一个子目录:
project.AddDocument(@"\GoHere\MyNewFile.cs", ...)
但这不起作用。这也不是:
project.AddDocument(@"\GoHere\MyNewFile.cs", ..., filePath: @"C:\ProjectPath\GoHere");
我尝试过其他选择也无济于事。在编译器API中是否有某种方法可以将文件添加到不存在的新子目录中的项目中?如果是这样,怎么样? TIA。
答案 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);
似乎正确添加了文档:
答案 1 :(得分:0)
获取项目的根文件夹,然后在添加文件之前自己创建目录。使用Directory.Create()
和Path.Combine()
来实现这一目标。