0

我正在用 C# 编写一个 Web 服务,并且是一个彻头彻尾的新手。如果我问的很愚蠢,请原谅我。我有一组 Web 服务使用的 dll。我想要实现的目标如下:

  1. 让我们假设 dll 是 first.dll、second.dll 和 common.dll
  2. common.dll 在 first.dll 和 second.dll 中被引用(common.dll 包含在 first.dll 和 second.dll 中实现的接口)
  3. common.dll 具有包含在 first.dll 和 second.dll 中的类类型的静态字典。该字典中的类根据需要进行实例化。
  4. 每当我准备好发布新的 common.dll 时,我想在系统运行/运行时手动删除 common.dll 文件并用新版本的 common.dll 替换它。

目前,当我尝试执行第 4 步时出现以下错误:“此操作无法完成,因为文件已在 vshost32-clr2.exe 中打开”

以至于我完全错过了一些东西?

4

2 回答 2

0

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

于 2012-06-07T17:39:21.553 回答
0

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

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

如果您真的想即时更换程序集,您可以这样做。您可能需要足够多的代理对象层,并可能将最终程序集加载到自定义应用程序域中。您可能只需将 DLL 复制到 IIS 上网站的根文件夹即可摆脱困境,并希望应用程序域回收能够正常工作并满足您的“始终在线”要求。

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

于 2012-06-07T18:01:19.883 回答