如何比较两个AssemblyName实例?

时间:2010-08-11 14:13:57

标签: c# .net

如何比较两个AssemblyName实例以确定它们是否代表相同的程序集?

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

3 个答案:

答案 0 :(得分:6)

只要您使用强名称程序集,比较ToString method的输出就可以了,因为它会输出程序集的全名,which is supposed to be consistent and seems to be culture-invariant

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

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

答案 1 :(得分:2)

我会比较AssemblyName.FullName属性,因为它代表程序集的实际版本特定标识。

答案 2 :(得分:1)

经过研究,我们发现了这种方法: ReferenceMatchesDefinition (System.Reflection)

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assemblyname.referencematchesdefinition?view=netframework-4.8

var expectedAssemblyName = new AssemblyName(name);
var actualAssemblyName = AssemblyName.GetAssemblyName(path);

if (AssemblyName.ReferenceMatchesDefinition(expectedAssemblyName, actualAssemblyName))
{
    // Some assemblies
}