2010-09-17 22 views
0

我寫了一些這樣的示例代碼,所有的輸出是相同的,這對我來說很奇怪,.NET如何知道DLL是相同的?

我想這是有道理的,如果assembly1是相同的assemly2,因爲程序集信息是相同的(如名,程序集版本,GUID等)

然而

,我改變了裝配信息,並重新編譯SampleCodedFormula.dll(然後將其重命名爲改變-assemply-信息和重編譯後即SampleCodedFormula.dll),出人意料的是, assembly3的輸出仍然與assembly1相同。

程序集1,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

只需通過檢查裝配verstion這樣

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

使用FileVersionInfo對象。這裏有一個來自微軟網站的例子,它從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; 
} 
相關問題