使用 * 的 AssemblyVersion 失败并出现错误“通配符,与确定性不兼容?”

我不能在汇编版本中使用 *; 当我这样做时,我得到以下编译错误:

指定的版本字符串包含通配符,这些通配符不是 与确定性兼容。从版本中删除通配符 或禁用此编译的确定性

SCRAssembly

43894 次浏览

I guess you were able to use it earlier and can't anymore.

Reason - There have been some changes to Visual Studio as the new project files now default to 'True' for 'Deterministic' attribute.

Solution - as Hans Passant says, edit project file by hand. Cons to doing it, also as he says.

Specifically, edit .csproj to <Deterministic>false</Deterministic>.

Source - https://marinovdh.wordpress.com/2018/10/22/68/

Add <Deterministic> tag with false value and use * for the 3'rd part of AssemblyVersion inside <PropertyGroup> in .csproj file:

<PropertyGroup>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<Version>1.0.0</Version>
<AssemblyVersion>1.0.*</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>

"Deterministic" means something like - the compiler will use the same versions of the files if no changes have happened resulting in faster builds.

It is the AssemblyVersion (not AssemblyFileVersion) that you should use a wildcard in. If you provide AssemblyVersion with wildcard, just don't include AssemblyFileVersion at all.


Note also: There are two forms. One where the asterisk wildcard is in the third position (x.y.*) and one where it is in the fourth position (x.y.z.*).

x.y.* auto-generates the BUILD and REVISION numbers. BUILD is the "number of days since 1st January 2000" thus it only changes once each day. and REVISION is "half the number of seconds since 00:00".

Today, for example, an AssemblyVersion of '1.0.*' will generate a specific '7472', e.g. '1.0.7472.20737'. The 5-digit final number will be different every build, at least if changes.

This may be better than 1.0.0.* for support as it indicates age (.7300 would be almost 6 months old). The example, 1.0.7472.20737, means "this assembly was built on 2020-06-16 at 11:31:14".

VS2019 can auto-create an .editorconfig file putting severity as 'suggest', which content is like this:

[*.cs]


# CS7035: The specified version string does not conform to the recommended format - major.minor.build.revision
dotnet_diagnostic.CS7035.severity = suggestion

enter image description here