忽略传递给Type.GetType()的程序集限定名称中的版本

M. *_*ley 14 .net reflection types version

传入的程序集限定名称是否可以指定与实际加载的DLL版本不同的Type通道?如果是这样,那么行为是什么?Type.GetType()GetType()VersionGetType()

Type无论程序集是什么版本,我都希望从程序集中获取.我有一个函数,它获取一个程序集限定的名称作为参数:

Type someType = Type.GetType(someName);
Run Code Online (Sandbox Code Playgroud)

someName值对应于Type我想要获取的值,但它可能与Version我的应用程序中加载的值不同.

小智 10

我成功地使用了这个:

Type type = Type.GetType(typeName, AssemblyResolver, null);

private static System.Reflection.Assembly AssemblyResolver(System.Reflection.AssemblyName assemblyName)
{
    assemblyName.Version = null;
    return System.Reflection.Assembly.Load(assemblyName);
}
Run Code Online (Sandbox Code Playgroud)


M. *_*ley 1

在测试中,我发现GetType()即使当前加载的程序集版本与程序集限定名称字段中的值不匹配,也会返回正确的类型Version

  • 我没有强命名的应用程序,情况绝对不是这样。 (2认同)
  • 这取决于 .net 版本,例如 4.7.2 与 5.0 (2认同)