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

Adr*_*Rus 3 .net c# assemblies

想象一下这种情况:

var ass1 = Assembly.LoadFrom(@"C:\Work\3.59\assembly1.dll");
var ass2 = Assembly.LoadFrom(@"C:\Work\3.60\assembly1.dll");

Debug.Assert(ass1 != ass2);
Run Code Online (Sandbox Code Playgroud)

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

程序集没有强名称,无法签名.

有没有办法强制框架在相同的上下文和域中加载它们?

D S*_*ley 6

Assembly.LoadFile(path)改用.

来自MSDN

LoadFrom方法具有以下缺点.请考虑使用Load.

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

来自CLR开发人员Suzanne Cook的博客:

如果程序集没有强名称,则忽略版本以进行绑定.但是,如果它具有强名称,则程序集引用中的整个版本需要与找到的程序集匹配.