如何使用Nuke安装dotnet工具

7

我是Nuke的新手,正在尝试从Cake转换到Nuke。 在Cake中,我可以选择使用以下方法安装(本地)工具:

#module nuget:?package=Cake.DotNetTool.Module&version=0.3.0

并且

#tool dotnet:?package=my.package.id&version=1.0.1

我已在Nuke中尝试过这个:

[PackageExecutable(
    packageId: "my.package.id",
    packageExecutable: "mypakagedtool.exe",
    Version = "1.0.1")]
readonly Tool MyPackagedTool;

但是这会返回一个:

Assertion failed: Could not find package 'my.package.id' (1.0.1) using:
 - Project assets file 
 - NuGet packages config

我猜这不是针对dotnet工具,而是针对NuGet工具的?


http://www.nuke.build/docs/authoring-builds/cli-tools.html 的第一个注意事项。.NET 工具也不例外。 - Matthias
@Matthias 谢谢您的反馈,对于我这个新手很抱歉,但这会将工具安装在我的构建目录中吗?我真的很需要一个可行的示例。 :-) - TheRoadrunner
将<PackageDownload>包含到项目文件中确实会将包下载到~.nuget\packages\packageId\version\tools\netcoreapp2.1\any,但是作为dll,我不知道如何调用该工具。使用dotnet tool install (--global),我可以获得一个.exe文件,我可以从Nuke中作为工具调用。但是我更喜欢安装特定版本的(本地)安装。 - TheRoadrunner
当从构建中使用时,无需安装全局工具。该dll可以像任何其他可执行文件一样被调用。 - Matthias
只有当你知道如何做时,它才是容易的。也许我很蠢,但我不... - TheRoadrunner
我刚刚解释了什么?! - Matthias
2个回答

4
我办法是在build.csproj中包含以下内容:
  <ItemGroup>
    <PackageDownload Include="MyPackageId" Version="[1.0.1]" />
  </ItemGroup>

在 Build.cs 中:

[PackageExecutable("MyPackageId", "MyTool.dll")] readonly Tool MyTool;

那么就可以使用该工具:

MyTool("arguments");

......当然,nuget.config应该设置以访问软件包存储库。


我猜测我在问题中尝试的解决方案接近了解决方案,只要我意识到没有 .exe(这是 dotnet 工具安装的产品),但我 nuget.config 中使用的个人访问令牌已过期,这完全使我偏离了轨道。 - TheRoadrunner

3

Nuke Build中,你可以执行以下操作(以下示例是针对 OctopusTools):

nuke :addpackage OctopusTools

这会导致将此<ItemGroup/>元素添加到构建(Nuke)项目的.csproj文件中:

<ItemGroup>
    <PackageDownload Include="OctopusTools" Version="[9.0.0]" />
</ItemGroup>

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