1

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

但是,我的分析器的代码修复程序将替换nulldefault. 默认文字仅在 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 代码分析器做同样的事情?

4

1 回答 1

2

您需要添加自定义解析选项以选择不同的语言版本。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));
于 2019-11-08T07:15:24.940 回答