การสร้างไดเรกทอรีเสมือนใน IIS express


124

มีวิธีใดในการสร้างไดเรกทอรีเสมือนใน IIS express หรือไม่ ฉันรู้ว่าแคสสินีไม่สามารถทำสิ่งนี้ได้และมันคงจะดีที่สามารถทำได้โดยไม่ต้องใช้ IIS เวอร์ชันเต็ม

จนถึงตอนนี้ฉันสามารถเรียกดูแอปพลิเคชันของฉันในเครื่อง IIS express ได้ดังนี้:

http: // localhost: 1132 /

สิ่งที่ฉันต้องการจะทำคือสร้างไดเรกทอรีเสมือนที่เรียกว่า "OffSiteStuff" และชี้ไปที่ตำแหน่งบางส่วนบนไดรฟ์ C ของฉันเช่น "c: \ offsitestuff" จากนั้นเรียกดูรายการในโฟลเดอร์นั้นดังนี้:

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

ฉันรู้ว่าฉันสามารถทำได้กับโฟลเดอร์ภายในไซต์ของฉันและยังคงใช้ IIS Express หรือสำหรับเรื่องนั้น Cassini รุ่นเก่า แต่โฟลเดอร์นี้จะเก็บภาพที่อัปโหลดโดยผู้ใช้และฉันไม่ต้องการให้ภาพเหล่านี้ปะปน ไฟล์แอปพลิเคชัน

อีกวิธีหนึ่งคือการปรับใช้ไซต์บนอินสแตนซ์ Server 2008 IIS 7.5 แบบเต็มทุกครั้งที่ฉันต้องการดีบักคุณลักษณะที่ใช้เนื้อหานอกสถานที่ แต่ก็ค่อนข้างยุ่งยากเช่นกัน

มีวิธีใดบ้างที่ฉันสามารถทำได้ใน<System.WebServer />องค์ประกอบการกำหนดค่าเว็บ


5
สำหรับ Visual Studio 2015 mikedice417.wordpress.com/2015/09/13/…ใช้งานได้ ไฟล์ภายใต้รากโครงการ:applicationHost.config ${PROJECT}\.vs\config\applicationHost.config
Matt

มีคำตอบที่สามารถช่วยคุณได้ที่นี่: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

คำตอบ:


129

การกำหนดค่า IIS express ได้รับการจัดการโดย applicationhost.config
คุณสามารถค้นหาได้ใน

โฟลเดอร์ Users \ <username> \ Documents \ IISExpress \ config

ภายในคุณจะพบส่วนไซต์ที่มีส่วนสำหรับไซต์ที่กำหนดค่า IIS Express แต่ละไซต์

เพิ่ม (หรือแก้ไข) ส่วนของไซต์เช่นนี้:

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

ในทางปฏิบัติคุณต้องเพิ่มแท็กแอปพลิเคชันใหม่ในไซต์ของคุณสำหรับไดเรกทอรีเสมือนแต่ละรายการ คุณมีความยืดหยุ่นอย่างมากเนื่องจากคุณสามารถตั้งค่าคอนฟิกูเรชันที่แตกต่างกันสำหรับไดเร็กทอรีเสมือน (ตัวอย่างเช่น. Net Framework เวอร์ชันอื่น)

แก้ไข ขอบคุณ Fevzi Apaydınที่ชี้ให้เห็นโซลูชันที่หรูหรายิ่งขึ้น

คุณสามารถบรรลุผลลัพธ์เดียวกันได้โดยการเพิ่มแท็ก virtualDirectory อย่างน้อยหนึ่งแท็กลงในแท็ก Application:

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

อ้างอิง:


หลังจากเพิ่มแท็กแอปพลิเคชันแต่ละรายการสำหรับไดเรกทอรีเสมือนแต่ละรายการฉันไม่สามารถเรียกใช้แอปพลิเคชัน "offsitestuff" ได้ เช่น iisexpress / site: WebSiteWithVirtualDirectory - เรียกใช้แอปแรกจากพา ธ "C: \ temp \ website1" ฉันจะเรียกใช้แอปที่ 2 ที่มีเส้นทาง "d: \ temp \ SubFolderApp" ได้อย่างไร
Velu

ในส่วนการเชื่อมโยงคุณจะเห็น url และพอร์ตที่ใช้ในการเข้าถึงรูทของไซต์ของคุณ ดังนั้น: localhost: 1132คือ url สำหรับเว็บแอปพลิเคชันที่ติดตั้งใน c: \ temp \ website1 localhost: 1132 / OffSiteStuffคือ url สำหรับเว็บแอปพลิเคชันที่ติดตั้งใน d: \ temp \ SubFolderApp
บี.เอส.ที.

