Membuat direktori virtual di IIS express


124

Apakah ada cara untuk membuat direktori virtual di IIS express? Saya tahu bahwa Cassini tidak dapat melakukan ini dan alangkah baiknya dapat melakukan ini tanpa menggunakan versi lengkap IIS.

Saya sudah mendapatkannya sejauh ini sehingga saya dapat menelusuri aplikasi saya secara lokal di IIS express seperti ini:

http: // localhost: 1132 /

Yang ingin saya lakukan adalah membuat direktori virtual bernama "OffSiteStuff" dan mengarahkannya ke beberapa lokasi di drive C saya, seperti "c: \ offsitestuff", lalu telusuri item di folder itu seperti ini:

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

Saya tahu saya bisa melakukan ini dengan folder di dalam situs saya dan masih menggunakan IIS Express, atau, dalam hal ini Cassini biasa, tetapi folder ini akan menyimpan gambar yang diunggah oleh pengguna dan saya benar-benar tidak ingin gambar-gambar ini tercampur file aplikasi.

Solusi lain, "go big" adalah dengan menyebarkan situs ke instance Server 2008 IIS 7.5 yang lengkap setiap kali saya ingin men-debug fitur yang menggunakan konten di luar situs, tetapi itu juga agak rumit.

Apakah ada cara agar saya dapat melakukan ini di <System.WebServer />elemen konfigurasi Web?


5
Untuk Visual Studio 2015, mikedice417.wordpress.com/2015/09/13/… bekerja. The applicationHost.configfile di bawah akar proyek: ${PROJECT}\.vs\config\applicationHost.config.
Matt

Di sini ada jawaban yang dapat membantu Anda: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

Jawaban:


129

Konfigurasi IIS express dikelola oleh applicationhost.config.
Anda dapat menemukannya di

Users \ <username> \ Documents \ IISExpress \ config folder.

Di dalamnya Anda dapat menemukan bagian situs yang menyimpan bagian untuk setiap situs yang dikonfigurasi IIS Express.

Tambahkan (atau ubah) bagian situs seperti ini:

<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>

Praktisnya Anda perlu menambahkan tag aplikasi baru di situs Anda untuk setiap direktori virtual. Anda mendapatkan banyak fleksibilitas karena Anda dapat mengatur konfigurasi yang berbeda untuk direktori virtual (misalnya versi .Net Framework yang berbeda)

EDIT Terima kasih kepada Fevzi Apaydın untuk menunjukkan solusi yang lebih elegan.

Anda dapat mencapai hasil yang sama dengan menambahkan satu atau lebih tag virtualDirectory ke tag Aplikasi:

<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>

Referensi:


Setelah menambahkan setiap tag aplikasi untuk setiap direktori Virtual saya tidak dapat menjalankan aplikasi "offsitestuff". Contoh: iisexpress / site: WebSiteWithVirtualDirectory - jalankan aplikasi pertama dari jalur "C: \ temp \ website1". Bagaimana saya bisa menjalankan aplikasi kedua saya yang berisi jalur "d: \ temp \ SubFolderApp"
Velu

Di bagian binding Anda melihat url dan port yang digunakan untuk mengakses root situs Anda. Jadi: localhost: 1132 adalah url untuk aplikasi web yang diinstal di c: \ temp \ website1 localhost: 1132 / OffSiteStuff adalah url untuk aplikasi web yang diinstal di d: \ temp \ SubFolderApp.
Be.St.

Adakah yang tahu jika / bagaimana saya dapat mengonfigurasi pengaturan secara terpisah untuk setiap proyek (jadi saya dapat memeriksa di konfigurasi)? Terima kasih
Ian Grainger

1
@Terbaik. Saya ingin hal-hal seperti nomor port untuk situs IIS sama untuk semua pengembang - jadi saya ingin memeriksa (beberapa) konfigurasinya. Tetapi saya tidak dapat melakukannya dari lokasinya saat ini. Ingin tahu apakah saya bisa mengarahkannya ke file lain dengan gaya UserAppSettings dll.
Ian Grainger

26
Catatan: Meskipun instruksi ini masih berlaku untuk Visual Studio 2015, lokasi applicationhost.configtelah berubah. Lebih masuk akal dari versi sebelumnya, sekarang terletak di .vs\configsub folder folder solusi Anda.
Richard Moss

91

Pendekatan @ Be.St benar, tapi tidak lengkap. Saya hanya menyalin penjelasannya dengan mengoreksi bagian yang salah.

Konfigurasi IIS express dikelola oleh applicationhost.config.
Anda dapat menemukannya di

Users \ <username> \ Documents \ IISExpress \ config folder.

Di dalamnya Anda dapat menemukan bagian situs yang menyimpan bagian untuk setiap situs yang dikonfigurasi IIS Express.

Tambahkan (atau ubah) bagian situs seperti ini:

<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>

Alih-alih menambahkan blok aplikasi baru, Anda cukup menambahkan elemen virtualDirectory baru ke elemen induk aplikasi.

Edit - Visual Studio 2015

Jika Anda mencari file applicationHost.config dan menggunakan VS2015, Anda akan menemukannya di:

[direktori_ solusi] /. vs / config / applicationHost.config


4
Apakah ada cara untuk menerapkan ini dalam proyek Visual Studio? Dalam lingkungan multi-pengembang, jika orang lain memeriksa kode di mesin mereka, maka IIS Express lokal mereka tidak akan dikonfigurasi dengan direktori virtual dan menyebabkan kesalahan runtime bukan?
ahillier88

4
Di Visual Studio 2015, file konfigurasi IIS disimpan di direktori solusi, di folder bernama .vs / config, sehingga Anda dapat memeriksanya ke kontrol sumber jika Anda mau.
Randy Gamage

Begitu banyak non-jawaban membanjiri hasil google untuk pertanyaan ini sehubungan dengan VS 2012. Berhasil !!!!
Tim Ogilvy

Apakah mungkin menambahkan aplikasi terpisah ke direktori virtual di IIS express sehingga saya bisa memiliki dua aplikasi di bawah satu domain?
Denys Alexieiev

6

Di VS2013 saya melakukan ini dengan langkah-langkah berikut:

1. Klik kanan proyek aplikasi web dan tekan Properties

2. Lihat tab "Web" pada halaman Properti

3. Di bawah Server, dengan "IIS Express" menjadi pilihan default dropdown, di "Project Url" ubah url menggunakan nomor port ke nomor yang sesuai untuk Anda. Misalnya saya menghapus nomor port dan menambahkan "/ MVCDemo4" setelah localhost.

4. Klik tombol "Buat Direktori Virtual".

5. Jalankan proyek Anda dan url baru akan digunakan


1
Ini tidak memungkinkan Anda mengkonfigurasi jalur fisik.
Victorio Berra

2

Jika Anda menggunakan Visual Studio 2013 (mungkin memerlukan edisi Pro atau lebih tinggi), saya dapat menambahkan direktori virtual ke situs web IIS Express (berbasis file) dengan mengklik kanan situs web di Solution Explorer dan mengklik Tambah> Direktori Virtual Baru. Ini menambahkan entri ke file applicationhost.config seperti dengan metode manual yang dijelaskan di sini.



0

Aku punya sesuatu yang lain, file itu sendiri yang tidak dapat diakses di lingkungan SBS.

Hapus file di folder config (jika Anda tidak dapat membukanya!) Dan ganti dengan salinan folder di pc lokal Anda sendiri.

Memperbaiki itu untuk saya :)


File di Users \ <username> \ Documents \ IISExpress \ config dilindungi per-pengguna. Mungkin Anda pernah mencoba mengeditnya dengan pengguna lain. Jadi untuk mengeditnya Anda perlu menjalankan Notepad (atau editor Anda) dalam mode Administrasi. Dengan cara ini Anda dapat memodifikasinya. Atau hapus dan salin seperti yang Anda lakukan :-)
Be.St.

0

Saya harus membuat entri di file [project] .vs \ config \ applicationhost.config.

Sebelumnya, ini bekerja dari penerapan tetapi tidak dari kode.


0

Sebagai jawaban untuk pertanyaan selanjutnya -

"apakah ada cara untuk menerapkan ini dalam proyek Visual Studio? Dalam lingkungan multi-pengembang, jika orang lain memeriksa kode di mesin mereka, maka IIS Express lokal mereka tidak akan dikonfigurasi dengan direktori virtual dan menyebabkan kesalahan runtime tidak akan bukan? "

Saya tidak pernah menemukan jawaban yang konsisten untuk ini di mana pun, tetapi kemudian menemukan bahwa Anda dapat melakukannya dengan acara pasca pembuatan menggunakan tugas XmlPoke di file proyek untuk situs web -

<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>

Anda dapat menggunakan teknik ini untuk menunjuk kembali apa pun di file sebelum IISExpress dijalankan. Ini akan memungkinkan Anda untuk awalnya memaksa file applicationHost.config ke GIT (dengan asumsi itu diabaikan oleh gitignore) lalu kemudian menunjuk kembali semua jalur pada waktu pembuatan. GIT akan mengabaikan setiap perubahan pada file sehingga sekarang mudah untuk membagikannya.

Sebagai jawaban untuk pertanyaan lebih lanjut tentang menambahkan aplikasi lain di bawah satu situs:

Anda dapat membuat situs di file host aplikasi Anda seperti yang ada di server Anda. Sebagai contoh:

  <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>

Kemudian gunakan teknik di atas untuk mengubah lokasi folder pada waktu pembuatan.


Apakah mungkin menambahkan aplikasi terpisah ke direktori virtual di IIS express sehingga saya bisa memiliki dua aplikasi di bawah satu domain?
Denys Alexieiev
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.