C# 在C web服务中手动删除和使用dll

C# 在C web服务中手动删除和使用dll,c#,.net,C#,.net,我正在用C编写一个Web服务,我是一个完全的新手。请原谅我,如果我所问的是非常愚蠢的。我有一组Web服务使用的DLL。我想达到的目标如下: 假设dll是first.dll、second.dll和common.dll common.dll在first.dll中引用,second.dll common.dll包含在first.dll和second.dll中实现的接口 common.dll有一个包含在first.dll和second.dll中的类类型的静态字典。根据需要实例化此字典中的类。 每当我有一

我正在用C编写一个Web服务,我是一个完全的新手。请原谅我,如果我所问的是非常愚蠢的。我有一组Web服务使用的DLL。我想达到的目标如下:

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


我完全错过了什么?

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

全天候可用性不是一件便宜的事情-你真的需要吗

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

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


注意:对于同一系统,手动删除和系统一直处于活动/运行状态不应同时出现。。。除非你知道有人能在一天中的任何时间多次完美地完成同样无聊的数十个步骤

为什么您认为可以在文件打开/使用时覆盖它?不要在visual studio中运行web服务。尝试在IIS中托管它。@Frank,这不是关于打开/使用的文件,而是关于被引用的dll。@Sandeep将尝试这样做,正如AlexeiNot-true指出的那样;在我们的系统中,我们随时动态部署.dll文件的新版本。此外,询问者希望系统保持活动状态。@OmegaMan,就我的问题而言,Filip的回答是正确的。@AakashRoy,有东西在运行时引用程序集,它正在内存中加载。除非你找到了问题所在并将其逆转,否则你将继续面临这个问题。谢谢@Alexei。你在回答中提供的可能性给了我思考过程的方向。我认为24/7的可用性不是一件便宜的事情——不过,您真的需要吗: