某些东西(可能是 MSBuild)正在将一长串数字和字符附加到我的程序集属性表中的产品版本中:
2024.6.22.6+9f3a8da557d9ed6941ee2dd3751916eb3ff1cece
应该是这样的:
2024.6.22.6
这是我的项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
(other stuff)
...
<FileVersion>2024.6.22.6</FileVersion>
<Version>2024.6.22.6</Version>
</PropertyGroup>
</Project>
官方文档似乎没有解决这个问题。我尝试了
<VersionSuffix />
元素,以及 <InformationalVersion />
、<AssemblyVersion />
和 <ProductVersion />
,但这些都没有效果。
我该如何解决这个问题并删除多余的字符?
--编辑--
问题源于自动生成的
AssemblyInfo.vb
文件:
Assembly: System.Reflection.AssemblyInformationalVersionAttribute("2024.6.22.6+8ae973ace79d1088bac4753cdea9c07b78f68709")
MSBuild 采用此处设置的值来代替项目文件中指定的值。
我已经能够通过使用我的构建脚本插入一个删除有问题的代码行的自定义目标来缓解此问题:
<Target Name="RemoveAssemblyInfoMetadata" BeforeTargets="CoreCompile">
<PropertyGroup>
<AssemblyInfoFilePattern>.*AssemblyInfo\.vb</AssemblyInfoFilePattern>
</PropertyGroup>
<Exec Command="powershell -Command "
$Files = Get-ChildItem -Path $(IntermediateOutputPath) -Filter '*.vb' -File -Recurse | Where-Object { $_.Name -match $env:AssemblyInfoFilePattern };
foreach ($File in $Files) {
$Content = Get-Content $File.FullName;
$FilteredContent = $Content | Where-Object { $_ -notmatch 'AssemblyInformationalVersionAttribute' };
$FilteredContent | Set-Content $File.FullName;
}
"" />
</Target>
(注意:这假设项目文件中包含
<InformationalVersion />
元素。)
它确实有效,但看起来确实像是一个拼凑的东西。可能是因为它是。
如果有人知道一种更优雅的方法来指示 MSBuild 覆盖自动生成的
AssemblyInfo.vb
文件中设置的值,我洗耳恭听。
您需要通过在 vbproj/csproj 文件中设置以下属性来禁用将源代码控制信息(git commit id)添加到信息版本:
<PropertyGroup>
<IncludeSourceRevisionInInformationalVersion>False</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>