最近在做一个项目,向IIS中添加MIME的类型,再往上查到了需要引用Active DS IIS Namespace Provider程序集,使用IISOle.MimeMapClass类制作一个Mime类型的对象,添加到IIS中。考虑到通用性问题,如果一台计算机没有装IIS,那么由于程序中引用了Active DS IIS Namespace Provider程序集,所以程序会崩溃,自然而然考虑使用反射动态加载该程序集,但是这个程序集是COM组件,无法使用反射加载,因此需要对这个程序集进行COM封装,那位大侠有这个程序集的COM封装的代码,或熟悉COM封装的,给我一些指点,谢谢!!!

解决方案 »

  1.   


     /// <summary>
            /// 安装WEB共享
            /// </summary>
            /// <param name="p_TargetDirectoryWebString">目标路径</param>
            /// <returns></returns>
            private bool InsertDirectoryServices(string p_TargetDirectoryWebString)
            {
                DirectoryEntry _RootFolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");
                DirectoryEntry _VirDir = _RootFolder.Children.Add(txtProjectName.Text + "_Web", "IIsWebVirtualDir");
                _VirDir.Properties["Path"].Value = p_TargetDirectoryWebString;   //设置路径
                _VirDir.Invoke("AppCreate", true);
                //设置名称
                _VirDir.Properties["AppFriendlyName"].Value = txtProjectName.Text + "iTouchWeb";
                _VirDir.Properties["AppIsolated"].Value = 2;            PropertyValueCollection _Mime = (PropertyValueCollection)_VirDir.Properties["MimeMap"];  //获取MIME类型            IISOle.MimeMapClass _NewMime = new IISOle.MimeMapClass();          //新建MIME类型
                _NewMime.Extension = ".xap";
                _NewMime.MimeType = ".xap";
                _Mime.Add(_NewMime);  //添加MIME类型            _VirDir.CommitChanges();//更改目录
                _RootFolder.CommitChanges();      //更改根目录
                return true;
            }
      

  2.   

    我开始做的就是你的方法,但是,我需要动态引用IISOle.MimeMapClass,也就是说我不引用Active DS IIS Namespace Provider程序集,把Active DS IIS Namespace Provider里面的COM组件包装成.NET的类,有没有方法?
      

  3.   

    zgke,你好,有没有我说的解决办法
      

  4.   

    Active DS IIS Namespace Provider里面的COM 包装到.NET里你的目的是别的机器如果没有这个COM 你也可以使用?
      

  5.   

    没有装IIS,那你的mime加到那里去,所以只要你的程序代码中,加上try,catch处理就行了
      

  6.   

    zgke: 是的,我在网上查到个方法,就是用tlbimp把那个COM的dll转化成.net的dll,然后用Reflector反编译,把握用到的类写出来,但是编译的时候报错:“由于引用了ComImport属性 所以,属性的get与set必须是外部的或抽象的”,这是为什么?
      

  7.   

    Fibona,我的意思你没有理解,如果目标机没有安装IIS,就不会有COM那个DLL,但是我的程序集中引用了那个COM的DLL,正阳就会导致我的程序崩溃。
      

  8.   

    如果机器上没有~你转换成.NET的DLL好象也不能用的.
      

  9.   

    问题解决了,如果以后再有出现COM问题的,在方法或属性前添加修饰符extern
      

  10.   


    求C#给IIS知道站点加MIME类型的代码。
      

  11.   

    求C#给IIS指定站点添加MIME类型的代码。