Я пытаюсь написать собственный генератор кода для ядра dotnet, но пока не имел большого успеха с ограниченной документацией.Написание пользовательского генератора кода для Dotnet Core
Немного поработал с исходным кодом CodeGeneration, выяснил, как запускать генераторы из командной строки и как она работает внутри.
Поскольку генераторы, доступные в ядре дотовой сети, не удовлетворяют моим потребностям, я попытался написать свой собственный CodeGenerator, но, похоже, не смог вызвать его через команду «dotnet aspnet-codegenerator». Ниже мой пользовательский генератор кода (в настоящее время не имеет реализации - моя цель состоит в том, чтобы иметь возможность запускать это из Dotnet кли и в конечном итоге, за исключением),
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
этот вопрос о том, как написать код поколения erator, используя существующие объекты в aspnet, но я хочу написать исполняемый файл, который выполняется в dotnet cli: например. dotnet mygenerator arg0 arg1, могу ли я использовать это решение? –
@ H.Herzl Это решение делает именно то, что вы хотите. Вы можете управлять параметрами, обновляя TestCodeGeneratorModel (доступный в вопросе), представляя свои пользовательские свойства и украшая их атрибутом [Option]. Кроме того, почему вы хотите ввести новую команду cli, вы пропустите многие функции, предлагаемые aspnet-codegenerator. –
У меня есть код генерации кода как пакет самородок, и я хочу разрешить выполнение из командной строки после его установки, имеет смысл? –