通过NuGet提供命令行工具,用于Visual Studio中的后期构建事件

时间:2013-01-04 18:23:28

标签: .net visual-studio powershell nuget

我开发了一个命令行实用程序,它将.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。

我的NuGet包是否可以使用Init.ps1脚本(或其他一些机制)来调整路径,以便在编写构建后事件时无需指定工具的完整相对路径,或者否则自动包含运行工具作为构建后步骤?

注意 - 我接受NuGet可能不是提供此类工具的理想载体,但它会很方便。

3 个答案:

答案 0 :(得分:1)

Chocolatey(在技术上有资格使用NuGet)有一个非常酷的神奇“垫片”设施。

简而言之,您的包中的任何可执行文件都将自动在PATH上提供。 It's very cool.

答案 1 :(得分:1)

只为遇到此问题的人提供

我见过人们为此使用nuget包,例如参见nswag.msbuild: https://github.com/RicoSuter/NSwag/wiki/NSwag.MSBuild

简而言之,nuget软件包将工具包含为命令行实用程序可执行文件。它还定义了一些定义此工具路径的buildprops(类似于/packages/myToolNugetPkg/mytool.exe),然后可以在msbuild任务中使用此属性。

.NET核心也支持“工具”,这正是您所需要的:

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

答案 2 :(得分:-2)

这可能会对您有所帮助 - > http://lostechies.com/joshuaflanagan/2011/06/24/how-to-use-a-tool-installed-by-nuget-in-your-build-scripts/

我在'CD'命令中使用带通配符的解决方案,所以我的postbuild看起来像这样:

CD "$(SolutionDir)packages\ToolName*\tools"
MyTool.exe