gpt4 book ai didi

c# - 为什么为相同代码和相同 .net 框架版本生成的 .net dll 二进制文件不相同?

转载 作者:行者123 更新时间:2023-11-30 21:15:38 25 4
gpt4 key购买 nike

我有一个 C# 项目,当它在不同的机器上编译时会生成二进制不相等的 dll。所以我的问题是为什么生成的 dll 不同?有什么方法可以在不同的机器上生成完全相同的 dll 吗?

编辑这就是我想要做的。有多个客户端机器从服务器获取一些代码片段并编译它。 dll编译后,在客户端反复使用。如果我可以在所有机器上生成相同的 DLL,那么我可以使用加密哈希轻松检查 DLL 是否在客户端未被篡改。

由于某些原因,代码必须在客户端机器上编译。因此,数字签名不是一种选择。

最佳答案

您不能期望二进制文件对于任何重新创建的文件都是相同的 - 更不用说程序集了。所有文档元数据(包括创建数据、修改日期)都将不同。

如果需要比较,需要对程序集进行签名(强命名),比较公钥 token 加上程序集版本。


更新

你这样做是在自找麻烦,虽然我能理解有时候这是必须要做的。如果我是你,我会在服务器上编译二进制文件并让客户端下载二进制文件而不是代码。归根结底,客户的机器上可能没有 C# 编译器。

回答你的问题,如果你坚持在客户端编译,每次编译时,创建一个本地散列并存储在注册表、某个文件等中,然后比较该散列。


更新 2

C# 编译器从不保证它会创建相同的二进制文件。许多东西是在编译时创建的,例如命名匿名函数、自动属性的支持值、匿名方法、内部 GUID……所有这些都将在编译时创建,而编译器使用命名约定,名称通常以同样,不能保证

关于c# - 为什么为相同代码和相同 .net 框架版本生成的 .net dll 二进制文件不相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com