我正在尝试比较不同库版本的输出,并实现我试图通过反射加载不同版本的库。
我已将不同版本的dll放在项目的子文件夹中。正在复制它们并在部署文件夹中。
我用来加载的代码如下:
var uri = new UriBuilder(Assembly.GetExecutingAssembly().CodeBase);
string dir = Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path));
string path = Path.Combine(dir, $@"mylibrary\{version}.dll");
Assembly library = Assembly.LoadFrom(path);
然而,奇怪的是总是加载库的版本,首先加载。例如。首先加载2.0然后尝试加载1.0意味着2.0再次加载,并且首先加载1.0意味着当我加载2.0之后再次加载1.0。
当我尝试加载另一个版本并查看调试信息时path
是正确的,但程序集的CodeBase
是较新的库.dll。
知道造成这种情况的原因是什么?
P.S。我已尝试静态绑定extern alias
,但由于库是无符号的,因此失败,因此我得到一个错误,即除非签名,否则不能并排加载具有相同名称的程序集。