1

Windows 7 上的 IIS FTP 7.5 使用自定义扩展(托管代码、C#)缓存程序集。

一旦您第一次使用该库文件启动服务器,无论您是否重新启动服务器、从 GAC 安装-卸载等,都不会选择它的新版本。

将新实现文件导入 IIS FTP 的唯一方法是更改​​强名称中的版本名称。

有没有办法在不更改版本号的情况下替换实现,只需替换文件?

这种奇怪的行为使调试和更改管理几乎不可能。

Artiom 在这篇文章中观察到了类似的行为:http: //www.flexlabs.org/IIS7-Modules/custom-authentication-extension

4

1 回答 1

1

找到了这种“缓存”的原因。

IIS 在名为“Microsoft FTP Publishing Service Extensibility Host”的 COM+ 应用程序中运行可扩展性组件。加载扩展后,程序集会加载到相应的进程(由 dllhost.exe 托管),因此不会立即受到任何 GAC 更改的影响。

工作解决方案(涵盖比原始问题范围更多的元素):

  • FTP 服务被配置为加载我使用 .NET 3.5 编写的扩展组件——因为它只接受 .NET 2.0 运行时;如果您在运行时 4 中实现扩展,它根本不会运行

  • 反过来,扩展组件需要使用 .NET 4.5 实现的大型代码库 - 它通过 COM 实现(这些 API 在 COM 中注册,但不在 GAC 中)

  • 当我重新编译 FTP 服务扩展时,更新 GAC 并关闭“Microsoft FTP Publishing Service Extensibility Host”COM+ 应用程序就足够了,最好也关闭 FTP 服务。

现在我不必为每次更改更改 FTP 服务扩展程序集的强名称(通过更改版本号)。

于 2013-11-07T16:15:04.187 回答