想象一下这种情况:
var ass1 = Assembly.LoadFrom(@"C:\Work\3.59\assembly1.dll");
var ass2 = Assembly.LoadFrom(@"C:\Work\3.60\assembly1.dll");
Debug.Assert(ass1 != ass2);
上述断言失败。即使上面的两个程序集具有不同的版本和位置,第二个调用似乎也会返回第一个程序集。
程序集没有强名称,无法签名。
有没有办法强制框架在相同的上下文和域中加载它们?
答案 0 :(得分:6)
改为使用Assembly.LoadFile(path)
。
来自MSDN
LoadFrom方法具有以下缺点。考虑使用 改为加载。
如果已加载具有相同标识的程序集,则为LoadFrom 即使指定了不同的路径,也会返回已加载的程序集。
来自CLR developer Suzanne Cook's blog:
如果程序集没有强名称,则忽略该版本 捆绑。但是,如果它被强烈命名,那么整个版本就可以了 程序集引用需要匹配找到的程序集。
答案 1 :(得分:2)
是的,您可以使用Assembly.LoadFile()。 http://blogs.msdn.com/b/suzcook/archive/2003/09/19/loadfile-vs-loadfrom.aspx
答案 2 :(得分:0)
我今天找到了解决这个问题的解决方案 - 只是在构建类库项目之前对程序集进行签名。因为Assembly.LoadFrom(string assemblyPath)方法每次都会加载程序集,无论这些程序集名称是否相同,只要这些程序集是强命名程序集。