比较.NET程序集(DLL或EXE)是否相同

如何比较两个.NET程序集(DLL或EXE)是否相同呢?

直接比较文件内容?当然没那么简单了,这个你可以去试试,去比较一下两次Build产生的程序集,

就算内容没有改变,产生的程序集的二进制文件也是不同的。

其实,当两次Build后,程序集中,有3个地方会不同:

  1. MVID值会不同
  2. ImageBase值会不同
  3. 时间戳会不同

因此,要比较两个程序集是否完全相同,可以先刨除掉这三个值后,再进行比较。

以下文章中就介绍了该思路的具体实现。我也参考着实现了自己的比较工具,用于日常项目中程序集的比较。

http://www.codeproject.com/Articles/501631/Compare-two-DLL-files-programmatically-using-hash

时间: 2024-10-13 23:00:53

比较.NET程序集(DLL或EXE)是否相同的相关文章

C# 合并DLL, 合并DLL进入EXE

原文:C# 合并DLL, 合并DLL进入EXE 使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge /ndebug /t:dll /log c:/1/DevExpress.Data.v7.3.dll c:/1/DevExpress.OfficeSkins.v7.3.dll c:/1/DevExpress.Utils.v7.3.dll c:/1/log4net.dll /out:c:/1/kkun/Tstrin

DLL与EXE之间的通讯调用 以及 回调函数的线程执行空间

dll 与 exe 之间的通讯方式有很多种, 本文采用回调函数的方法实现, 本文也将研究多线程,多模块的情况下,回调函数所在的线程, 啥也不说了,先附上代码: 下面的是dll模块的的, dll的工程文件: [delphi] view plaincopy library DllAPP; uses windows, SysUtils, Classes, DllClass in 'DllClass.pas'; {$R *.res} var GDllServer: TDllServer; functio

You may experience an access violation when you access an STL object through a pointer or reference in a different DLL or EXE

Symptoms When accessing an STL object created in one DLL or EXE through a pointer or reference in a different DLL or EXE, you may experience an access violation or other serious program errors including the appearance of data corruption or data loss.

向自己的模块添加错误代码_使用vc自带的工具MC创建资源并将其添加至DLL或EXE中

本文主要介绍怎么使用Visual Studio自带的MC.exe工具来创建一个消息资源并将其添加到自己的DLL(或.exe)中,从而达到为自己的模块添加错误代码的目的. 一.MC工具介绍 Message Compiler(MC) 是用来创建消息资源的工具,这些消息资源被DLL(或EXE)模块引用.MC的输入是一个特定格式的文本文件,即*.mc文件,这种特定格式使得在一个文件中定义多种语言支持变得非常容易. 当编写完成一个*.mc文件之后,为了在程序中使用这个文件,你需要一些操作.首先,使用MC工

[转载]DLL和exe里的malloc和free不能混用的问题

源自: http://bjwf.cndev.org/2004/06/03/559/ http://bbs.csdn.net/topics/40214261 ====================================== 今天老玉米提了一个问题问为什么dll里malloc的内存如果在exe里free的话会出错,我分析了一下C库的原代码,得出结论如下: 刚看了一下malloc和free 的源代码,在这两个函数中都有对全局变量的引用,而malloc和free是C库函数,分别被静态链接到e

在DLL间或者DLL与EXE之间传递vector对象或指针的问题

今天在完成一个功能模块时,遇到了一个很棘手的问题,大概是这样的: 主模块(EXE)的一个DLL中有一个函数FunA(),该函数需要查询数据库,得到记录集做处理,而数据库的操作又单独封装导出了一个DLL,由于记录集是变长的(不知道有多少记录),所以采用vector对象来传递数据.大概的过程如下: boolFunA_EXE() { vector<T> vecRet; string  strSql = "SELECT * FROM ....."; Func_Dll(strSql,

Error-ONS-ASP.NET-ISS:0x000007FEFD04BE0D (KernelBase.dll) (w3wp.exe 中)处有未经处理的异常: 0xE0434352

ylbtech-Error-ONS-ASP.NET-ISS:0x000007FEFD04BE0D (KernelBase.dll) (w3wp.exe 中)处有未经处理的异常: 0xE0434352 (参数: 0xFFFFFFFF80131604, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000007FEEAE60000). 出现了  1.返回顶部 1. 0x000007FEFD04BE0D (KernelBas

C#.Net 如何动态加载与卸载程序集(.dll或者.exe)

我们知道在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载. 在C#中我们也能使用Assembly.LoadFile实现动态加载DLL,但是当你试图卸载时,你会很惊讶的发现Assembly没有提供任何卸载的方法.这是由于托管代码的自动垃圾回收机 制会做这件事情,所以C#不提供释放资源的函数,一切由垃圾回收来做. 但是我们可以通过应用程序域(AppDomain)来实现加载域卸载,如下会演示如何使用的.当Ap

C#中将dll汇入exe z

用了3层架构,运行目录下有很多dll文件,最终发布时,我打算将dll文件都合并到exe文件中去.微软发布的免费软件ILmerge可以完成这项工作,研究了一下,其用法如下: 1.合并file1.dll.file2.dll到destination.dll ILmerge /ndebug /target:dll /out:C:\destination.dll /log C:\file1.dll C:\file2.dll 2.合并file1.dll.file2.dll以及myApp.exe到newApp