C# 如何为新创建的工作区指定TargetFramework?

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()

我将为我的Roslyn代码分析器及其代码修复程序创建测试。我正在使用生成的测试项目模板,该模板包含许多预定义的方法来应用和验证代码修复

但是,我的分析器的代码修复程序会将
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));