Windows 7上的IIS FTP 7.5使用自定义扩展(托管代码,C#)缓存程序集。
首次使用该库文件启动服务器后,无论是重新启动服务器,还是从GAC安装卸载等,都不会获取新版本的服务器。
将新实现文件导入IIS FTP的唯一方法是更改强名称中的版本名称。
有没有办法在不更改版本号的情况下替换实现,只需更换文件?
这种奇怪的行为使调试和更改mgmt几乎不可能。
Artiom在这篇文章中发现了类似的行为:http://www.flexlabs.org/IIS7-Modules/custom-authentication-extension
答案 0 :(得分:1)
找到这种“缓存”的原因。
IIS在名为“Microsoft FTP发布服务可扩展性主机”的COM +应用程序中运行可扩展性组件。加载扩展后,程序集将加载到相应的进程(由dllhost.exe托管)中,因此不会立即受到任何GAC更改的影响。
工作解决方案(涵盖了比原始问题范围更多的元素):
FTP服务配置为加载使用.NET 3.5编写的扩展组件 - 因为它只接受.NET 2.0运行时;如果你在运行时4中实现扩展,它就不会运行
扩展组件又需要使用.NET 4.5实现的大型代码库 - 它通过COM实现(这些API在COM中注册,但不在GAC中注册)
当我重新编译FTP服务扩展时,它足以更新GAC并关闭“Microsoft FTP发布服务可扩展性主机”COM +应用程序,最好也是FTP服务。
现在,我不必为每次更改更改FTP服务扩展程序集的强名称(通过更改版本号)。