我写了一些像这样的示例代码,所有输出都是一样的,这对我来说很奇怪,
我认为如果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]);
答案 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;
}