C# 如何为新创建的工作区指定TargetFramework?
我将为我的Roslyn代码分析器及其代码修复程序创建测试。我正在使用生成的测试项目模板,该模板包含许多预定义的方法来应用和验证代码修复 但是,我的分析器的代码修复程序会将C# 如何为新创建的工作区指定TargetFramework?,c#,roslyn,roslyn-code-analysis,target-framework,C#,Roslyn,Roslyn Code Analysis,Target Framework,我将为我的Roslyn代码分析器及其代码修复程序创建测试。我正在使用生成的测试项目模板,该模板包含许多预定义的方法来应用和验证代码修复 但是,我的分析器的代码修复程序会将null替换为default。默认文字仅在C#7.1中添加,但生成的测试助手方法创建的默认项目使用C#7.0,因此我的测试总是失败。我不想将我的分析器更改为使用default()(实际上,有时分析器不知道该类型) 这是生成的方法如何使用项目创建新工作区: var solution = new AdhocWorkspace()
null
替换为default
。默认文字仅在C#7.1中添加,但生成的测试助手方法创建的默认项目使用C#7.0,因此我的测试总是失败。我不想将我的分析器更改为使用default()
(实际上,有时分析器不知道该类型)
这是生成的方法如何使用项目创建新工作区:
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>
net472
如何对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));