通过NuGet传递命令行工具,以便在Visual Studio的后期构建事件中使用。

11

我开发了一个命令行实用程序,它接受.NET程序集作为输入,并生成XML作为另一产品使用的输出。

理想情况下,我希望:

  • 通过NuGet作为解决方案级包进行交付
  • 在项目级别的后期构建事件中可访问
  • 困扰我的问题:可以通过指定命令名称而不是路径访问该后期构建事件。
    • MyTool.exe /i $(TargetPath) 而不是 ..\packages\ToolName-1.0.0.0\tools\MyTool.exe /i $(TargetPath)

前两个事情我已经做到了,像上面的后期构建事件命令也可以正常工作,但前提是我必须先打开“程序包管理器控制台”(即使我没有输入任何命令,只需打开它)-看起来它在启动时正在执行某些与路径相关的操作,以便我不必指定 ..\packages\ToolName-1.0.0.0\tools\MyTool.exe 的完整相对路径。

是否可能使用 Init.ps1 脚本(或其他机制)来调整路径,以便在编写后期构建事件时不需要指定工具的完整相对路径,或以其他方式自动包含运行工具为后期构建步骤?

注意:我知道NuGet可能不是传递此类工具的理想方式,但它很方便。


这个问题非常优秀。我很惊讶NuGet还没有这个功能,因为它已经是MSBuild的一部分了。 - Christophe Lionet
3个回答

2
对于看到这篇文章的人们:
我见过人们使用 NuGet 包来实现这个,例如看看 nswag.msbuild: https://github.com/RicoSuter/NSwag/wiki/NSwag.MSBuild 简而言之,NuGet 包包含了该工具作为命令行实用程序的可执行文件。它还定义了一些构建属性,定义了指向该工具的路径(类似于 /packages/myToolNugetPkg/mytool.exe)。然后您可以在 MSBuild 任务中使用此属性。
另外,.NET Core 支持“工具”,这正是您所需要的:

https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools


1

Chocolatey(技术上符合使用NuGet)具有非常酷的神奇“shimming”功能。

简而言之,您包中的任何可执行文件都将自动在PATH上可用。它非常酷。


-2

如果安装软件包的人使用它作为他们的后构建命令(这样我就可以更新工具的文档以反映这一点),那会很有帮助,但不会将工具文件夹添加到原始目录中。请注意,我正在编写软件包而不是使用它,因此目标是作为软件包编写者做些什么,以使在后构建步骤中尽可能轻松地使用该软件包。 - Pablissimo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接