如何为新创建的工作区指定 TargetFramework?
How to specify TargetFramework for a newly created Workspace?
我即将为我的 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));
我即将为我的 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));