我有一个推送到私有nuget提要的程序包。然后其他一些项目引用了这些软件包。一切都很好,除非我指定了通配符,否则只能在vs中使用,但通过天蓝色的devops版本进行恢复时显然不起作用:
这有效:
<PackageReference Include="MyLibPackage" Version="1.0.0.114" />
但是我收到unable to find package
错误:
<PackageReference Include="MyLibPackage" Version="*" />
运行azure devops中的还原任务的dockerfile片段:
# 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"
答案 0 :(得分:2)
Azure devops:错误NU1101:无法找到软件包xxx。源中不存在具有此ID的软件包:nuget.org
我对Docker经验不足,不确定此问题是否来自Docker容器或dotnet恢复本身。
但是自从您在评论中说:
除硬版本号外,基本上所有其他操作都会失败。
因此,我想提供一种解决方法来解决此问题,您可以检查它是否适合您:
由于我们必须使用硬版本号,因此我们可以再添加一条命令以将软件包更新为最新版本,如下所示:
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以获得一些详细信息。
希望这会有所帮助。
答案 1 :(得分:0)
我建议使用正常的问题解决技术,并消除不必要的并发症,以找出问题的根本原因。在您的情况下,将Docker排除在外,并使用Azure DevOps内置功能进行还原和构建。但是,在这种情况下,这可能会掩盖问题,因为NuGet任务允许您指定源供稿,该源不出现在任何nuget.config文件中(该任务将使用源创建一个临时nuget.config文件)。如果您无法确定,我不喜欢使用Docker进行构建。这是一项用于运行服务的出色技术,但是我看到太多的人在无法使构建工具在容器中正常工作的情况下损失了数小时或数天的生产力。
无论如何,给定错误消息中给出的源列表仅包含nuget.org,这意味着您的存储库中没有列出私有供稿的nuget.config文件。如果使用Visual Studio的工具->选项-> nuget->源添加了私有供稿,则只能修改用户配置文件nuget.config。这意味着它只能在您的计算机上运行,不能在其他计算机上运行。您需要创建一个nuget.config并将其提交到您的存储库中,以便CI机器能够使用它。使用dotnet new nugetconfig
将为您提供一个很好的模板。