组装.当程序集路径和版本不同时,LoadFrom返回相同的程序集

本文关键字:程序集 LoadFrom 返回 路径 版本 组装 | 更新日期: 2023-09-27 18:17:59

想象一下这个场景:

var ass1 = Assembly.LoadFrom(@"C:'Work'3.59'assembly1.dll");
var ass2 = Assembly.LoadFrom(@"C:'Work'3.60'assembly1.dll");
Debug.Assert(ass1 != ass2);

上面的断言失败。似乎第二次调用返回第一个程序集,即使上面的两个程序集具有不同的版本和位置。

程序集不是强命名的,不能签名。

是否有一种方法可以强制框架在相同的上下文中和域中加载它们?

组装.当程序集路径和版本不同时,LoadFrom返回相同的程序集

Assembly.LoadFile(path)代替

从MSDN

LoadFrom方法有以下缺点。考虑使用负载。

如果具有相同标识的程序集已经加载,则LoadFrom即使指定了不同的路径,也返回已加载的程序集。

摘自CLR开发者Suzanne Cook的博客:

如果程序集不是强命名的,则忽略版本绑定。但是,如果它是强命名的,则程序集引用需要匹配找到的程序集。

是的,您可以使用Assembly.LoadFile()。http://blogs.msdn.com/b/suzcook/archive/2003/09/19/loadfile-vs-loadfrom.aspx

我今天找到了解决这个问题的方法——在构建类库项目之前对程序集进行签名。因为大会。LoadFrom(string assemblyPath)方法将每次加载程序集,无论这些程序集名称是否相同,只要这些程序集是强命名程序集。