我正在写一个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
中创建非源代码文件并使用它的想法?
答案 0 :(得分:0)
您需要在添加文档后将更改应用到workspace
:
workspace.TryApplyChanges(proj.Solution);
然而,根据this link,似乎当前错误意味着AddAdditionalDocument()
不会将文档保留在内存中的workspace
之外,这意味着项目将不会有新文档重装时。
此外,AddDocument()
仅添加具有与包含项目的语言相对应的扩展名的文档,例如,在C#类库项目上调用AddDocument()
,将扩展名重命名为'。 cs'如果不是这样的话。