4

我有一个 winform c# 应用程序。

我可以使用 [web 方法] 来检查我的客户端 winform 应该使用的 DLL 版本。我也可以下载。但是,如果我复制旧的 DLL,我会收到一条错误消息,指出该文件正在使用中。我已经预料到了这一点。

有没有办法从我正在运行的 winform 应用程序中卸载这个 DLL,复制 DLL 并重新加载它?

我不想为我的更新程序使用引导程序,它可能不得不停止并重新启动我的应用程序。

如果我可以卸载我的 DLL,所有这些都将过时。

我找了很长时间,找不到任何东西。在我退休之前,我想我会在这里发布这个问题。

谢谢

PS 我可以发布代码,显示如何在代码中加载 DLL 以及由此产生的错误,但它是开放知识,不会添加到这个问题。

4

2 回答 2

6

有没有办法从我正在运行的 winform 应用程序中卸载这个 DLL,复制 DLL 并重新加载它?

在大多数情况下不是。在托管应用程序中卸载 DLL 的唯一方法是卸载整个 AppDomain。这通常意味着您需要非常小心如何使用程序集(您不能直接引用并正常使用它)。

我不想为我的更新程序使用引导程序,它可能不得不停止并重新启动我的应用程序。

这是最常见的方法。在应用程序内部进行这项工作本质上是将引导程序构建到应用程序本身(在它自己的 AppDomain 中),并使用程序集卸载/重新启动 AppDomain。这通常需要更多的工作,并且与单独的引导程序应用程序一样具有破坏性。

于 2013-11-11T18:46:47.763 回答
0

您可能正在寻找类似 MEF 的东西?

http://mef.codeplex.com/

http://msdn.microsoft.com/en-us/library/dd460648(v=vs.110).aspx

于 2013-11-11T18:46:23.417 回答