2010-11-19 6 views
6

Lors du développement d'un site sur VS2010/IIS 7.5, j'utilise Web Deploy pour publier le site de mon ordinateur sur le serveur du site de développement.IIS web deploy - créer des répertoires virtuels?

Le site dispose d'environ 40 répertoires virtuels, et j'aimerais les créer automagiquement sur le serveur pendant le déploiement. Y a-t-il un moyen simple de le faire?

Je considère écrire une petite application qui chargerait la liste d'un fichier ou d'une base de données et les créerais à la demande. Les répertoires ont des chemins physiques différents sur ma machine de développement que sur le serveur web, ce qui jette un coup d'oeil dans les travaux.

+0

40 répertoires virtuels? Vous avez donc 40 applications différentes. Hmmm, cela semble beaucoup. Quel genre de site développez-vous? Je connais les petits hébergeurs qui ont moins de répertoires virtuels sur leur serveur que vous :-) –

+0

Non, ce n'est pas 40 applications différentes. Je migre progressivement une énorme application ASP classique vers .NET MVC (400k + lignes de code et plus de 100.000 pages). Les dossiers virt permettent au nouveau site d'accéder à l'ancien contenu aux URL existantes. –

Répondre

6

Si vous utilisez MSBuild pour votre déploiement Web, vous pouvez écrire une CustomBuildTask dans .net que vous pouvez utilisez pour créer votre répertoire virtuel.

Il y a beaucoup de ressources sur la façon de créer et de consommer une tâche de construction personnalisée, mais voici le code que j'utilise pour créer un répertoire virtuel à l'aide d'une tâche de génération personnalisée:

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

Merci pour l'exemple de code. J'espérais (bien sûr) quelque chose qui serait un peu plus automatisé, mais cela fera certainement le travail. –

1

Je n'ai pas fait de programmation personnalisée sur WebDeploy, mais j'ai vu des références indiquant qu'il existe une API pour cela. Je n'arrive pas à trouver la documentation officielle, mais peut-être que ce blog + exemple d'application pourrait fournir un début: Web Deploy API Web Application

Questions connexes