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

为所有.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,可以用以下无依赖的脚本方案:

  1. 保持原有的directory.build.props属性定义不变。
  2. 在每个传统项目的.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\(&quot;.*?&quot;\)\]", "[assembly: AssemblyVersion(&quot;$(AssemblyVersion)&quot;)]"
    $content = $content -replace "\[assembly: AssemblyFileVersion\(&quot;.*?&quot;\)\]", "[assembly: AssemblyFileVersion(&quot;$(AssemblyFileVersion)&quot;)]"
    
    # 替换公司、版权信息
    $content = $content -replace "\[assembly: AssemblyCompany\(&quot;.*?&quot;\)\]", "[assembly: AssemblyCompany(&quot;$(Company)&quot;)]"
    $content = $content -replace "\[assembly: AssemblyCopyright\(&quot;.*?&quot;\)\]", "[assembly: AssemblyCopyright(&quot;$(Copyright)&quot;)]"
    
    $content | Set-Content $assemblyInfoPath -Encoding UTF8
  '/>
</Target>

优势

  • 无需安装任何第三方MSBuild扩展包,仅依赖系统自带的PowerShell。
  • 直接修改现有AssemblyInfo.cs文件,无需调整项目结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:34:54