1

我正在开发一个开源库,它主要由一个面向 .NET Standard 2.0 的类库项目组成。最重要的是,我还实现了一个控制台应用程序,它是这个库的 CLI。控制台项目(出于历史原因)仅针对 .NET Framework 4.6.2。

现在我想知道为了让社区可以使用这个控制台应用程序,最佳实践是什么。在最广泛的层面上,我看到了两种可能性:

  1. 将控制台应用程序作为单独的 NuGet 交付。
  2. 在与类库相同的 NuGet 中发布控制台应用程序,因为它只是一个次要的附加组件,并不能证明自己的包是合理的。

从历史上看,我一直在使用第二种方法,但考虑到类库可以用于多目标场景,我不确定了。也许将控制台应用程序分离到自己的 NuGet 中会更干净,这样它对完整 .NET 框架的依赖就很清楚了。

无论哪种方式,我都想知道控制台 exe 在 NuGet 的文件结构中属于哪个位置。从历史上看,我一直把它放在下面,tools\net462但是关于这个页面tools上文件夹的评论让我不安全:

可从包管理器控制台访问的 Powershell 脚本和程序

我不一定想象有人使用包管理器控制台中的 CLI。相反,它会在某个外壳中用作独立的 exe。

4

3 回答 3

4

有一个似乎适合您需求的解决方案。dotnet您可以为这些工具创建命令行扩展。就像dotnet ef你可以创建一个dotnet myAwesomeTool命令一样。您唯一需要做的是以下内容:

创建一个控制台应用程序并将以下代码添加到您的 .csproj

<PackageId>Company.MyAwesomeTool</PackageId>
<AssemblyName>dotnet-myAwesomeTool</AssemblyName>
<PackageType>DotnetCliTool</PackageType>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>

构建解决方案,您将在 bin 文件夹中找到一个 nuget 包。这个 nuget 包可以分发,安装后,您可以dotnet myAwesomeTool在安装了 nuget 的项目中运行。对我来说就像一个魅力=)

要将其安装在其他项目上,请将其添加到 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

于 2018-03-17T21:29:46.753 回答
2

通常,NuGet 仅用于交付类库(请注意措辞“如果您的库...”)。

改用Chocolatey将命令行和 GUI 应用程序部署到 Windows。它有一个 CLI,可用于轻松安装和更新应用程序。它不是 NuGet,而是使用类似的方法来打包和部署应用程序。

还有针对其他平台的包管理器:

  1. apt-get(用于 Debian/Ubuntu/Mint)
  2. 酿造(适用于 MacOS)
  3. RPM(用于 Fedora/Red Hat)

注意:正如 Martin Ullrich 在评论中指出的那样,现在有一种方法可以使用 NuGet 部署构建工具 CLI,这主要用于持续集成部署场景。

于 2018-01-04T17:42:35.980 回答
0

当时间流逝时,其他解决方案就会出现......

https://docs.microsoft.com/nl-nl/dotnet/core/tools/global-tools-how-to-create

<PackAsTool>true</PackAsTool>
<ToolCommandName>botsay</ToolCommandName>
<PackageOutputPath>./nupkg</PackageOutputPath>
于 2022-02-10T08:58:57.217 回答