命令行构建.NET Core解决方案时AssemblyFileVersion未正确设置求助
问题分析与解决方法
你遇到的问题是通过MSBuild命令行传递AssemblyVersion后,程序集版本更新正常,但文件版本仍为1.0.0.0,这大概率是以下几个原因导致的,对应解决方法如下:
1. AssemblyInfoFiles项未正确配置
你的BeforeBuild目标中使用了@(AssemblyInfoFiles)指定要修改的AssemblyInfo文件,但如果项目文件里没有定义这个项集合,AssemblyInfo任务就找不到需要更新的文件,自然不会修改AssemblyFileVersion。
解决方法:
在项目文件中添加ItemGroup,明确指定所有需要更新的AssemblyInfo.cs路径:
<ItemGroup> <!-- 单个项目的情况 --> <AssemblyInfoFiles Include="Properties\AssemblyInfo.cs" /> <!-- 如果是解决方案包含多个项目,需要逐个添加 --> <AssemblyInfoFiles Include="..\Project1\Properties\AssemblyInfo.cs" /> <AssemblyInfoFiles Include="..\Project2\Properties\AssemblyInfo.cs" /> </ItemGroup>
2. AssemblyInfo任务未启用自动插入属性
如果你的AssemblyInfo.cs文件中原本没有AssemblyFileVersion属性,默认情况下AssemblyInfo任务不会自动添加该属性,只会修改已存在的属性。
解决方法:
在AssemblyInfo任务中添加InsertAttributes="true"参数,让任务自动插入缺失的属性:
<AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)" AssemblyCopyright="$(AssemblyCopyright)" AssemblyVersion="$(AssemblyVersion)" AssemblyFileVersion="$(AssemblyVersion)" InsertAttributes="true" > </AssemblyInfo>
3. .NET Core/.NET 5+项目版本机制差异
如果你的项目是.NET Core或更高版本,这类项目默认通过项目文件的PropertyGroup控制版本,而不是手动修改AssemblyInfo.cs,此时你的BeforeBuild目标可能不会生效。
解决方法:
直接在MSBuild命令行中同时传递FileVersion属性,无需依赖AssemblyInfo任务:
& $msbuild "D:\Jenkins\workspace\Snarks\KPS.MAX graphics\KPS.MAX graphics - Compile\MainProj.sln" -r -m:7 -t:Build "-property:Configuration=Release;Platform=Any CPU;AssemblyVersion=1.0.33.174;FileVersion=1.0.33.174"
同时可以移除项目文件中的BeforeBuild目标,避免冲突。
4. 查看MSBuild详细日志排查
执行MSBuild命令时添加/v:d参数获取详细日志,查看BeforeBuild目标的执行情况:
- 确认
Message输出是否正常,验证$(AssemblyVersion)参数是否正确传递 - 查看AssemblyInfo任务的执行日志,是否有文件未找到、属性未修改等错误信息
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

