问题描述
我有很多 NET Framework 项目。旧项目具有旧的 csproj 格式,Deterministic=true。因此,每当我构建程序集时,我都会收到二进制相同的输出文件(dll 或 exe)。新项目具有新的 csproj 格式。在新格式中,没有确定性选项。最奇怪的是,当前的 checkout git hash 会影响输出的二进制文件。所以我只收到相同的 git commit 的相同二进制文件。但是,如果我更改不影响项目的内容并构建它,我会得到不同的二进制文件。
最简单的复现方式:
- 构建项目
- 通过 git
commit --ammend -m "Some message"
将 git commit 消息更改为任何其他(甚至相同) - 构建项目
- 比较二进制文件(它们不同)
如果项目是相同的,无论它是从哪个 git commit 构建的(与旧的 csproj 格式相同),我都希望我的二进制文件是相同的。我怎样才能做到这一点?
解决方法
事实证明,引用的项目之一(我们称之为“SomeProject”)使用 Nerdbank.GitVersioning 来生成文件版本。这就是为什么所有依赖于“SomeProject”二进制文件的项目在构建时都会发生变化。