如何比较两个AssemblyName实例?

alw*_*ing 5 .net c#

如何比较两个AssemblyName实例以确定它们是否代表相同的程序集?"等于"方法未被覆盖.

我能想到的一种方法是比较两个实例的'ToString()'结果,但我更喜欢'Equals'语法,因为我需要准备一个'unique'AssemblyName实例的列表(List),并希望使用'包含(AssemblyName项)'方法.

cas*_*One 6

只要您使用强名称程序集,比较ToString方法的输出就可以了,因为它输出程序集的全名,它应该是一致的,并且似乎是文化不变的.

如果程序集没有强名称,那么可以轻松地创建具有相同名称和版本号/文化的另一个程序集,它将具有与您相同的程序集名称.

有一点需要注意,因为程序集名称相同并不意味着程序集具有相同的物理标识; location 不是程序集名称的一部分.

  • 如果组件名称不强,则可能不足以证明这一点.我很确定没有强大的命名,可以使两个程序集看起来具有相同的名称,但实际上内部完全不同. (3认同)

Mat*_*lio 6

静态方法AssemblyName.ReferenceMatchesDefinition()接受两个 AssemblyName 实例并根据它们的 Name 属性对它们进行比较:

using System.Reflection;

var expectedName = new AssemblyName(name);
var actualName = AssemblyName.GetAssemblyName(path);

if (AssemblyName.ReferenceMatchesDefinition(expectedName, actualName))
{
    // The same assemblies
}
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,根据 FullName 属性比较它们可能更可取。