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
相关产品推荐
相关产品推荐

