我正在开发一个实用程序,它根据路径报告.net程序集中的版本号。它使用assy = System.Reflection.Assembly.LoadFrom(path)
加载程序集,然后解析assy.GetName.ToString()
以了解版本号。
这个工作正常,只要我不尝试在程序的同一个调用中加载具有相同程序集名称的2个不同文件。如果我这样做,LoadFrom()
总是返回相同的Assembly对象,即使文件实际上是不同的版本。
这是记录的行为,请参阅https://msdn.microsoft.com/en-us/library/1009fa28(v=vs.80).aspx
中的“备注”该实用程序需要在Windows CE下运行.Net 2.0;它是在Symbol(现在的Zebra)MT2000手持式扫描仪上运行的工业应用程序。这意味着我无法使用Load()
或LoadFile()
。
显而易见的解决方法是两次调用该实用程序并比较结果,但由于多种原因,这样做很不方便。有人有更好的想法吗?
答案 0 :(得分:1)
您可以尝试使用AssemblyName.GetAssemblyName
方法,该方法不会加载程序集但会导致文件打开和关闭。更多详情here
AssemblyName assemblyName = AssemblyName.GetAssemblyName("YourExe.exe");
var versionOfAssembly = assemblyName.Version;
答案 1 :(得分:0)
如果您只需要获取程序集的名称,则可以使用方法ReflectionOnlyLoadFrom
。即使它们具有相同的程序集名称,此方法也会加载不同的程序集。
var assm = System.Reflection.Assembly.ReflectionOnlyLoadFrom(path);
var name = assm.GetName().ToString();