代码只有两行,如下:
DirectoryEntry siteVDir = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT/原来的项目/AspNet目录");
siteVDir.Invoke("AppCreate",true); //报Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
siteVDir.CommitChange();
查了很多资料,都没有结果。后来发现,如果用IIS,首先把ASPNet目录Create Application,然后Remove,上面
的代码就能够正常。
然后用查看一下siteVDir.SchemaClassName,发现运来是IISObject,msdn上说这个IISObject是没有方法。
代码
DirectoryEntry siteVDir = new DirectoryEntry(path);
foreach (var site in siteVDir.Children)
{
var siteV = (DirectoryEntry)site;
if (siteV.Name == "ASPNet目录")
{
siteV.Properties["AppFriendlyName"].Value = "虚拟目录名";
siteV.Invoke("AppCreate", true);
siteV.CommitChanges();
break;
}
}
foreach (var site in siteVDir.Children)
{
var siteV = (DirectoryEntry)site;
if (siteV.Name == "ASPNet目录")
{
siteV.Properties["AppFriendlyName"].Value = "虚拟目录名";
siteV.Invoke("AppCreate", true);
siteV.CommitChanges();
break;
}
}
最后的解决办法是,首先获取父,然后列举Children,返现是AspNet目录就调用 AppCreate。修正后的代码如下: