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

Docker构建ASP.NET应用遇NETSDK1018错误,求更优解决方案

解决Docker构建ASP.NET应用时的NETSDK1018版本字符串错误

问题背景

构建ASP.NET应用时出现以下错误:

/usr/share/dotnet/sdk/7.0.304/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.GenerateAssemblyInfo.targets(209,5): error NETSDK1018: Invalid NuGet version string: '0.0.0+main.'.  [/src/myproject.csproj]

使用的Docker镜像为:mcr.microsoft.com/dotnet/sdk:7.0.304-alpine3.18

当前已通过在.csproj中添加以下配置解决问题:

<GenerateAssemblyInfo>false</GenerateAssemblyInfo>

更优解决方法

禁用AssemblyInfo自动生成属于“一刀切”方案,更合理的做法是针对性修正版本号合法性——错误根源是0.0.0+main.违反了NuGet版本规范:版本后缀(+之后的部分)不能以点结尾。推荐两种方案:

1. 直接在项目文件中指定合法版本号

在.csproj的<PropertyGroup>节点中明确设置Version属性,覆盖自动生成的版本值:

<PropertyGroup>
  <!-- 移除版本后缀末尾的点 -->
  <Version>0.0.0+main</Version>
</PropertyGroup>

这种方式既保留了.NET SDK自动生成AssemblyInfo的便利,又解决了版本字符串不合法的问题。

2. 修正版本号注入逻辑

如果版本号是通过CI/CD环境变量或脚本注入的,在传递给dotnet构建命令前处理版本字符串,移除末尾多余的点。例如在shell脚本中:

# 处理版本号,移除末尾的点
VERSION=$(echo "$VERSION" | sed 's/\.$//')
# 传递处理后的版本号进行构建
dotnet build -p:Version="$VERSION" /src/myproject.csproj

关于Rider默认配置的疑问

Rider创建ASP.NET项目时,默认不会添加<GenerateAssemblyInfo>false</GenerateAssemblyInfo>配置——这是正常行为,因为.NET SDK默认会自动生成AssemblyInfo文件。本次错误并非Rider导致,而是自动生成的版本号后缀多了一个末尾的点,触发了SDK的版本格式校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:35:08