Как указать TargetFramework для вновь созданной рабочей области? - PullRequest
0 голосов
/ 21 октября 2019

Я собираюсь создать тесты для моего анализатора кода 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?

1 Ответ

0 голосов
/ 08 ноября 2019

Вам нужно добавить пользовательские параметры разбора, чтобы выбрать другую языковую версию. 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...