Pergunta

Ao desenvolver um site no VS2010/IIS 7.5, estou usando a Web implantando para publicar o site da minha máquina para o servidor de sites de dev.

O site possui cerca de 40 diretórios virtuais e eu gostaria de criá -los automaticamente no servidor durante a implantação. Existe uma maneira simples de fazer isso?

Estou pensando em escrever um pequeno aplicativo que carregaria a lista de um arquivo ou banco de dados e os criaria sob demanda. Os diretórios têm caminhos físicos diferentes na minha máquina de desenvolvimento do que no servidor da Web, o que lança uma chave nas obras.

Foi útil?

Solução

Se você estiver usando o msbuild para sua implantação da web, poderá escrever uma fase personalizada no .NET que você pode usar para criar seu diretório virtual.

Existem muitos recursos sobre como criar e consumir uma tarefa de construção personalizada, mas aqui está o código que eu uso para criar um diretório virtual usando uma tarefa de construção personalizada:

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();
}

Outras dicas

Não fiz nenhuma programação personalizada contra o WebDeploy, mas vi referência de que existe uma API para isso. Não consigo encontrar documentação oficial, mas talvez este aplicativo de blog+amostra possa fornecer um começo: Aplicativo da Web da API de implantação da web

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top