2016-11-29 8 views
2

Я создал анализатор Roslyn с использованием шаблонов VS 2015. У меня все работает, включая модульные тесты, учитывая, что диагностика включена по умолчанию.Включение диагностики Roslyn при программном анализе Roslyn

Если установить параметр на isEnabledByDefaultDiagnosticDescriptor к false я могу получить все, что работает в Visual Studio, позволяя диагностику с помощью .ruleset файла. Однако, как только диагностика отключена по умолчанию, модульные тесты больше не сообщают о своих результатах.

Как включить эту диагностику по умолчанию во время модульных тестов? Я готов изменить способ выполнения модульных тестов с помощью Roslyn Compilation/Analyzer/Diagnostic/etc. результаты, но я не нашел способ указать параметры, учитывая отсутствие документации, которую мне удалось очистить из разных источников.

ответ

3

Вам необходимо переопределить диагностическую суровость, подобный файл правил, CompilationOptions.SpecificDiagnosticOptions позволяет для этого (компиляция имеет Options, что может переопределить что-то вроде этого).

Я успешно изменил мой анализатор быть отключены, и переопределить DiagnosticVerifier.HelperHelpers), в моем любимом проекте (см совершить 8dfc02c за то, как я сделал это). В основном, это сводится к тому:

private static Compilation OverrideDiagnosticSeverity(
    Compilation compilation, 
    string diagnosticId, 
    ReportDiagnostic reportDiagnostic) 
{ 
    var compilationOptions = compilation.Options; 
    var specificDiagnosticOptions = compilationOptions.SpecificDiagnosticOptions; 

    specificDiagnosticOptions = specificDiagnosticOptions.Add(diagnosticId, reportDiagnostic); 
    var options = compilationOptions.WithSpecificDiagnosticOptions(specificDiagnosticOptions); 

    return compilation.WithOptions(options); 
} 

Вы можете добавить флаг VerifyCSharpDiagnostic сделать это по требованию модульного тестирования.

+1

Работает отлично! Благодаря! Я был уверен, что это будет еще один слишком конкретный вопрос, не дающий никаких ответов. Настолько рад, что оказался ошибочным. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^