重新触发组件解决?

时间:2011-03-14 20:40:19

标签: c# assemblyresolve

我通过将特定DLL的“Copy Local”设置为false来触发AssemblyResolve。 我的AssemblyResolve被触发,我可以选择我的DLL的位置。

稍后在代码中,我希望AssemblyResolve重新触发,以便我可以指定一个新的DLL位置,但由于第一个AssemblyResolve的DLL已成功加载,我无法重新加载新的DLL。

有没有办法可以清除当前的DLL并重新加载它?或类似的东西???

谢谢!

3 个答案:

答案 0 :(得分:4)

您必须使用Assembly.LoadFile()来完成此任务。你无法使用AssemblyResolve,CLR非常小心地避免重新加载程序集,因为这将打开混合同一类的不同版本的大门。有些方法针对一个版本,一些针对另一个版本。没有任何方法可以保证哪种,欢闹随之而来。

然而,LoadFile()是一种射击你的脚并以非常有创意和难以诊断的方式在你的脸上爆炸的枪。令人高兴的是,当加载两次时,完全相同的类型是不兼容的。你最好重新考虑一下。

答案 1 :(得分:0)

你怎么可能想象在正在运行的程序中这样做?更重要的是为什么? Assembly表示某些可执行代码的工作版本。为什么您希望在同一运行时具有替代现实。我没有看到目的,这可能表明一些设计缺陷?您可以在代码中创建一个单独的ApplicationDomain,并使用您想要的任何程序集再次加载您的应用程序..但为什么?

答案 2 :(得分:0)

尝试这样:

string dllFile = "C:\\sample.dll";
Assembly asmLoader = Assembly.LoadFile(dllFile);
Type[] types = asmLoader.GetTypes();

由于应用程序仍然是@ runtime时,无法重新加载/替换程序集中的所有资源 使用LoadFile()。