我正在嘗試爲dotnet核心編寫一個自定義代碼生成器,但迄今爲止僅憑藉其有限的文檔獲得了小小的成功。爲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
這個問題是關於如何寫代碼生成erator使用aspnet中的現有對象,但我想編寫一個在dotnet cli中運行的可執行文件:例如dotnet mygenerator arg0 arg1,我可以使用這個解決方案嗎? –
@ H.Herzl該解決方案完全符合你的要求。您可以通過更新TestCodeGeneratorModel(可用)來控制參數,引入您的自定義屬性,並使用[Option]屬性對其進行裝飾。另外,爲什麼你想引入一個新的cli命令,那麼你會錯過許多由aspnet-codegenerator提供的功能。 –
我有我的代碼生成代碼作爲塊包,我想允許從命令行執行一旦安裝,是否有意義? –