【问题标题】:How to install dotnet tool with nuke如何使用 nuke 安装 dotnet 工具
【发布时间】:2020-06-29 15:49:15
【问题描述】:

我是 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 工具?

【问题讨论】:

  • nuke.build/docs/authoring-builds/cli-tools.html 第一个注释。 dotnet 工具也不例外。
  • @Matthias 感谢您的反馈,也很抱歉成为菜鸟,但这是否会将该工具安装在我的构建目录中?我真的很感激一个工作样本。 :-)
  • 在项目文件中包含 确实将包下载到 ~\.nuget\packages\packageId\version\tools\netcoreapp2.1\any,但作为 dll 我不知道如何调用该工具。使用 dotnet tool install (--global) 我得到一个 .exe,我可以从 Nuke 调用它作为工具。但我更喜欢特定版本的(本地)安装。
  • 从构建中使用时无需安装全局工具。 dll 可以像任何其他可执行文件一样被调用。
  • 只有当您知道如何操作时,它才会变得简单。也许我是个白痴,但我不是

标签: nuke-build


【解决方案1】:

我使它工作的方式是将其包含在 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 tool install 的产品),但使用了个人访问令牌在我的 nuget.config 中已过期,这完全让我出轨。
【解决方案2】:

Nuke Build 中,您可以执行以下操作(此示例适用于OctopusTools):

nuke :addpackage OctopusTools

这会导致这个 &lt;ItemGroup/&gt; 元素被添加到 Build (Nuke) 项目的 .csproj 中:

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

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2019-01-29
    • 2019-02-27
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2020-06-17
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多