IIS express'te sanal dizinler oluşturma


124

IIS express'te sanal dizin oluşturmanın herhangi bir yolu var mı? Cassini'nin bunu yapamayacağını biliyorum ve bunu IIS'nin tam sürümünü kullanmadan yapabilmek güzel olurdu.

Şu ana kadar buldum ki, IIS'de uygulamama yerel olarak şu şekilde göz atabilirim:

http: // localhost: 1132 /

Yapmak istediğim şey, "OffSiteStuff" adlı sanal bir dizin oluşturmak ve onu C sürücümde "c: \ offsitestuff" gibi bir konuma yönlendirmek ve ardından bu klasördeki öğelere şu şekilde göz atmaktır:

http: // localhost: 1132 / OffSiteStuff / UserUploadedImage.jpg

Bunu sitemdeki bir klasörle yapabileceğimi ve hala IIS Express kullanabileceğimi veya bu konuda eski Cassini'yi kullanabileceğimi biliyorum, ancak bu klasör kullanıcılar tarafından yüklenen resimleri depolayacak ve bu resimlerin karıştırılmasını gerçekten istemiyorum uygulama dosyaları.

Diğer, "büyük" çözüm, site dışı içeriği kullanan özelliklerde hata ayıklamak istediğim her seferde siteyi tam gelişmiş bir Server 2008 IIS 7.5 örneğine dağıtmaktır, ancak bu da biraz külfetli.

Bunu <System.WebServer />Web yapılandırma öğesinde yapabilmemin bir yolu var mı ?


5
Visual Studio 2015 için mikedice417.wordpress.com/2015/09/13/… çalıştı. applicationHost.configDosya proje kökü altındadır: ${PROJECT}\.vs\config\applicationHost.config.
Matt

İşte size yardımcı olabilecek bir cevap var: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

Yanıtlar:


129

IIS express yapılandırması, applicationhost.config tarafından yönetilir.
İçinde bulabilirsin

Kullanıcılar \ <kullanıcı adı> \ Documents \ IISExpress \ config klasörü.

İçeride, IIS Express yapılandırılmış her site için bir bölüm içeren siteler bölümünü bulabilirsiniz.

Aşağıdaki gibi bir site bölümü ekleyin (veya değiştirin):

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
   </application>
   <application path="/OffSiteStuff" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="d:\temp\SubFolderApp" />
   </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Pratik olarak sitenize her sanal dizin için yeni bir uygulama etiketi eklemeniz gerekir. Sanal dizin için farklı konfigürasyon ayarlayabildiğiniz için çok fazla esneklik elde edersiniz (örneğin farklı bir .Net Framework sürümü)

DÜZENLE Fevzi Apaydın'a daha şık bir çözüme işaret etmesi için teşekkürler.

Uygulama etiketine bir veya daha fazla virtualDirectory etiketi ekleyerek aynı sonucu elde edebilirsiniz:

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
     <virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
   </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Referans:


Her Sanal dizin için her bir uygulama etiketini ekledikten sonra "offsitestuff" uygulamasını çalıştıramadım. Ör: iisexpress / site: WebSiteWithVirtualDirectory - ilk uygulamayı "C: \ temp \ website1" yolundan çalıştırın. "D: \ temp \ SubFolderApp" yolunu içeren 2. uygulamamı nasıl çalıştırabilirim
Velu

Bağlamalar bölümünde sitenizin köküne erişmek için kullanılan url ve bağlantı noktasını görürsünüz. Yani: localhost: 1132 , c: \ temp \ website1'e yüklenen web uygulamasının url'sidir localhost: 1132 / OffSiteStuff , d: \ temp \ SubFolderApp'de kurulu web uygulamasının url'sidir.
Be.St.

Ayarları her proje için ayrı ayrı yapılandırıp yapılandıramayacağımı / nasıl yapılandırabileceğimi bilen var mı (böylece yapılandırmayı kontrol edebilirim)? Teşekkürler
Ian Grainger

1
@En iyi. Bir IIS sitesinin bağlantı noktası numarası gibi şeylerin tüm geliştiriciler için aynı olmasını istiyorum - bu nedenle yapılandırmayı (bazılarını) kontrol etmek istiyorum. Ancak bunu mevcut konumundan yapamıyorum. Ben UserAppSettings vb tarzında başka bir dosyaya işaret olabilir acaba
Ian Grainger

26
Not: Bu talimatlar hala Visual Studio 2015 için geçerli olsa da konumu applicationhost.configdeğişmiştir. Önceki sürümlerden daha mantıklı, artık .vs\configçözüm klasörünüzün alt klasöründe yer almaktadır .
Richard Moss

91

@ Be.St.'nin yaklaşımı doğru, ancak eksik. Yanlış kısmı düzelterek açıklamasını kopyalıyorum.

IIS express yapılandırması, applicationhost.config tarafından yönetilir.
İçinde bulabilirsin

Kullanıcılar \ <kullanıcı adı> \ Documents \ IISExpress \ config klasörü.

İçeride, IIS Express yapılandırılmış her site için bir bölüm içeren siteler bölümünü bulabilirsiniz.

Aşağıdaki gibi bir site bölümü ekleyin (veya değiştirin):

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
     <virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
   </application>
   <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Yeni bir uygulama bloğu eklemek yerine, uygulama ana öğesine yeni bir virtualDirectory öğesi eklemelisiniz.

Düzenleme - Visual Studio 2015

ApplicationHost.config dosyasını arıyorsanız ve VS2015 kullanıyorsanız, onu şurada bulabilirsiniz:

[Solution_directory] /. V / yapılandırma / applicationHost.config


