我正在創建一些Roslyn分析器,它們使用AdditionFiles
功能來訪問設置文件。我試圖測試分析儀正確使用它。如何將附加文件添加到臨時Roslyn工作區以將其展示給分析器
我有設立一個特設測試工作區的方法,我嘗試了通過兩種途徑增加額外的文件:
private static Project CreateProject(IEnumerable<string> sources)
{
var projectId = ProjectId.CreateNewId(TestProjectName);
var solution = new AdhocWorkspace()
.CurrentSolution
.AddProject(projectId, TestProjectName, TestProjectName, LanguageNames.CSharp)
.AddMetadataReference(projectId, CorlibReference)
.AddMetadataReference(projectId, SystemCoreReference)
.AddAdditionalDocument(DocumentInfo.Create(DocumentId.CreateNewId(projectId),
"arnolyzer.yaml",
filePath: @"..\..\arnolyzer.yaml"));
var count = 0;
foreach (var source in sources)
{
var newFileName = $"{DefaultFilePathPrefix}{count++}.{CSharpDefaultFileExt}";
var documentId = DocumentId.CreateNewId(projectId, newFileName);
solution = solution.AddDocument(documentId, newFileName, SourceText.From(source));
}
var settingsFileId = DocumentId.CreateNewId(projectId, "arnolyzer.yaml");
solution = solution.AddAdditionalDocument(settingsFileId, "arnolyzer.yaml", SourceText.From(@"..\..\arnolyzer.yaml"));
return solution.GetProject(projectId);
}
審視Project
例如,我可以看到兩個額外的文件已經添加。
但是,在AnalysisContext.RegisterCompilationStartAction
動作中檢查CompilationStartAnalysisContext.Options.AdditionalFiles
時,AdditionalFiles
爲空。
有誰知道這種方法是否應該起作用,從而確定我在某處出錯了嗎?或者是否將其他文檔添加到與AditionalFiles
功能無關的Project
?
要回答你的問題很簡單:是的,AdditionalDocument就是編譯器AdditionalFiles特徵匹配。它看起來像你正在兩次添加文件?另外,我不確定我們是否支持文件名中的相對路徑,如果將其更改爲完整路徑,該怎麼辦? –
@JasonMalinowski。我通過兩種方式添加文件兩次,以測試其中一種是否有效,另一種則沒有。我嘗試了完整的道路,但不幸的是沒有任何區別。 Tamas在他的答案中使用的方法適用於我,儘管如此我會使用它。謝謝。 –
你仍然可能希望在https://github.com/dotnet/roslyn上提供一個錯誤;要麼這不應該失敗,要麼至少需要一些更新的文檔。 –