【问题标题】:AssemblyVersion using * fails with error "wildcards, which are not compatible with determinism?"视觉工作室。带 * 的 AssemblyVersion 不起作用
【发布时间】:2019-05-15 20:44:01
【问题描述】:

我不能在汇编版本中使用 *

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

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

【问题讨论】:

  • 特定于 .NETCore 项目,/deterministic 编译选项。您必须手动编辑 .csproj 文件才能将其关闭。请注意,版本比非确定性要差得多,因为所写的修订号将是一天中的时间。所以版本号可以倒退或重复,你最好不要使用它们。
  • 始终将错误消息(和代码)作为文本而不是图像发布。

标签: c# version


【解决方案1】:

.csproj 文件中的 <PropertyGroup> 内添加带有 false 值的 <Deterministic> 标记并在 AssemblyVersion 的第三部分使用 *

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

【讨论】:

  • 但是&lt;Deterministic&gt; 标签有什么作用呢?
  • 为那些也想知道的人回答我自己的问题 - 确定性意味着类似 - 如果没有发生任何更改,编译器将使用相同版本的文件,从而加快构建/测试。如果最初禁用它并且您想在版本号中使用通配符,那么更改它会产生什么不利影响?基本上什么都没有。它只是让这成为可能。 blog.paranoidcoding.com/2016/04/05/…
  • 对于那些想要使用通配符自动生成版本信息的人来说,这实际上是一个更直接的答案。请注意,您应该在其中使用通配符的是 AssemblyVersion(而不是 AssemblyFileVersion)。如果您为 AssemblyVersion 提供通配符,则根本不要包含 AssemblyFileVersion。 (我使用 Properties\AssemblyInfo.cs 文件,并在项目设置中将它们留空,但上面似乎也支持它。)
  • 另请注意:有两种形式。一种是星号通配符位于第三个位置 (x.y.*),另一种是星号通配符位于第四个位置 (x.y.z.*)。在 x.y.* 的情况下,构建将自动生成两个版本号,第一个将是自某个时期以来的天数,因此它每天只更改一次。例如,今天,“1.0.*”的 AssemblyVersion 将生成特定的“7472”,例如'1.0.7472.20737'。每次构建时,5 位数的最终编号都会有所不同,至少在更改时会有所不同。我发现这比 1.0.0.* 更好,因为它表明年龄(.7300 几乎是 6 个月大)。
  • @Appurist-PaulW: 1.0.* 自动生成 BUILD 和 REVISION 编号。 BUILD 是“自 2000 年 1 月 1 日以来的天数”,而 REVISION 是“自 00:00 以来的秒数的一半”。您的示例 1.0.7472.20737 表示“此程序集是在 2020 年 6 月 16 日 11:31:14 构建的”。
【解决方案2】:

我猜你之前可以使用它,但现在不能了。

原因 - Visual Studio 发生了一些变化,因为新项目文件现在默认为“确定性”属性的“真”。

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

具体来说,将.csproj 编辑为&lt;Deterministic&gt;false&lt;/Deterministic&gt;

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

【讨论】:

  • Tldr;将 .csproj 编辑为 &lt;Deterministic&gt;false&lt;/Deterministic&gt;。谢谢。
  • 下一个答案更完整更好
【解决方案3】:

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

[*.cs]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多