【发布时间】:2015-05-07 23:49:20
【问题描述】:
我正在尝试在我的主机程序运行时加载不同版本的 dll。我不能使用不同的 AppDomain 并卸载它们,原因是我的主机程序只是一个测试设置,而真正的应用程序 (Autodesk 3ds Max) 不支持它,我无法对此进行任何更改。这就是我在测试程序中加载 dll 的方式:
var testAssembly = Assembly.LoadFrom(textBox1.Text);
var formObject = testAssembly.CreateInstance("Dll_Test.Form1");
(formObject as Form).Show();
我在这里读到:https://msdn.microsoft.com/en-us/library/dd153782.aspx#load_contexts“如果已经加载了具有相同标识的程序集,即使指定了不同的路径,LoadFrom 也会返回加载的程序集。”
所以这正是我的问题,起初我只是尝试重命名我的 dll,用一些更改编译我的新的,然后再次调用 LoadFrom。但是,这并没有显示我的更改,我认为这是因为该程序集仍然具有与前一个相同的标识。我想我可以通过签署程序集 (https://msdn.microsoft.com/en-us/library/wd40t7ad.aspx) 来更改身份。不幸的是,我必须使用的第三方 dll 没有签名。
有没有办法在每次编译时更改我的 dll 的身份而不更改程序集名称?这样我就可以在 Assembly.LoadFrom(path) 中继续使用相同的路径字符串。如果不是,我可以解决程序集名称更改问题,但有些人对每次构建时更改程序集名称有疑问 (Unique Assembly name every build)
【问题讨论】:
-
见DLL Hell 引入签名是有原因的。