4
Bunu Visual Studio projesine uygulamak için herhangi bir yol var mı? Çok geliştiricili bir ortamda, başka biri kendi makinesindeki kodu kontrol ederse, yerel IIS Express sanal dizinle yapılandırılmaz ve çalışma zamanı hatalarına neden olmaz, değil mi?
ahillier88

4
Visual Studio 2015'te, IIS yapılandırma dosyası çözüm dizininde .vs / config adlı bir klasörde depolanır, böylece isterseniz bunu kaynak denetimine ekleyebilirsiniz.
Randy Gamage

VS 2012 ile ilgili olarak bu soru için çok sayıda yanıt olmayan Google sonuçları sel oluyor. Bu işe yarıyor !!!!
Tim Ogilvy

IIS express'teki sanal dizine ayrı bir uygulama eklemek mümkün mü, böylece bir etki alanı altında iki uygulamaya sahip olabilir miyim?
Denys Alexieiev

6

VS2013'te bunu aşağıdaki adımlarda yaptım:

1. Web uygulaması projesine sağ tıklayın ve Özellikler'e basın

2. Özellikler sayfasının "Web" sekmesini görüntüleyin

3. Sunucular altında, açılır listenin varsayılan seçimi "IIS Express" olacak şekilde, "Proje URL'si" nde bağlantı noktası numarasını kullanarak url'yi size uygun olanla değiştirin. Örneğin port numarasını sildim ve localhost'tan sonra "/ MVCDemo4" ekledim.

4. "Sanal Dizin Oluştur" düğmesini tıklayın.

5. Projenizi çalıştırın ve yeni url kullanılacaktır


1
Bu, fiziksel yolu yapılandırmanıza izin vermez.
Victorio Berra

2

Visual Studio 2013 kullanıyorsanız (Pro sürümü veya üstü gerektirebilir), Çözüm Gezgini'nde web sitesine sağ tıklayıp Ekle> seçeneğine tıklayarak bir IIS Express (dosya tabanlı) web sitesine sanal bir dizin ekleyebildim Yeni Sanal Dizin. Bu, applicationhost.config dosyasına, burada açıklanan manuel yöntemlerde olduğu gibi bir girdi ekledi.



0

Başka bir şeyim vardı, SBS ortamında erişilemeyen dosyaların kendisi.

Yapılandırma klasöründeki dosyaları silin (açamazsanız!) Ve kendi yerel bilgisayarınızdaki klasörün bir kopyasıyla değiştirin.

Benim için düzeltildi :)


Kullanıcılar \ <kullanıcı adı> \ Belgeler \ IISExpress \ config içindeki dosyalar kullanıcı başına korumalıdır. Belki farklı bir kullanıcıyla düzenlemeyi denediniz. Bu yüzden düzenlemek için Yönetim modunda Not Defteri'ni (veya düzenleyicinizi) çalıştırmanız gerekir. Bu şekilde onu değiştirebilirsiniz. Veya yaptığınız gibi silin ve kopyalayın :-)
Be.St.

0

[Project] .vs \ config \ applicationhost.config dosyasında girişi yapmam gerekiyordu.

Bundan önce, dağıtımdan çalıştı ancak koddan değil.


0

Sonraki soruya cevap olarak -

"Bunu Visual Studio projesinde uygulamak için bir yol var mı? Çok geliştiricili bir ortamda, başka biri kendi makinesindeki kodu kontrol ederse, yerel IIS Express sanal dizinle yapılandırılmaz ve çalışma zamanı hatalarına neden olmaz değil mi? "

Buna hiçbir zaman tutarlı bir cevap bulamadım ama sonra bunu web sitesi için proje dosyasındaki XmlPoke görevini kullanarak bir post build olayı ile yapabileceğinizi anladım -

<Target Name="AfterBuild">
    <!-- Get the local directory root (and strip off the website name) -->
    <PropertyGroup>
        <LocalTarget>$(ProjectDir.Replace('MyWebSite\', ''))</LocalTarget>
    </PropertyGroup>

    <!-- Now change the virtual directories as you need to -->
    <XmlPoke XmlInputPath="..\..\Source\Assemblies\MyWebSite\.vs\MyWebSite\config\applicationhost.config" 
        Value="$(LocalTarget)AnotherVirtual" 
        Query="/configuration/system.applicationHost/sites/site[@name='MyWebSite']/application[@path='/']/virtualDirectory[@path='/AnotherVirtual']/@physicalPath"/>
</Target>

IISExpress başlamadan önce dosyadaki herhangi bir şeyi yeniden işaretlemek için bu tekniği kullanabilirsiniz. Bu, başlangıçta bir applicationHost.config dosyasını GIT'e zorlamanıza (gitignore tarafından yok sayıldığını varsayarak) ve ardından derleme zamanında tüm yolları yeniden işaretlemenize izin verir. GIT, dosyadaki herhangi bir değişikliği göz ardı eder, böylece bunları paylaşmak artık çok kolay.

Bir sitenin altına başka uygulamaların eklenmesi hakkındaki diğer soruya yanıt olarak:

Siteyi, sunucunuzdakine benzer şekilde uygulama ana bilgisayar dosyanızda oluşturabilirsiniz. Örneğin:

  <site name="MyWebSite" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\GIT\MyWebSite\Main" />
      <virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
      <virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
    </application>
    <application path="/AppSubSite" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\GIT\AppSubSite\" />
      <virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
      <virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:4076:localhost" />
    </bindings>
  </site>

Ardından, derleme zamanında klasör konumlarını değiştirmek için yukarıdaki tekniği kullanın.


IIS express'teki sanal dizine ayrı bir uygulama eklemek mümkün mü, böylece bir etki alanı altında iki uygulamaya sahip olabilir miyim?
Denys Alexieiev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.