【问题标题】:System.Reflection.Assembly.LoadFrom - Duplicate assembly name - Need Better workaroundSystem.Reflection.Assembly.LoadFrom - 重复的程序集名称 - 需要更好的解决方法
【发布时间】:2016-01-19 18:42:42
【问题描述】:

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

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

【问题讨论】:

  • 这是使用 LoadFile() 的非常、非常 几个原因之一。在 CF 上不可用,太糟糕了。

标签: c# .net windows-ce


【解决方案1】:

您可以尝试使用AssemblyName.GetAssemblyName方法,它不会加载程序集,但会导致文件被打开和关闭。更多详情here

  AssemblyName assemblyName = AssemblyName.GetAssemblyName("YourExe.exe");
  var versionOfAssembly = assemblyName.Version;

【讨论】:

  • 很遗憾,此方法在 Windows CE 中不可用。
【解决方案2】:

如果只需要获取程序集的名称,可以使用方法ReflectionOnlyLoadFrom。此方法会加载不同的程序集,即使它们具有相同的程序集名称。

    var assm = System.Reflection.Assembly.ReflectionOnlyLoadFrom(path);
    var name = assm.GetName().ToString();

【讨论】:

  • 很遗憾,此方法在 Windows CE 中不可用。
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
相关资源
最近更新 更多