我无法在汇编版本中使用 *
,这样做会导致以下编译错误:
指定的版本字符串包含通配符,这与确定性不兼容。请从版本字符串中删除通配符,或者禁用此次编译的确定性。
我无法在汇编版本中使用 *
,这样做会导致以下编译错误:
指定的版本字符串包含通配符,这与确定性不兼容。请从版本字符串中删除通配符,或者禁用此次编译的确定性。
在.csproj文件的<PropertyGroup>
中,添加具有false
值的<Deterministic>
标签,并在AssemblyVersion
的第三部分使用*
:
<PropertyGroup>
<Deterministic>false</Deterministic>
<AssemblyVersion>x.x.*</AssemblyVersion>
</PropertyGroup>
<PropertyGroup>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<Version>1.0.0</Version>
<AssemblyVersion>1.0.*</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
"确定性"的意思是 - 如果没有发生变化,编译器将使用相同版本的文件,从而提高构建速度。
在AssemblyVersion
中使用通配符的应该是AssemblyVersion
(而不是AssemblyFileVersion
)。如果您在AssemblyVersion
中提供了通配符,请根本不要包含AssemblyFileVersion
。
还要注意:有两种形式。一种是在第三个位置上放置星号(x.y.*
),另一种是在第四个位置上放置星号(x.y.z.*
)。
x.y.*
自动生成BUILD和REVISION数字。BUILD是“自2000年1月1日以来的天数”,因此每天只会更改一次。而REVISION是“自00:00以来的秒数的一半”。
例如,今天'1.0.*'
的AssemblyVersion
将生成一个特定的'7472'
,例如'1.0.7472.20737'
。最后的5位数字每次构建时都会有所不同(至少如果有更改)。
与1.0.0.*
相比,这可能更好地支持,因为它表示年龄(.7300
将近6个月)。例如1.0.7472.20737
表示“此程序集是在2020年6月16日上午11:31:14构建的”。
我猜您之前可以使用它,但现在不能用了。
原因 - Visual Studio 有了一些变化,新的项目文件现在默认为“确定性”属性为“True”。
解决方案 - 正如 Hans Passant 所说,通过手动编辑项目文件来解决。缺点就像他所说的那样。
具体地,编辑 .csproj
文件将 <Deterministic>false</Deterministic>
。
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<VersionSuffix>1.$([System.DateTime]::UtcNow.ToString(yyMM)).$([System.DateTime]::UtcNow.ToString(ddhh)).$([System.DateTime]::UtcNow.ToString(mmss))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">1.0.0.1</AssemblyVersion>
<AssemblyVersion Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</AssemblyVersion>
<Version Condition=" '$(VersionSuffix)' == '' ">1.0.0.1</Version>
<Version Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</Version>
<!--Deterministic tells the compiler to use the same versions of the files if no changes have happened resulting in faster builds-->
<Deterministic>false</Deterministic>
参考:https://sachabarbs.wordpress.com/2020/02/23/net-core-standard-auto-incrementing-versioning/
这篇文章介绍了如何在.NET Core项目中进行版本控制。通过使用MSBuild任务和Git标记来实现自动增量版本号的生成。