我有一个winform c#app。
我可以使用[web方法]检查我的客户端winform应该使用的DLL版本。我也可以下载它。但是,如果我复制旧的DLL,我将收到一个错误,指出该文件正在使用中。我曾预料到这一点。
有没有办法从我正在运行的winform应用程序中卸载此DLL,复制DLL并重新加载它?
我不想为我的更新程序使用boot-strapper,而且可能需要停止并重新启动我的应用程序。
如果我可以卸载我的DLL,那么所有这些都将过时。
我已经找了很久但找不到任何东西。在我退休之前,我想我会在这里发布问题。
由于
PS 我可以发布代码,显示如何在代码中加载DLL以及从中生成的错误,但它是开放的知识,并没有添加到这个问题。
答案 0 :(得分:6)
有没有办法从我正在运行的winform应用程序中卸载此DLL,复制DLL并重新加载它?
大多数情况下都不是。在托管应用程序中卸载DLL的唯一方法是卸载整个AppDomain。这通常意味着您需要非常小心如何使用程序集(您不能直接引用并正常使用它)。
我不想为我的更新程序使用boot-strapper,而且可能需要停止并重新启动我的应用程序。
这是最常用的方法。在应用程序中完成这项工作实质上是将引导程序构建到应用程序本身(在其自己的AppDomain中),并使用程序集卸载/重新启动AppDomain。这通常是更多的工作,就像单独的引导程序应用程序一样中断。
答案 1 :(得分:0)