.NET如何知道dll是一样的?

时间:2010-09-17 11:08:14

标签: .net assemblies appdomain

我写了一些像这样的示例代码,所有输出都是一样的,这对我来说很奇怪,

我认为如果assembly1与assemly2相同是有意义的,因为程序集信息是相同的(例如名称,程序集版本,GUID等)。

然而,我更改了程序集信息并重新编译了SampleCodedFormula.dll(然后将其重命名为Changed-assemply-info-and-recompile-SampleCodedFormula.dll),令人惊讶的是,assembly3输出仍然与assembly1相同。

assembly1,2,3是从相同的代码库编译的。

有谁能告诉我为什么这样的行为?这对你有意义吗?

var domain = AppDomain.CurrentDomain;
var assembly1 = domain.Load(AssemblyName.GetAssemblyName("c:\\SampleCodedFormula.dll"));
Console.WriteLine(assembly1.CodeBase);
Console.WriteLine(assembly1.GetExportedTypes()[0]);

var assembly2 = domain.Load(AssemblyName.GetAssemblyName("c:\\Copied-From-SampleCodedFormula.dll"));
Console.WriteLine(assembly2.CodeBase);
Console.WriteLine(assembly2.GetExportedTypes()[0]);


var assembly3 = domain.Load(AssemblyName.GetAssemblyName("c:\\Changed-assemply-info-and-recompile-SampleCodedFormula.dll"));
Console.WriteLine(assembly3.CodeBase);
Console.WriteLine(assembly3.GetExportedTypes()[0]);

1 个答案:

答案 0 :(得分:1)

只需检查像这样的汇编文字

 // get the version object for this assembly
        Version v = System.Reflection.Assembly.GetExecutingAssembly().
         GetName().Version;

使用FileVersionInfo对象。以下是Microsoft网站上从notepad.exe获取版本信息的示例

public void GetFileVersion() {
    // Get the file version for the notepad.
    FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo("%systemroot%\\Notepad.exe");

    // Print the file name and version number.
    textBox1.Text = "File: " + myFileVersionInfo.FileDescription + '\n' +
       "Version number: " + myFileVersionInfo.FileVersion;
 }