在 NuGet 中包含控制台应用程序的最佳实践

2023-12-10

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

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

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

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

不管怎样,我想知道控制台exe在NuGet的文件结构中属于哪里。从历史上看,我一直把它放在tools\net462但关于tools文件夹上这一页让我没有安全感:

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

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


有一个解决方案似乎适合您的需求。您可以为以下命令创建命令行扩展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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 NuGet 中包含控制台应用程序的最佳实践 的相关文章

  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 将 ARGB 拆分为字节值

    我有一个 ARGB 值存储为 int 类型 它是通过调用 ToArgb 来存储的 我现在想要来自 int 值的各个颜色通道的字节值 例如 int mycolor 16744448 byte r g b a GetBytesFromColor
  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • C语言实现延时函数

    我想使用空循环实现延迟函数 但是完成一次循环所需的时间取决于编译器和机器 我希望我的程序自行确定时间并将程序延迟指定的时间 谁能给我任何想法如何做到这一点 注意 有一个名为delay 的函数可以将系统暂停指定的毫秒 是否可以在不使用此功能的
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • Cookie 在 ASP.net 中失去价值

    我有以下设置 cookie 的代码 string locale DropDownList this LoginUser FindControl locale SelectedValue HttpCookie cookie new HttpC
  • FFplay成功移入我的Winform中,如何设置它无边框?

    用这个代码 在 C 应用程序中显示 tcp 视频流 来自 FFPLAY FFMPEG https stackoverflow com questions 14201894 show a tcp video stream from ffpla
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 将旧的 Unity 代码升级到 Unity 5

    在触发按钮上播放动画的代码似乎不起作用 我在 Youtube 上看到了一个视频 内容很简单animation Play 它可以在该视频上运行 但我无法让它在我的计算机上运行 我做错了什么还是团结改变了它 请帮助我在网上找不到解决方案 所有
  • 当分配返回 0 时,具有空异常规范的运算符 new 调用构造函数

    我有以下声明 void operator new size t s PersistentMemory m throw return m gt allocatePersistentMemory s 我正在测试启动时的内存耗尽 这会导致m gt
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • C++ 模板参数数量错误(2,应该是 1)

    我使用 C 并行快速排序程序进行了测试 如下所示 首先使用列表作为容器 然后我转移到通用容器类型 但它报告了标题错误 可以帮忙解决这个问题吗 include
  • C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误

    我有这个 它不会从 Visual Studio 编译错误 致命错误 C1017 无效的整数常量表达式 我该怎么做 template
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 小数精度

    我使用小数类型进行高精度计算 货币 但我今天遇到了这个简单的划分 1 1 37 这应该再次得到 37 http www wolframalpha com input i 1 2F 281 2F37 29 http www wolframal
  • 从其对象获取结构体字段的名称和类型

    例如 我有一个类似这样的结构 struct Test int i float f char ch 10 我有一个该结构的对象 例如 Test obj 现在 我想以编程方式获取字段名称和类型obj 是否可以 顺便说一句 这是 C 你正在要求C

