在C#Web服务中手动删除和使用DLL

时间:2012-06-07 17:33:34

标签: c# .net

我正在用C#编写Web服务,并且是一个彻头彻尾的新手。请原谅我,如果我问的话已经死了傻。我有一组Web服务使用的dll。我想要达到的目标如下:

  1. 让我们假设dll是first.dll,second.dll和common.dll
  2. 在first.dll和second.dll中引用common.dll(common.dll包含在first.dll和second.dll中实现的接口)
  3. common.dll有一个包含在first.dll和second.dll中的类类型的静态字典。此字典中的类将根据需要进行实例化。
  4. 每当我准备好发布新的common.dll时,我想手动删除common.dll文件,并在系统运行/运行时将其替换为新版本的common.dll
  5. 目前,我在尝试执行第4步时遇到以下错误: “此操作无法完成,因为该文件已在vshost32-clr2.exe中打开”

    我完全错过了什么?

2 个答案:

答案 0 :(得分:0)

您必须关闭托管网站。复制新程序集。然后重新启动网站。

答案 1 :(得分:0)

24/7可用性并不便宜 - 您真的需要一个吗?

一种简单的方法是在升级应用程序时将流量重新路由到不同的服务器。您可以运行两个服务器并验证新服务器是否正常,然后切换流量以转到新服务器。您可以使用DNS条目或某些软件/硬件路由器来重定向流量。

如果你真的想要动态更换组件,你可以这样做。您可能需要足够的代理对象层,并可能在自定义应用程序域中加载最终程序集。您可以简单地将DLL复制到IIS上的Web站点的根文件夹,并希望app-domain recycle能够正常工作并满足您的“永远在线”要求。

注意:“手动删除”和“系统一直在运行/一直在运行”不应该出现在同一系统中...除非你知道一个人可以多次完美地执行相同无聊的几十步在一天中的任何时间...