Iis web implantar - criar diretórios virtuais?
-
26-09-2019 - |
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.
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