Создание и использование анализатора Roslyn
Вы можете использовать анализаторы кода для проверки кода на наличие ошибок, нарушений правил и проблем со стилем кодирования. Как и в случае с генераторами исходных кодов, вы можете использовать существующие анализаторы или создать собственные.
Чтобы создать анализатор Roslyn в вашем IDE и затем применить его для использования в вашем проекте Unity:
В своей IDE создайте проект библиотеки классов C#, ориентированный на .NET Standard 2.0, и назовите проект
ExampleAnalyzer.Установите
Microsoft.CodeAnalysis.CsharpNuGet пакет для проекта. Ваш анализатор должен использовать Microsoft.CodeAnalysis.Csharp 4.3 работать с Unity.-
В вашем проекте IDE создайте новый файл C# и добавьте следующий код:
using System.Collections.Immutable; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Diagnostics; namespace ExampleAnalyzer { [DiagnosticAnalyzer(LanguageNames.CSharp)] public class DebugLogAnalyzer : DiagnosticAnalyzer { public const string DiagnosticId = "EX0001"; private static readonly LocalizableString Title = "Avoid using Debug.Log"; private static readonly LocalizableString MessageFormat = "Debug.Log call detected - consider removing it before shipping"; private static readonly LocalizableString Description = "Debug.Log calls can impact performance and clutter the console in production builds."; private const string Category = "Usage"; private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor( DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, description: Description); public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule); public override void Initialize(AnalysisContext context) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); context.RegisterSyntaxNodeAction(AnalyzeInvocation, SyntaxKind.InvocationExpression); } private static void AnalyzeInvocation(SyntaxNodeAnalysisContext context) { var invocation = (InvocationExpressionSyntax)context.Node; if (!(invocation.Expression is MemberAccessExpressionSyntax memberAccess)) return; // Match calls where the method name is "Log" if (memberAccess.Name.Identifier.Text != "Log") return; // Verify the symbol belongs to UnityEngine.Debug var symbolInfo = context.SemanticModel.GetSymbolInfo(memberAccess); if (!(symbolInfo.Symbol is IMethodSymbol methodSymbol)) return; var containingType = methodSymbol.ContainingType; if (containingType?.ToDisplayString() != "UnityEngine.Debug") return; var diagnostic = Diagnostic.Create(Rule, memberAccess.GetLocation()); context.ReportDiagnostic(diagnostic); } } } Создайте свой анализатор с выпуск конфигурация сборки.
В папке проекта анализатора найдите файл
bin/Release/netstandard2.0/ExampleAnalyzer.dll.Скопируйте этот файл в ваш проект Unity, в папку
Assets.В Asset Browser нажмите на файл .dll, чтобы открыть окно Плагин Inspector.
В Выберите платформы для плагина, снимите флажок Любая платформа.
В Включить платформыснимите флажок Редактор и Автономный и любые другие отмеченные платформы.
В разделе Метки активовнажмите на значок метки, чтобы открыть подменю Метки ассетов.
Создайте и назначьте новую метку под названием RoslynAnalyzer. Чтобы сделать это, введите
RoslynAnalyzerв поле ввода текста подменю Метки ассетов и нажмите Enter. Эта метка должна точно соответствовать и учитывать регистр букв. После создания метка появится в подменю Метки ассетов. Вы можете нажать на название метки в меню, чтобы назначить ее другим анализаторам.-
Чтобы проверить, работает ли анализатор, создайте в Редакторе новый скрипт MonoBehaviour со следующим кодом:
using UnityEngine; public class TestScript : MonoBehaviour { void Start() { Debug.Log("Hello world"); // Should trigger EX0001 warning } }
После того, как Unity перекомпилирует скрипты, в Консоли появляется следующее предупреждение:
TestScript.cs(8,9): warning EX0001: Debug.Log call detected - consider removing it before shipping
Дополнительные сведения о создании анализаторов Roslyn см. в документации Microsoft в разделе Учебник: написание первого анализатора и исправление кода.
Диагностика анализатора отчетов
Чтобы просмотреть информацию, такую как общее время выполнения анализаторов и генераторов источников или относительное время выполнения каждого анализатора или генератора источников, перейдите в Изменить > Настройки (macOS: Unity > Настройки) > Диагностика редактора > Ядро и включите EnableDomainReloadTimings. При включении эта информация отображается в окне консоли.