Написание собственного генератора кода для Dotnet Core
Я пытаюсь написать собственный генератор кода для ядра dotnet, но пока что добился небольшого успеха из-за ограниченной документации.
Немного побродил по исходному коду CodeGeneration, узнал, как запускать генераторы из командной строки и как он работает внутри.
Поскольку генераторы, доступные в ядре dotnet, не удовлетворят мои потребности, я попытался написать свой собственный CodeGenerator, но, похоже, он не может вызвать его с помощью команды «dotnet aspnet-codegenerator». Ниже приведен мой собственный генератор кода (в настоящее время не имеет реализации - моя цель - иметь возможность вызвать его из dotnet cli и в итоге получить исключение),
namespace TestWebApp.CodeGenerator
{
[Alias("test")]
public class TestCodeGenerator : ICodeGenerator
{
public async Task GenerateCode(TestCodeGeneratorModel model)
{
await Task.CompletedTask;
throw new NotImplementedException();
}
}
public class TestCodeGeneratorModel
{
[Option(Name = "controllerName", ShortName = "name", Description = "Name of the controller")]
public string ControllerName { get; set; }
[Option(Name = "readWriteActions", ShortName = "actions", Description = "Specify this switch to generate Controller with read/write actions when a Model class is not used")]
public bool GenerateReadWriteActions { get; set; }
}
}
Ниже показано, как я пытаюсь вызвать генератор кода,
dotnet aspnet-codegenerator -p . TestCodeGenerator TestController -m TestWebApp.Models.TestModel
или же
dotnet aspnet-codegenerator -p . test TestController -m TestWebApp.Models.TestModel
Это, однако, похоже, не работает и жалуется на невозможность найти генератор нестандартного кода. Смотрите сообщение об ошибке ниже,
Finding the generator 'TestCodeGenerator'...
No code generators found with the name 'TestCodeGenerator'
at Microsoft.VisualStudio.Web.CodeGeneration.CodeGeneratorsLocator.GetCodeGenerator(String codeGeneratorName)
at Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(String[] args)
RunTime 00:00:06.23
Что мне не хватает или какие изменения я должен сделать, чтобы CogeGenerator поднял мой пользовательский класс?
Репро:Github