2

在我当前的项目中,我正在使用 WCF 服务向客户端发送 dll 文件。dll 文件包含客户端用来可视化数据的用户控件。但是,有时服务会引入新的用户控件,而客户端并不知道这一点。发生这种情况时,我将新的 dll 文件发送给客户端,以便他们拥有最新版本的 UserControl。

但是,当我想在客户端 HD 上编写这个新的 dll 文件(使用 FileStream)时,我收到一个异常,说该文件被另一个进程使用(当然,客户端总是在他们的HD,因此必须覆盖)。

有什么方法可以覆盖这个文件而不会出错?我正在使用 MEF 读取客户端项目中的程序集文件。要将程序集文件发送给客户端,我只需将文件名作为字符串发送,并将文件内容发送到字节数组中。

4

1 回答 1

2

这通常是通过Shadow Copying完成的,但我找不到任何关于它是否适用于 MEF 的确切信息。

如果在关闭和重新打开应用程序时加载新控件可以接受,那么您可以在使用 MEF 编写之前复制所有插件。

这是一篇博客文章,其中有人基本上在尝试 MEF + Shodow Copy,以及一个特别相关的评论。

这里的根本问题是 .NET 不支持动态程序集卸载。您可以重新加载程序集,但您将永远无法恢复旧程序集使用的内存

于 2011-03-24T18:47:40.430 回答