Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Visual studio. AssemblyVersion with * don't work

Tags:

c#

version

I can't use * in assembly version; when I do I get the following compilation error:

The specified version string contains wildcards, which are not compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation

SCRAssembly

like image 601
Lucyper Avatar asked Dec 14 '18 14:12

Lucyper


People also ask

What is the difference between AssemblyVersion and AssemblyFileVersion?

AssemblyVersion: Specifies the version of the assembly being attributed. AssemblyFileVersion: Instructs a compiler to use a specific version number for the Win32 file version resource.

How do I disable determinism for compilation?

You can either remove '*' from your version string, or disable determinism in your project file by setting the MSBuild property `<Deterministic>false</Deterministic>`.


2 Answers

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".

like image 119
John Deer Avatar answered Sep 25 '22 22:09

John Deer


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/

like image 33
Animesh Avatar answered Sep 21 '22 22:09

Animesh