程序集 – CLR何时尝试加载引用的程序集?

我想编写一个安装网站并创建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 ....
   }
点赞