gpt4 book ai didi

c# - 多次加载同一个dll

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:14 25 4
gpt4 key购买 nike

我试图在主机程序运行时加载不同版本的 dll。我不能使用不同的 AppDomains 并卸载它们,原因是我的主机程序只是一个测试设置,真正的应用程序 (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,编译我的新 dll 并进行一些更改,然后再次调用 LoadFrom。但是,这并没有显示我的更改,我认为这是因为程序集仍然具有与前一个相同的身份。我以为我可以通过签署程序集 ( https://msdn.microsoft.com/en-us/library/wd40t7ad.aspx ) 来更改身份。不幸的是,我必须使用的第三方 dll 没有签名。

有没有办法在每次编译时更改我的 dll 的标识而不更改程序集名称?这样我就可以在 Assembly.LoadFrom(path) 中继续使用相同的路径字符串。如果不是,我可以解决程序集名称更改问题,但有些人对在每次构建时更改程序集名称有疑问(Unique Assembly name every build)

最佳答案

不,非强签名程序集的身份只是其名称,因此您必须更改名称。

请注意,您可以使用其他“加载”方法,甚至可以从字节数组加载,但通常这会给您带来更多的痛苦。 Suzanne Cook 的博文当您处理程序集身份、LoadFrom 和相关主题时,几乎需要阅读。

如果需要重新加载程序集,一种解决方案是构建代理,将调用转发到其他 AppDomain,并将不断变化的程序集加载到新的 AppDomain 中(假设您可以将完全受信任的代码加载到 Autodesk 3ds Max 中,这样您就可以自己管理 AppDomains ).

关于c# - 多次加载同一个dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com