我将为Roslyn代码分析器及其代码修复程序创建测试。我正在使用生成的测试项目模板,该模板包含许多用于应用和验证代码修复的预定义方法。
但是,我的分析仪的代码修复程序会将null
替换为default
。仅在C#7.1中添加了默认文字,但是生成的测试帮助程序方法创建的默认项目使用C#7.0,因此我的测试始终会失败。我不想将分析仪更改为使用default(<type>)
(实际上,在某些情况下分析仪的类型未知)。
这是生成的方法如何通过项目创建新的工作空间:
var solution = new AdhocWorkspace()
.CurrentSolution
.AddProject(projectId, TestProjectName, TestProjectName, language)
.AddMetadataReference(projectId, CorlibReference)
.AddMetadataReference(projectId, SystemCoreReference)
.AddMetadataReference(projectId, CSharpSymbolsReference)
.AddMetadataReference(projectId, CodeAnalysisReference);
我不知道如何在此处指定.NET目标框架版本。在.csproj文件中,我们添加以下标记:
<TargetFramework>net472</TargetFramework>
如何使用Roslyn代码分析器执行相同的操作?
您需要添加自定义解析选项以选择其他语言版本。 WithProjectParseOptions
应该做您想要的。
var solution = new AdhocWorkspace()
.CurrentSolution
.AddProject(projectId, TestProjectName, TestProjectName, language)
.AddMetadataReference(projectId, CorlibReference)
.AddMetadataReference(projectId, SystemCoreReference)
.AddMetadataReference(projectId, CSharpSymbolsReference)
.AddMetadataReference(projectId, CodeAnalysisReference)
.WithProjectParseOptions(projectId, new CSharpParseOptions(LanguageVersion.CSharp7_1));