มีใครทราบบ้างว่าฉันสามารถกำหนดการตั้งค่าแยกกันสำหรับแต่ละโครงการได้อย่างไร (ฉันสามารถตรวจสอบการกำหนดค่าได้) ขอบคุณ
Ian Grainger

1
@ Be.St ฉันต้องการให้หมายเลขพอร์ตสำหรับไซต์ IIS เหมือนกันสำหรับนักพัฒนาทุกคนดังนั้นฉันต้องการตรวจสอบ (บางส่วน) การกำหนดค่าใน แต่ฉันไม่สามารถทำได้จากตำแหน่งปัจจุบัน สงสัยว่าฉันสามารถชี้ไปที่ไฟล์อื่นในรูปแบบของ UserAppSettings ได้หรือไม่
Ian Grainger

26
หมายเหตุ: แม้ว่าคำแนะนำเหล่านี้จะยังคงใช้กับ Visual Studio 2015 แต่ตำแหน่งของapplicationhost.configมีการเปลี่ยนแปลง อย่างสมเหตุสมผลกว่าเวอร์ชันก่อนหน้านี้ตอนนี้อยู่ใน.vs\configโฟลเดอร์ย่อยของโฟลเดอร์โซลูชันของคุณ
Richard Moss

91

@ Be.St.'s aprroach เป็นเรื่องจริง แต่ไม่สมบูรณ์ ฉันแค่คัดลอกคำอธิบายของเขาพร้อมกับแก้ไขส่วนที่ไม่ถูกต้อง

การกำหนดค่า IIS express ได้รับการจัดการโดย applicationhost.config
คุณสามารถค้นหาได้ใน

โฟลเดอร์ Users \ <username> \ Documents \ IISExpress \ config

ภายในคุณจะพบส่วนไซต์ที่มีส่วนสำหรับไซต์ที่กำหนดค่า IIS Express แต่ละไซต์

เพิ่ม (หรือแก้ไข) ส่วนของไซต์เช่นนี้:

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

แทนที่จะเพิ่มบล็อกแอปพลิเคชันใหม่คุณควรเพิ่มองค์ประกอบ virtualDirectory ใหม่ให้กับองค์ประกอบหลักของแอปพลิเคชัน

แก้ไข - Visual Studio 2015

หากคุณกำลังมองหาไฟล์ applicationHost.config และคุณกำลังใช้ VS2015 คุณจะพบมันใน:

[solution_directory] /. VS / config / applicationHost.config


4
มีการใช้สิ่งนี้ภายในโครงการ Visual Studio หรือไม่ ในสภาพแวดล้อมที่มีผู้พัฒนาหลายรายหากมีผู้อื่นตรวจสอบโค้ดในเครื่องของตน IIS Express ในเครื่องของพวกเขาจะไม่ถูกกำหนดค่าด้วยไดเรกทอรีเสมือนและทำให้เกิดข้อผิดพลาดรันไทม์ใช่หรือไม่
ahillier88

4
ใน Visual Studio 2015 ไฟล์กำหนดค่า IIS จะถูกเก็บไว้ในไดเร็กทอรีโซลูชันในโฟลเดอร์ที่เรียกว่า. vs / config ดังนั้นคุณสามารถตรวจสอบในการควบคุมแหล่งที่มาได้หากคุณต้องการ
Randy Gamage

คำตอบที่ไม่ตอบกลับจำนวนมากทำให้ Google เกิดปัญหาสำหรับคำถามนี้เกี่ยวกับ VS 2012 ซึ่งได้ผล !!!!
Tim Ogilvy

เป็นไปได้หรือไม่ที่จะเพิ่มแอปพลิเคชันแยกต่างหากลงในไดเร็กทอรีเสมือนใน IIS express เพื่อให้ฉันมีสองแอปพลิเคชันภายใต้โดเมนเดียว
Denys Alexieiev

6

ใน VS2013 ฉันทำตามขั้นตอนต่อไปนี้:

1. คลิกขวาที่โครงการเว็บแอปพลิเคชันแล้วกด Properties

2. ดูแท็บ "เว็บ" ของหน้าคุณสมบัติ

3. ภายใต้เซิร์ฟเวอร์โดยมี "IIS Express" เป็นตัวเลือกเริ่มต้นของเมนูแบบเลื่อนลงใน "Project Url" ให้เปลี่ยน url โดยใช้หมายเลขพอร์ตเป็นหมายเลขที่เหมาะสมกับคุณ ตัวอย่างเช่นฉันลบหมายเลขพอร์ตและเพิ่ม "/ MVCDemo4" หลัง localhost

