PackageReference 版本控制通配符 csproj

问题描述 投票:0回答:2

我的 NetStandard 项目中有以下内容

<ItemGroup>
<PackageReference Include="MyReference" Version="1.0.*" />
</ItemGroup>

当我将其更改为使用通配符(而不是 1.0.1)时,我在依赖项切换上看到一个感叹号,然后是 NuGet 切换,当然还有包本身。

当我签入时,CI 构建在另一端也失败了,给我

无法找到包 MyReference。源中不存在具有此 ID 的包:Microsoft Visual Studio Offline Packages、nuget.org

使用不带通配符的实际版本(1.0.1)时,上述所有问题都会消失,但我想确保 .NET Core 恢复任务始终恢复到最新的包,我希望一个简单的通配符就可以了它。

注意 - 我正在使用自己的私有 NuGet 存储库(包管理扩展)

请指教。

为什么在 CI 构建过程中使用通配符会失败,提示找不到包?

假设我已将project1 部署到我自己的NuGet 存储库中。 Project2 依赖于 Project1,而 Project1 已作为 NuGet 包添加到 Project2。 Project1 包驻留在我自己的存储库中,没有问题也没有错误。

当我使用通配符并在本地构建时,它可以工作,并恢复最新版本。当我签入代码更改(在 .csproj 中保留通配符)时 - CI 构建失败并出现上述错误消息。

azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-build-task packagereference
2个回答
2
投票

根据官方文档

使用 PackageReference 格式时,NuGet 还支持使用 通配符符号 *,用于主要、次要、补丁和预发布后缀 数字的一部分。不支持通配符

packages.config
格式。

对于你的问题

始终为包依赖项指定版本或版本范围 项目文件、

packages.config
文件和
.nuspec
文件。没有 版本或版本范围,NuGet 2.8.x 及更早版本选择 最新 解决依赖关系时可用的包版本,而NuGet 3.x及更高版本选择最低的软件包版本。指定版本或版本范围可以避免这种不确定性。


0
投票

Per Microsoft Dockers for package reverence 你所拥有的应该有效,并且目前正在 dotnet6 项目中为我工作。

<PackageReference Include="MyReference" Version="1.0.*" />

这也应该有效
<PackageReference Include="MyReference" Version="[1.0, 1.1)" />

或者如果您正在起诉语义版本控制并且有信心。
<PackageReference Include="MyReference" Version="[1, 2)" />

© www.soinside.com 2019 - 2024. All rights reserved.