【问题标题】:Azure devops: error NU1101: Unable to find package xxx. No packages exist with this id in source(s): nuget.orgAzure devops:错误 NU1101:找不到包 xxx。源中不存在具有此 ID 的包:nuget.org
【发布时间】:2019-11-02 03:10:26
【问题描述】:

我有一个要推送到私人 nuget 提要的包。然后其他一些项目引用了这些包。一切都很好,除非我指定了一个通配符,它​​只在 vs 中有效,但显然在通过 azure devops 构建恢复时无效:

这行得通:

<PackageReference Include="MyLibPackage" Version="1.0.0.114" />

但我收到unable to find package 错误:

<PackageReference Include="MyLibPackage" Version="*" />

在 azure devops 中恢复任务运行的 dockerfile 的 sn-p:

# Install the Credential Provider to configure the access
RUN wget -qO- https://raw.githubusercontent.com/Microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh | bash

# Configure the environment variables
ENV NUGET_CREDENTIALPROVIDER_SESSIONTOKENCACHE_ENABLED true
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS "{\"endpointCredentials\": [{\"endpoint\":\"$feed\", \"password\":\"$pat\"}]}"

WORKDIR /src

COPY ["MyProject/MyProject.csproj", "MyProject/"]

RUN dotnet restore -s "$feed" "MyProject/MyProject.csproj"

【问题讨论】:

  • 当指定一个明确的包版本时,恢复在 docker build 中运行,但不是针对始终最新的版本范围?
  • @JoshGust 是的,这是正确的
  • 使用通配符时这是完全构建失败吗?我知道 nuget 会并行检查所有源,但如果没有找到匹配的源,它只会失败。
  • @JoshGust 不幸的是,它找不到任何包。只有 1 个来源和一个私人图书馆,我只想要最新的。
  • 1.* 的范围是否会改变行为?

标签: docker .net-core azure-devops nuget


【解决方案1】:

Azure devops:错误 NU1101:找不到包 xxx。源中不存在具有此 ID 的包:nuget.org

我对 Docker 没有太多经验,我不确定这个问题是来自 docker 容器还是 dotnet restore 本身。

但既然你在评论中说:

除了硬版本号之外,基本上所有的都失败了。

所以,我想提供一个解决方法来解决这个问题,你可以检查它是否适合你:

由于我们必须使用硬版本号,我们可以再添加一条命令将包更新到最新版本,命令行如下:

RUN dotnet add package MyLibPackage -s "$feed"

并在项目文件所在的dockerfile中设置WORKDIR。

@Elger Mensonides,感谢 Elger 对正确命令行的贡献。

如果我们在命令行中不指定版本,它会将最新的包添加到项目中。

查看文档dotnet CLI – how to update a NuGet package and add a new NuGet package了解一些详细信息。

希望这能有所帮助。

【讨论】:

  • 谢谢,在对 Dockerfile 进行了一些调整后,它可以工作了。谢谢!虽然仍然是一种解决方法。 dotnet add语句错误,应该是RUN dotnet add package MyLibPackage -s "$feed" 并在项目文件所在的dockerfile中设置WORKDIR。
  • @ElgerMensonides,感谢您的分享。我真的是docker的新手,我可能需要学习它。我已经在我的答案中更新了它。顺便说一句,如果它有助于您解决您的问题,您可以在获得更好的解决方案之前将其作为答案,这样它可以帮助遇到相同问题的其他社区成员,我们可以存档此线程,谢谢。
  • 是的,docker 的学习曲线相当陡峭,但现在我不知道如果没有它该怎么办。我接受了它作为答案,但对此有所保留。 Nuget 是 MS 堆栈中剩下的东西之一。
猜你喜欢
  • 1970-01-01
  • 2019-09-30
  • 2020-05-19
  • 2019-08-31
  • 2020-01-20
  • 2022-01-22
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多