یک نکتهی تکمیلی
۲ سال قبل، چهارشنبه ۱۹ مرداد ۱۴۰۱، ساعت ۱۱:۴۵
اما هنگام پابلیش ، تو پوشه _framework هنوز حدود 200 dll قرار میگیره و دانلود اینها تو مرورگر لود را میبره بالا .
var controllers = context.Compilation .SyntaxTrees .SelectMany(syntaxTree => syntaxTree.GetRoot().DescendantNodes()) .Where(x => x is ClassDeclarationSyntax) .Cast<ClassDeclarationSyntax>() .Where(c => c.Identifier.ValueText.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)) .ToImmutableList();
public class ControllerFinder : ISyntaxReceiver { public List<ClassDeclarationSyntax> Controllers { get; } = new(); public void OnVisitSyntaxNode(SyntaxNode syntaxNode) { if (syntaxNode is ClassDeclarationSyntax controller) { if (controller.Identifier.ValueText.EndsWith("Controller")) { Controllers.Add(controller); } } } }
public void Initialize(GeneratorInitializationContext context) { context.RegisterForSyntaxNotifications(() => new ControllerFinder()); }
public void Execute(GeneratorExecutionContext context) { var controllers = ((ControllerFinder) context.SyntaxReceiver)?.Controllers; // use controllers to do work... }
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <IsRoslynComponent>true</IsRoslynComponent>
#if DEBUG if (!Debugger.IsAttached) { Debugger.Launch(); } #endif