随机推荐

  • Firefox 不信任自签名证书

    我正在尝试将我的计算机配置为信任用于测试网站的自签名证书 但是我在使用 Firefox 时遇到了问题 Chrome 和 IE 都可以使用 我已经做了以下事情 使用 openssl 创建 2048 位 pem rsa 密钥和 crt 从密钥和
  • Swift 中的 NSData 到 [Uint8]

    我在 Swift 中找不到这个问题的解决方案 它们都是 Objective C 并且它们处理我认为 Swift 中不存在相同形式的指针 有什么办法可以转换aNSData对象转换为字节数组 格式为 Uint8 在斯威夫特 如果您以稍微复杂的方
  • 如何在输入[type =“number”]上使用模式?

    我希望默认值为 0 如果它大于 0 则重新着色输入 使用 valid 难道我做错了什么 谷歌浏览器有错吗 还是HTML5规范 我想在没有JS的情况下解决这个问题 valid background green p This should no
  • Spring Boot JPA 应用程序中的时区问题

    我在 spring boot jpa 应用程序中面临日期时间问题 例如 在我的数据库中我有一列created on其中包含2019 07 11 09 30 00日期 当我获取这条记录时 JPA 会将其转换为 UTC 表示日期2019 07
  • Azure IoT 中心中的设备反欺骗如何工作?

    来自Azure开发指南https azure microsoft com en us documentation articles iot hub devguide 有一小节 如下图 讲的是设备防欺骗 我不清楚 它说 IoT 中心用属性标记
  • 在 asp.net WEB API 中实现 OpenID connect 身份验证

    这是项目结构 这是访问令牌我正在进入我的 Angular 客户端应用程序 nbf 1529181048 exp 1529184648 iss https localhost 44381 aud https localhost 44381 r
  • PHP - 从不同服务器连接到mysql数据库

    我正在尝试从另一台服务器连接到托管数据库的 mysql 数据库 但出现错误 我猜这可能与远程权限有关 这是我可以改变的事情还是我需要让我的托管公司来做这件事 Can t connect to MySQL server on mysql4 r
  • 如何在 Angular 7 中使用路由器导航进行滚动?

    我的侧边栏导航组件sidebar component html是这样的
  • FireBaseUI Auth - 如何知道帐户是来自新注册还是现有用户?

    我在用用于身份验证的 firebaseUI 它本质上是打开一个外部活动并将用户登录到 firebase 并在 onActivityResult 中向开发人员发送回调 它工作得很好 问题是我需要知道用户是新注册用户还是现有用户 是否有任何类型
  • 图例未在 python 中用无条直方图显示

    我正在尝试使用 histplot 函数在 seaborn 中绘制 kde 图 然后按以下方式删除直方图的条形 请参阅已接受答案的最后一部分 here fig ax plt subplots sns histplot data kde Tru
  • 如何在 CKeditor 中使用
    代替

    2017 年是 HTML5 的时代 在 HTML5 中 换行符是 br NOT br 但终其一生 我无法让 CKeditor 放弃 br 有利于 br 不正确的 br 给我带来了各种各样的问题 他们之中 代码验证失败 在 Firefox 中
  • 当“direction”设置为“rtl”时需要使用正确的“text-overflow”

    我需要将 放在文本前面 并在填充 div 时仅显示文本的最后一部分 正常时什么都不做 span class file upload status style max width 200px C fakepath 996571 1398802
  • 将变量设置为等于不带括号的函数? [复制]

    这个问题在这里已经有答案了 我正在学习 AJAX 教程 制作视频的人做了一些奇怪的事情 至少我以前没见过 他们将对象属性设置为等于函数名称 但没有熟悉的 后来他继续定义了这个函数 下面提供了代码以供参考 无论如何 设置等于不带参数的函数意味
  • ChartJS - 查找平移内的最小和最大标签(缩放时)

    我有一个这样的图表 现在 当我缩放时 我需要找到平移内的最小和最大标签 例如 最小值是2018 07 16 最大值为2018 11 3 For panning 我正在使用这个属性 pan enabled true mode x onPanC
  • 如何在表中嵌套表?

    我见过类似的主题 但不适合我的具体情况 我需要在表中嵌套一个表 它将占用几个单元格 但是当我尝试嵌套一个表时 它会同时删除周围的表 我附上了一张图片 说明它应该如何处理我的代码 而我的代码就是它当前的样子 有人可以解释这是如何完成的吗 非常
  • kendo ui dropdownlist-如何进行手动级联?

    所以我目前正在尝试调整以前的一些代码以与动态下拉列表一起使用 问题似乎是cascadeFrom属性只需要一个id 所以我需要使用另一种选择 这是我的代码 fieldsDiv html dynForms dynFormFields var a
  • 需要转置 pandas 数据框

    我有一个看起来像这样的系列 col1 id 0 a 10 1 b 20 2 c 30 3 b 10 4 d 10 5 a 30 6 e 40 我想要的输出是这样的 a b c d e 10 1 1 0 1 0 20 0 1 0 0 0 30
  • Azure Functions - 值不能为空。 (参数“连接字符串”)

    我试图设置简单的 Azure 函数来读取 XML 流并将其同步回数据库 我的计划是使用时间触发器每天执行该函数一次 然而 事情看起来并不好 即使我不使用数据库 我也会收到以下错误 Error Executed Functions
  • 没有为类型“Object?”定义运算符“[]”功能()'。尝试定义运算符“[]”

    我最近启动了一个 flutter 项目 并将一些旧的 firebase 代码迁移到新的项目 然后我更新了 firebase 并修复了大部分错误 直到这个错误困扰了我 final firestore FirebaseFirestore ins
  • 在 NuGet 中包含控制台应用程序的最佳实践

    我正在开发一个开源库 它主要由一个针对 NET Standard 2 0 的类库项目组成 最重要的是 我还实现了一个控制台应用程序 它是该库的 CLI 控制台项目 由于历史原因 仅针对 NET Framework 4 6 2 现在我想知道为