4. คลิกปุ่ม "สร้างไดเรกทอรีเสมือน"

5. เรียกใช้โครงการของคุณและจะใช้ url ใหม่


1
สิ่งนี้ไม่อนุญาตให้คุณกำหนดค่าเส้นทางทางกายภาพ
Victorio Berra

2

หากคุณใช้ Visual Studio 2013 (อาจต้องใช้รุ่น Pro ขึ้นไป) ฉันสามารถเพิ่มไดเรกทอรีเสมือนไปยังเว็บไซต์ IIS Express (ตามไฟล์) ได้โดยคลิกขวาที่เว็บไซต์ใน Solution Explorer แล้วคลิกเพิ่ม> ไดเรกทอรีเสมือนใหม่ สิ่งนี้เพิ่มรายการไปยังไฟล์ applicationhost.config เช่นเดียวกับวิธีการแบบแมนนวลที่อธิบายไว้ที่นี่



0

ฉันมีอย่างอื่นไฟล์เองที่ไม่สามารถเข้าถึงได้ในสภาพแวดล้อม SBS

ลบไฟล์ในโฟลเดอร์ config (ถ้าคุณไม่สามารถเปิดได้!) และแทนที่ด้วยสำเนาของโฟลเดอร์ในเครื่องพีซีของคุณเอง

แก้ไขให้ฉัน :)


ไฟล์ใน Users \ <username> \ Documents \ IISExpress \ config ได้รับการป้องกันต่อผู้ใช้ บางทีคุณอาจพยายามแก้ไขด้วยผู้ใช้รายอื่น ดังนั้นในการแก้ไขคุณต้องเรียกใช้ Notepad (หรือตัวแก้ไขของคุณ) ในโหมดการดูแลระบบ ด้วยวิธีนี้คุณสามารถแก้ไขได้ หรือลบและคัดลอกเหมือนที่คุณทำ :-)
Be.St.

0

ฉันต้องสร้างรายการในไฟล์ [project] .vs \ config \ applicationhost.config

ก่อนหน้านี้ใช้งานได้จากการปรับใช้ แต่ไม่ใช่จากโค้ด


0

เพื่อตอบคำถามเพิ่มเติม -

"จะมีการใช้สิ่งนี้ภายในโครงการ Visual Studio หรือไม่ในสภาพแวดล้อมที่มีผู้พัฒนาหลายคนหากมีผู้อื่นตรวจสอบรหัสบนเครื่องของตน IIS Express ในเครื่องของพวกเขาจะไม่ถูกกำหนดค่าด้วยไดเรกทอรีเสมือนและทำให้เกิดข้อผิดพลาดรันไทม์ มันไม่ใช่เหรอ "

ฉันไม่เคยพบคำตอบที่สอดคล้องกันสำหรับสิ่งนี้ แต่จากนั้นก็พบว่าคุณสามารถทำได้ด้วยเหตุการณ์สร้างโพสต์โดยใช้งาน XmlPoke ในไฟล์โครงการสำหรับเว็บไซต์ -

<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 จะเริ่มทำงาน สิ่งนี้จะช่วยให้คุณบังคับไฟล์ applicationHost.config ใน GIT ได้ในขั้นต้น (สมมติว่า gitignore ถูกละเว้น) จากนั้นจึงกำหนดเส้นทางทั้งหมดใหม่ในเวลาสร้าง GIT จะเพิกเฉยต่อการเปลี่ยนแปลงใด ๆ ในไฟล์ดังนั้นตอนนี้จึงสามารถแบ่งปันได้อย่างง่ายดาย

เพื่อตอบคำถามต่อไปเกี่ยวกับการเพิ่มแอปพลิเคชันอื่น ๆ ในไซต์เดียว:

คุณสามารถสร้างไซต์ในไฟล์โฮสต์แอปพลิเคชันของคุณได้เช่นเดียวกับไซต์บนเซิร์ฟเวอร์ของคุณ ตัวอย่างเช่น:

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

จากนั้นใช้เทคนิคข้างต้นเพื่อเปลี่ยนตำแหน่งโฟลเดอร์ในเวลาสร้าง


เป็นไปได้หรือไม่ที่จะเพิ่มแอปพลิเคชันแยกต่างหากลงในไดเร็กทอรีเสมือนใน IIS express เพื่อให้ฉันมีสองแอปพลิเคชันภายใต้โดเมนเดียว
Denys Alexieiev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.