为什么为相同代码和相同.net框架版本生成的.net dll不是二进制相同的?

| 我有一个C#项目,当在不同的计算机上编译时,会生成不是二进制相等的dll。所以我的问题是,为什么生成的dll不同?并有某种方法可以在不同的计算机上生成完全相同的dll? 编辑 这是我想要做的。有多个客户端计算机可以从服务器获取一些代码片段并进行编译。 dll编译后,将在客户端上反复使用。如果可以在所有计算机上生成相同的DLL,则可以轻松地使用加密哈希检查DLL是否在客户端被篡改。 由于某些原因,必须在客户端计算机上编译代码。因此,数字签名不是一种选择。     
已邀请:
您不能期望二进制文件对于任何重新创建的文件都是相同的-更不用说程序集了。所有文档元数据(包括创建的数据和修改的日期)都将不同。 如果需要比较,则需要对程序集进行签名(强命名)并比较公钥令牌和程序集版本。 更新 尽管我有时可以理解这是必须要做的,但您正在做的是自找麻烦。如果您是我,我将在服务器上编译二进制文件,并让客户端下载二进制文件而不是代码。最终,客户端的计算机上可能没有C#编译器。 为了回答您的问题,如果您坚持要在客户端上进行编译,则每次编译时,都要创建一个本地哈希值并将其存储在注册表,某些文件等中,然后再比较该哈希值。 更新2 C#编译器从不保证会创建相同的二进制文件。在编译时会创建许多东西,例如,命名匿名函数,自动属性的支持值,匿名方法,内部GUID ...所有这些都将在编译时创建,而编译器使用命名约定时,名称通常以同样,也不能保证。     

要回复问题请先登录注册