System.Reflection.Assembly.LoadFrom - 重复的程序集名称 - 需要更好的解决方法

时间:2016-01-19 18:42:42

标签: c# .net windows-ce

我正在开发一个实用程序,它根据路径报告.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()

显而易见的解决方法是两次调用该实用程序并比较结果,但由于多种原因,这样做很不方便。有人有更好的想法吗?

2 个答案:

答案 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();