C# 在NuGet中包含控制台应用程序的最佳实践
我正在开发一个开源库,它主要由一个面向.NET标准2.0的类库项目组成。除此之外,我还实现了一个控制台应用程序,它是这个库的CLI。控制台项目(出于历史原因)仅针对.NET Framework 4.6.2 现在我想知道,为了让这个控制台应用程序能够在社区中使用,最好的做法是什么。在最广泛的层面上,我看到两种可能性:C# 在NuGet中包含控制台应用程序的最佳实践,c#,nuget,console-application,.net-standard,multi-targeting,C#,Nuget,Console Application,.net Standard,Multi Targeting,我正在开发一个开源库,它主要由一个面向.NET标准2.0的类库项目组成。除此之外,我还实现了一个控制台应用程序,它是这个库的CLI。控制台项目(出于历史原因)仅针对.NET Framework 4.6.2 现在我想知道,为了让这个控制台应用程序能够在社区中使用,最好的做法是什么。在最广泛的层面上,我看到两种可能性: 将console应用程序作为单独的NuGet发布 将console应用程序与类库放在同一个NuGet中,因为它只是一个次要的附加组件,不能证明自己的包是正确的 历史上,我一直在使用第
tools\net462
下,但是一条关于tools
文件夹的评论让我不安全:
可从Package Manager控制台访问Powershell脚本和程序
我不一定想象有人从PackageManager控制台使用CLI。更确切地说,它将被用作独立的exe,在某个shell中。一般来说,(请注意“如果您的库…”这句话)
而是用于将命令行和GUI应用部署到Windows。它有一个CLI,可用于轻松安装和更新应用程序。它不是NuGet
,而是使用类似的方法打包和部署应用程序
还有包管理器针对其他平台:
NuGet
,而是使用类似的方法打包和部署应用程序
还有包管理器针对其他平台:
有一个解决方案似乎适合你的需要。您可以为
dotnet
工具创建命令行扩展。与dotnet ef
类似,您可以创建dotnet myAwesomeTool
命令。您只需执行以下操作:
创建控制台应用程序并将以下代码添加到.csproj
<PackageId>Company.MyAwesomeTool</PackageId>
<AssemblyName>dotnet-myAwesomeTool</AssemblyName>
<PackageType>DotnetCliTool</PackageType>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
有关更多信息:
有一种解决方案似乎适合您的需要。您可以为
dotnet
工具创建命令行扩展。与dotnet ef
类似,您可以创建dotnet myAwesomeTool
命令。您只需执行以下操作:
创建控制台应用程序并将以下代码添加到.csproj
<PackageId>Company.MyAwesomeTool</PackageId>
<AssemblyName>dotnet-myAwesomeTool</AssemblyName>
<PackageType>DotnetCliTool</PackageType>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
有关更多信息:
很有趣。然而,访问这个页面,我读到的第一件事是:“巧克力-Windows软件包管理器”。我想这不包括Linux/Mac?这是我将.NET标准作为目标的首要原因。@Dejan您应该使用这些平台上存在的任何包管理器…apt get、brew、rpm或其他任何东西。NuGet应该只用于提供类库。@mason:这是一个有趣的评论:“NuGet应该只用于提供类库。”如果这是真的,那么这就回答了我的问题。你能支持一下这一说法,并将其作为一个答案发布吗?@Dejan我没有任何权威人士的明确声明。人们有不同的意见。例如,除了类库之外,任何东西都不喜欢使用NuGet包(.nupkg)。我不反对在巧克力或巧克力中使用.nupkg。我担心的是,不包含类库的包会污染NuGet存储库(NuGet.org)。存储库应该只有一个用途。如果它是一个真正的“工具”NuGet,则可以创建一个CLI工具包,该工具包可以在每个项目的基础上添加。即将发布的2.2.0版CLI还将通过
dotnet安装工具
提供“全局”工具。每个项目工具的文档:有趣。然而,访问这个页面,我读到的第一件事是:“巧克力-Windows软件包管理器”。我想这不包括Linux/Mac?这是我将.NET标准作为目标的首要原因。@Dejan您应该使用这些平台上存在的任何包管理器…apt get、brew、rpm或其他任何东西。NuGet应该只用于提供类库。@mason:这是一个有趣的评论:“NuGet应该只用于提供类库。”如果这是真的,那么这就回答了我的问题。你能支持一下这一说法,并将其作为一个答案发布吗?@Dejan我没有任何权威人士的明确声明。人们有不同的意见。例如,除了类库之外,任何东西都不喜欢使用NuGet包(.nupkg)。我不反对在巧克力或巧克力中使用.nupkg。我担心的是,不包含类库的包会污染NuGet存储库(NuGet.org)。存储库应该只有一个用途。如果它是一个真正的“工具”NuGet,则可以创建一个CLI工具包,该工具包可以在每个项目的基础上添加。即将发布的2.2.0版CLI还将通过dotnet安装工具
提供“全局”工具。每个项目工具的文档:如果您构建的工具需要其他工具,那么这似乎会失败