2010-11-19 16 views
6

VS2010/IIS 7.5 üzerinde bir site geliştirirken, sitemi makinemden dev site sunucusuna yayımlamak için Web Deploy kullanıyorum.IIS web dağıtımı - sanal dizinler oluşturulsun mu?

Sitede, yaklaşık 40 sanal dizin var ve dağıtım sırasında sunucudakileri otomatik olarak oluşturmak istiyorum. Bunu yapmanın kolay bir yolu var mı?

Listeyi bir dosyadan veya veritabanından yükleyecek ve istek üzerine oluşturabilecek küçük bir uygulama yazmayı düşünüyorum. Dizinler, geliştirme makinemde web sunucusundan farklı fiziksel yollara sahip.

+0

40 sanal dizinleri? Yani 40 farklı uygulama var. Hmmm, bu çok gibi görünüyor. Ne tür bir site geliştiriyorsunuz? Sunucularına daha az sanal dizinleri olan küçük barındırma sağlayıcılarını biliyorum :-) –

+0

Hayır, 40 farklı uygulama değil. Ben yavaş yavaş büyük (400k + satır kod ve 100.000'den fazla sayfa) klasik ASP uygulamasını .NET MVC'ye geçiriyorum. Yeni klasörler, yeni sitenin mevcut URL'lerdeki eski içeriğe erişmesine izin verir. –

cevap

6

Web dağıtımınız için MSBuild kullanıyorsanız, .Net'de bir CustomBuildTask yazabilirsiniz. sanal dizini oluşturmak için kullanın.

Orada oluşturmak ve özel yapı görevi tüketmek için nasıl kaynakların bir yeri vardır, ama burada özel bir yapı görevi kullanarak sanal dizin oluşturmak için kullandığınız koddur:

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

Kod örneği için teşekkürler. Biraz daha otomatik olacak bir şey umuyordum (tabii ki), ama bu kesinlikle işi bitirecek. –

1

WebDeploy'a karşı herhangi bir özel programlama yapmadım, ancak bunun için bir API olduğunu belirttim. Bunun üzerine resmi belgeleri bulamıyorum, ancak belki de bu blog + örnek uygulaması bir başlangıç ​​sağlayabilir: Web Deploy API Web Application