You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#构建场景下如何获取使用浮动版本的包的实际具体版本

浮动NuGet包实际使用版本获取方案

方案1:读取还原生成的资产文件

执行dotnet restore完成包还原后,项目obj目录下会生成project.assets.json文件,该文件完整记录了所有NuGet包实际解析后的版本号,你可以直接解析该JSON文件提取目标包的对应版本,CI环境中只要先执行还原步骤即可正常读取该文件。
如果需要更易读的结构化版本记录,可以在项目csproj文件中开启锁定文件功能:

<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>

开启后还原会在项目根目录生成packages.lock.json,里面也会清晰记录所有包的实际解析版本。

方案2:通过dotnet CLI命令直接查询

使用官方CLI命令即可直接输出所有已解析的包版本:

dotnet list package --include-transitive

你可以结合Shell/ PowerShell的过滤命令直接提取目标包版本,示例如下:

# PowerShell 环境
dotnet list package | Where-Object { $_ -match 'SomePackage' }
# Bash 环境
dotnet list package | grep 'SomePackage'

该命令无额外依赖,只要CI环境安装了对应版本的.NET SDK即可运行。

方案3:在构建流程中自动提取版本

你可以在csproj中添加自定义MSBuild目标,在还原完成后自动抓取目标包版本,可直接输出到构建日志,也可以写入到版本文件、产出物元数据中,示例配置:

<Target Name="CaptureSomePackageVersion" AfterTargets="Restore">
  <ItemGroup>
    <MatchedPackage Include="@(PackageReference)" Condition="'%(Identity)' == 'SomePackage'" />
  </ItemGroup>
  <!-- 输出到构建日志 -->
  <Message Text="SomePackage实际使用版本:%(MatchedPackage.Version)" Importance="high" />
  <!-- 可自行添加WriteLinesToFile等任务将版本写入到指定文件,用于后续标注产出物 -->
</Target>

该方案完全集成在.NET构建流程中,无需引入额外工具。

内容的提问来源于stack exchange,提问作者user2837144

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:54:09