C# Visual studio。带*don'的组装版本;行不通

C# Visual studio。带*don'的组装版本;行不通,c#,version,C#,Version,我无法在程序集版本中使用* 将文本表示为UTF-16代码单元的序列。若要浏览.NET 此类型的框架源代码,请参阅参考源代码 指定的版本字符串包含通配符,而通配符不是 与决定论相容。从版本中删除通配符 字符串,或禁用此编译的确定性 我想你可以更早地使用它,但现在不能了 原因-Visual Studio已经做了一些更改,因为新的项目文件现在默认为'Deterministic'属性的'True' 解决方案-正如Hans Passant所说,手工编辑项目文件。正如他所说的那样,这样做的缺点 具体地说,将

我无法在程序集版本中使用*

将文本表示为UTF-16代码单元的序列。若要浏览.NET 此类型的框架源代码,请参阅参考源代码

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


我想你可以更早地使用它,但现在不能了

原因-Visual Studio已经做了一些更改,因为新的项目文件现在默认为'Deterministic'属性的'True'

解决方案-正如Hans Passant所说,手工编辑项目文件。正如他所说的那样,这样做的缺点

具体地说,将
.csproj
编辑为
false

Source-

添加带有
false
值的
标记,并将
*
用于.csproj文件中
内部的
组件版本的第三部分:

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

真的
1.0.0
1.0.*
假的

VS2019可以自动创建一个
.editorconfig
文件,将严重性设置为“建议”,其内容如下:

[*.cs]

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

特定于.NETCore项目,/deterministic compile选项。您必须手动编辑.csproj文件才能将其关闭。请注意,版本比不确定的版本要差得多,如书面所示,修订号将是一天中的时间。所以版本号可以倒转或重复,你最好不要使用它们;将.csproj编辑为
false
。Thx.下一个答案更完整、更好,但是
标签做什么呢?为了回答我自己的问题,我也想知道-确定性意味着类似的东西-如果没有发生任何更改,编译器将使用相同版本的文件,从而加快构建/测试。如果最初禁用了它,并且您希望在版本号中使用通配符,那么更改它会产生什么负面影响?基本上没什么。它只是让这成为可能。对于那些想使用通配符自动生成版本信息的人来说,这实际上是一个更直接的答案。请注意,您应该在中使用通配符的是AssemblyVersion(而不是AssemblyFileVersion)。如果为AssemblyVersion提供通配符,则根本不包括AssemblyFileVersion。(我使用Properties\AssemblyInfo.cs文件,并在项目设置中将其保留为空,但上面也支持该文件。)注意:还有两种形式。其中一个星号通配符位于第三位置(x.y.*),另一个星号通配符位于第四位置(x.y.z.*)。在x.y.*的情况下,构建将自动生成两个版本号,第一个版本号是自某个纪元以来的天数,因此它每天只更改一次。例如,今天,“1.0.*”的汇编版本将生成特定的“7472”,例如“1.0.7472.20737”。5位数的最终数字在每次构建时都会有所不同,至少在发生变化时是如此。我发现这比1.0.0.*更好支持,因为它表明了年龄(.7300将将近6个月大)。@Appurist PaulW:
1.0.
自动生成版本号和修订号。构建是“自2000年1月1日起的天数”,修订是“自00:00起的秒数的一半”。您的示例,
1.0.7472.20737
,意思是“此组件是在2020-06-16 11:31:14时构建的”。