Веб-развертывание IIS - создавать виртуальные каталоги? - PullRequest
7 голосов
/ 19 ноября 2010

При разработке сайта на VS2010 / IIS 7.5 я использую Web Deploy для публикации сайта со своего компьютера на сервере сайта dev.

На сайте около 40 виртуальных каталогов, и я хотел бы автоматически создавать их на сервере во время развертывания. Есть ли простой способ сделать это?

Я подумываю написать небольшое приложение, которое загружало бы список из файла или базы данных и создавало их по требованию. Каталоги имеют разные физические пути на моей машине для разработки, чем и на веб-сервере, что бросает рывок в дело.

Ответы [ 2 ]

6 голосов
/ 20 ноября 2010

Если вы используете MSBuild для веб-развертывания, вы можете написать CustomBuildTask в .net, который вы можете использовать для создания своего виртуального каталога.

Существует множество ресурсов о том, как создать и использовать пользовательскую задачу сборки, но вот код, который я использую для создания виртуального каталога с помощью пользовательской задачи сборки:

public void CreateVirtualDirectory()
{

    DirectoryEntry oDE = new DirectoryEntry("IIS://" +
            this._strServerName + "/W3SVC/" + _webSiteID + "/Root");


    //Get Default Web Site
    DirectoryEntries oDC = oDE.Children;

    //Add row to schema
    DirectoryEntry oVirDir = oDC.Add(this._strVDirName,
                oDE.SchemaClassName.ToString());

    //Commit changes for Schema class File
    oVirDir.CommitChanges();


    //Set virtual directory to physical path
    oVirDir.Properties["Path"].Value = this._strPhysicalPath;

    //Set read access
    oVirDir.Properties["AccessRead"][0] = true;

    //Set the default docs
    oVirDir.Properties["EnableDefaultDoc"][0] = true;
    oVirDir.Properties["DefaultDoc"][0] = "default.aspx";

    //set the name
    oVirDir.Properties["AppFriendlyName"][0] = this._strVDirName;

    //do it
    oVirDir.Invoke("AppCreate", true);


    //set the application pool
    if (!string.IsNullOrEmpty(_strApplicationPool))
    {
        object[] param = { 0, _strApplicationPool, true };
        oVirDir.Invoke("AppCreate3", param);
        oVirDir.Properties["AppIsolated"][0] = "2";
    }

    //Save all the changes
    oVirDir.CommitChanges();
}
1 голос
/ 19 ноября 2010

Я не делал никакого специального программирования для WebDeploy, но видел ссылку на то, что для этого есть API. Кажется, я не могу найти официальную документацию по этому вопросу, но, возможно, это приложение блога + образец могло бы послужить началом: Веб-приложение API веб-развертывания

...