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

问题描述 投票:0回答:1

我将为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代码分析器执行相同的操作?

c# roslyn roslyn-code-analysis target-framework
1个回答
0
投票

您需要添加自定义解析选项以选择其他语言版本。 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));
© www.soinside.com 2019 - 2024. All rights reserved.