Escrevendo um gerador de código personalizado para o Dotnet Core
Estou tentando escrever um gerador de código personalizado para o núcleo dotnet, mas até agora tive pouco sucesso com a documentação limitada.
Vasculhou um pouco o código fonte do CodeGeneration, descobriu como acionar os geradores a partir da linha de comando e como ele funciona internamente.
Como os geradores disponíveis no núcleo do dotnet não seriam suficientes para minhas necessidades, tentei escrever meu próprio CodeGenerator, mas não parece capaz de invocá-lo através do comando "dotnet aspnet-codegenerator". Abaixo está meu gerador de código personalizado (atualmente não tem implementação - meu objetivo é poder acionar isso do dotnet cli e acabar com a exceção),
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; }
}
}
Abaixo está como eu estou tentando chamar o gerador de código,
dotnet aspnet-codegenerator -p . TestCodeGenerator TestController -m TestWebApp.Models.TestModel
ou
dotnet aspnet-codegenerator -p . test TestController -m TestWebApp.Models.TestModel
Porém, isso parece não funcionar e reclama de não conseguir localizar o gerador de código personalizado. Veja a mensagem de erro abaixo,
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
O que estou perdendo ou que alterações devo fazer para que o CogeGenerator pegue minha classe personalizada?
Repro:Github