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

