为所有.NET Framework项目统一设置程序集版本及相关信息
统一管理SDK风格与传统.NET Framework项目的程序集信息
通用解决方案(支持VS2017+)
传统.NET Framework项目默认不会自动使用directory.build.props中的属性生成程序集信息,核心原因是未启用GenerateAssemblyInfo。只需修改directory.build.props,让所有项目(包括传统项目)都开启自动生成逻辑:
<Project> <PropertyGroup> <!-- 全局统一的程序集属性 --> <AssemblyVersion>3.1.0.0</AssemblyVersion> <AssemblyFileVersion>3.1.0.0</AssemblyFileVersion> <FileVersion>3.1.0.0</FileVersion> <Company>My company</Company> <Copyright>(C) 2024</Copyright> <!-- SDK项目默认已支持,这里统一强制开启 --> <GenerateAssemblyInfo>true</GenerateAssemblyInfo> </PropertyGroup> <!-- 针对传统.NET Framework项目的适配 --> <PropertyGroup Condition="!$(UsingMicrosoftNETSdk)"> <!-- 强制传统项目启用自动生成 --> <GenerateAssemblyInfo>true</GenerateAssemblyInfo> <!-- 指定生成的AssemblyInfo路径,覆盖原有手动文件 --> <AssemblyInfoFileName>$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs</AssemblyInfoFileName> </PropertyGroup> </Project>
注意事项
- 要求MSBuild版本15.0及以上(对应Visual Studio 2017及更新版本),旧版本不支持传统项目的
GenerateAssemblyInfo功能。 - 如果传统项目中存在手动编写的
AssemblyInfo.cs,自动生成的内容会覆盖它,建议删除手动文件,避免属性冲突。
传统.NET Framework项目最简方案(兼容旧版本VS)
如果你的项目使用VS2015及以下版本,无法启用GenerateAssemblyInfo,可以用以下无依赖的脚本方案:
- 保持原有的
directory.build.props属性定义不变。 - 在每个传统项目的
.csproj文件中添加以下MSBuild目标,编译时自动替换AssemblyInfo.cs中的属性值:
<Target Name="UpdateAssemblyInfoFromGlobalProps" BeforeTargets="CoreCompile"> <PowerShell Script=' $assemblyInfoPath = "$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs" $content = Get-Content $assemblyInfoPath # 替换版本信息 $content = $content -replace "\[assembly: AssemblyVersion\(".*?"\)\]", "[assembly: AssemblyVersion("$(AssemblyVersion)")]" $content = $content -replace "\[assembly: AssemblyFileVersion\(".*?"\)\]", "[assembly: AssemblyFileVersion("$(AssemblyFileVersion)")]" # 替换公司、版权信息 $content = $content -replace "\[assembly: AssemblyCompany\(".*?"\)\]", "[assembly: AssemblyCompany("$(Company)")]" $content = $content -replace "\[assembly: AssemblyCopyright\(".*?"\)\]", "[assembly: AssemblyCopyright("$(Copyright)")]" $content | Set-Content $assemblyInfoPath -Encoding UTF8 '/> </Target>
优势
- 无需安装任何第三方MSBuild扩展包,仅依赖系统自带的PowerShell。
- 直接修改现有
AssemblyInfo.cs文件,无需调整项目结构。
内容的提问来源于stack exchange,提问作者Steph09
相关产品推荐
相关产品推荐

