【问题标题】:Create a custom CLI Tool that can be distributed with nuget创建一个可以使用 nuget 分发的自定义 CLI 工具
【发布时间】:2018-03-17 17:34:06
【问题描述】:
我编写了一个 .net 核心控制台程序,它可以生成一些代码来帮助我加快开发过程。现在我想通过 nuget 分发这个控制台程序,这样我就可以在其他项目中使用该工具,例如 Entity Framework 中的命令行工具。但是我到处阅读,那个 nuget 只用于类库。但我希望我的包能够运行,它不应该用于导入和类似的东西。显然微软是用实体框架工具做到的,所以我认为一定有办法。
谁能指出我正确的方向?
我发现了这个问题 (Best practice to include console app in NuGet),但问题是,答案是不可能的,正如您在 EF 工具中看到的那样。
【问题讨论】:
标签:
c#
.net
.net-core
nuget
【解决方案1】:
我找到了一个解决方案,并且已经成功在 nuget.org 上共享了控制台包
您可以为dotnet 工具创建命令行扩展。像dotnet ef 一样,您可以创建dotnet myAwesomeTool 命令。您唯一需要做的就是以下几点:
创建一个控制台应用程序并将以下代码添加到您的 .csproj
<PackageId>Company.MyAwesomeTool</PackageId>
<AssemblyName>dotnet-myAwesomeTool</AssemblyName>
<PackageType>DotnetCliTool</PackageType>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
构建解决方案,您将在 bin 文件夹中找到一个 nuget 包。这个 nuget 包可以分发,安装后可以在安装了 nuget 的项目中运行dotnet myAwesomeTool。对我来说就像一个魅力 =)
要将其安装在其他项目上,请将其添加到 csproj:
<ItemGroup>
<PackageReference Include="company.MyAwesomeTool" Version="1.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="company.MyAwesomeTool" Version="1.0.0" />
</ItemGroup>
更多信息:
https://blog.maartenballiauw.be/post/2017/04/10/extending-dotnet-cli-with-custom-tools.html