Roslyn CodeFix无法找到以前创建的AdditionalDocument

时间:2016-11-19 13:41:15

标签: c# file code-analysis roslyn

我正在写一个C#Roslyn Analyzer& CodeFix将基于某些变量创建一个新的.txt文件,如果它不存在,如果它存在,它将附加一个新行。 分析器和文件的创建使用RegisterCodeFix操作中的以下代码完美地工作:

var proj = document.Project.AddAdditionalDocument("file.txt",
            "text content");
return proj.Solution;

虽然,当我尝试搜索项目的集合AdditionalDocuments时,它是空的,即使该文件是先前创建的(并且项目已保存,如果这很重要)。

var doc = document.Project.AdditionalDocuments.FirstOrDefault(x =>
 x.Name == "file.txt"); //doc is null

我尝试将新文件添加为普通Document而不是AdditionalDocument,但file.txt创建为源代码文件file.cs而非.txt 1}}一个,但是,出于某种原因,我可以在file.cs集合中找到Project.Documents

有关如何在CodeFixProvider中创建非源代码文件并使用它的想法?

1 个答案:

答案 0 :(得分:0)

您需要在添加文档后将更改应用到workspace

workspace.TryApplyChanges(proj.Solution);

然而,根据this link,似乎当前错误意味着AddAdditionalDocument()不会将文档保留在内存中的workspace之外,这意味着项目将不会有新文档重装时。

此外,AddDocument()仅添加具有与包含项目的语言相对应的扩展名的文档,例如,在C#类库项目上调用AddDocument(),将扩展名重命名为'。 cs'如果不是这样的话。