我想编写一个小型安装程序应用程序来安装网站并创建 IIS 虚拟目录。该应用程序应在 Windows XP/Server 2003 (IIS 6) 以及 Vista/2008 (IIS 7) 上运行。
问题是:对于 IIS 6,我们通过调用 WMI/Metabase API 创建虚拟目录,对于 IIS 7,有一个更好的 API:Microsoft.Web.Administration,但其程序集仅在 IIS 7 系统上可用。
天真的方法:
...
if (OperatingSystem == old)
{
call metabase API...
}
else
{
call Microsoft.Web.Administration...
}
...
很好,不是吗?但是,我如何确保在尝试加载 Microsoft.Web.Administration DLL 时不会在旧系统上崩溃?或者程序集是在第一次使用时刚刚加载的吗?何时首次使用调用程序集的方法?
我想,如果没有 CLR/.NET 规范保证某些确定性,测试就没有帮助。
我真的很期待听到您对此主题的经验、提示或解决方案。到目前为止,我还没有在网络上找到任何可远程使用的内容。
我无法在规范中找到明确的答案,说明何时必须加载程序集,何时不得加载程序集。然而,根据
http://msdn.microsoft.com/en-us/magazine/cc163655.aspx(“启动时加载更少的模块”部分)
以及 www.informit.com/articles/article.aspx?p=30601&seqNum=5 上的书籍摘录(摘自“Essential .NET,卷 I:公共语言运行时”)。
仅当需要编译方法时,CLR 的 JIT 才会加载所需的程序集。因此,您应该将 Microsoft.Web.Administration... 的任何使用转移到单独的方法中,仅当您确信系统上存在该程序集时才调用该方法。那是,
setup()
{
if ( Operating.System == Old )
call metabase API
else
doIIS7Setup()
}
void doIIS7Setup()
{
call Microsoft.Web.Administration ....
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)