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

Azure DevOps发布.NET7 WebAPI时Nerdbank.GitVersioning未覆盖默认版本号

解决Azure Pipelines中Nerdbank.GitVersioning未更新AssemblyVersion的问题

针对你遇到的本地版本生成正常,但Azure Pipelines构建Docker容器时AssemblyVersion未被覆盖的问题,可按以下步骤排查修复:


1. 确保Docker构建环境中集成nbgv逻辑

Docker构建是隔离环境,本地的nbgv配置不会自动复用,需要在Dockerfile的构建阶段显式集成nbgv:

# 构建阶段使用.NET 7 SDK镜像
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src

# 复制项目文件并还原依赖
COPY *.sln .
COPY YourWebApi/*.csproj YourWebApi/
RUN dotnet restore

# 安装nbgv工具并计算版本
RUN dotnet tool install -g Nerdbank.GitVersioning
ENV PATH="$PATH:/root/.dotnet/tools"
COPY . .
RUN nbgv cloud

# 执行构建(nbgv会自动将版本注入Assembly属性)
RUN dotnet build "YourWebApi/YourWebApi.csproj" -c Release -o /app/build

# 发布阶段
FROM build AS publish
RUN dotnet publish "YourWebApi/YourWebApi.csproj" -c Release -o /app/publish /p:UseAppHost=false

# 运行阶段
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YourWebApi.dll"]

2. 若使用Pipeline传递版本参数,确保MSBuild正确接收

如果你坚持通过--build-arg VERSION=$(CalculatedVersion)传递版本,需完成两处配置:

(1)Dockerfile中传递参数给MSBuild

ARG VERSION
RUN dotnet build "YourWebApi.csproj" -c Release -o /app/build \
    /p:AssemblyVersion=$VERSION \
    /p:AssemblyInformationalVersion=$VERSION

(2)项目csproj中移除硬编码版本,改为参数控制

在WebApi项目的.csproj文件中添加如下配置,让MSBuild优先使用传入的版本参数:

<PropertyGroup>
  <AssemblyVersion>$(VERSION)</AssemblyVersion>
  <AssemblyInformationalVersion>$(VERSION)</AssemblyInformationalVersion>
</PropertyGroup>

3. 检查.dockerignore是否排除了关键文件

nbgv cloud会生成obj/version.json文件,MSBuild依赖此文件注入版本。确保你的.dockerignore没有排除obj目录,或至少保留该文件:

# 不要全量排除obj,可调整为:
obj/**
!obj/version.json

4. 确保Pipeline代理机器安装nbgv工具

Pipeline的虚拟机镜像默认不会预装nbgv,需在执行nbgv cloud前先安装:

- script: dotnet tool install -g Nerdbank.GitVersioning
  displayName: Install NBGV tool
- script: nbgv cloud
  displayName: Set Version

5. 验证版本文件生成情况

可在Pipeline中添加步骤,检查nbgv是否成功生成版本文件:

- script: cat obj/version.json
  displayName: Check generated version metadata

若文件存在且内容正确,说明版本计算正常,问题出在Docker构建未读取该文件;若文件不存在,需排查nbgv工具安装或Git历史拉取是否完整(你已设置fetchDepth: 0,此配置正确)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:23:33