PackageReference 版本控制通配符 csproj

The*_*hud 6 azure-devops azure-pipelines-build-task azure-pipelines azure-pipelines-release-pipeline packagereference

我的 NetStandard 项目中有以下内容

<ItemGroup>
<PackageReference Include="MyReference" Version="1.0.*" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

请指教。

为什么在 CI 构建期间使用通配符会失败,表明它找不到包?

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

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

Jay*_*ran 2

根据官方文档

使用 PackageReference 格式时,NuGet 还支持对数字的 Major、Minor、Patch 和预发布后缀部分使用通配符 * 表示。该格式不支持通配符 packages.config

对于你的问题

packages.config始终为项目文件、文件和文件中的包依赖项指定版本或版本范围.nuspec。如果没有版本或版本范围,NuGet 2.8.x及更早版本在解析依赖项时会选择最新的可用包版本,而NuGet 3.x及更高版本会选择最低的包版本。指定版本或版本范围可以避免这种不确定性。

  • 您好,是的 - 我已阅读此文档。我不确定我是否错过了什么,但我不太确定这对我有什么帮助?我在 csproj 中使用 PackageReference (4认同)