首页 > 解决方案 > Git 提交哈希影响新格式 csproj 的 Visual Studio dll/exe 二进制文件

问题描述

我有许多 NET 框架项目。旧项目具有 Deterministic=true 的旧 csproj 格式。因此,每当我构建程序集时,我都会收到相同的输出文件(dll 或 exe)的二进制文件。新项目具有新的 csproj 格式。在新格式中,没有确定性选项。最奇怪的是当前 checkout git hash 会影响输出二进制文件。所以我只为相同的 git commit 收到相同的二进制文件。但是如果我改变一些不影响项目的东西并构建它,我会得到不同的二进制文件。

最简单的重现方法:

  1. 构建项目
  2. 通过 git 将 git commit 消息更改为任何其他(甚至相同)commit --ammend -m "Some message"
  3. 构建项目
  4. 比较二进制文件(它们不同)

如果项目相同,我希望我的二进制文件相同,无论它是从哪个 git 提交构建的(与旧的 csproj 格式相同)。我怎样才能做到这一点?

标签: gitvisual-studio-2019csprojdeterministic

解决方案


事实证明,其中一个引用的项目(我们称之为“SomeProject”)使用了 Nerdbank.GitVersioning 来生成文件版本。这就是为什么所有依赖于“SomeProject”二进制文件的项目在构建时都会发生变化的原因。


推荐阅读