我想编写一个安装网站并创建IIS虚拟目录的小型安装程序应用程序.该应用程序应在
Windows XP / Server 2003(IIS 6)以及Vista / 2008(IIS 7)上运行.
问题是:对于IIS 6,我们通过调用WMI / Metabase API来创建virt dirs,对于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\u0026amp;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 ....
}