IIS एक्सप्रेस में वर्चुअल निर्देशिका बनाना


124

क्या IIS एक्सप्रेस में वर्चुअल निर्देशिका बनाने का कोई तरीका है? मुझे पता है कि कैसिनी ऐसा नहीं कर सकती है और IIS के पूर्ण संस्करण का उपयोग किए बिना ऐसा करने में सक्षम होना अच्छा होगा।

मुझे अब तक यह मिला है कि मैं इस तरह से IIS एक्सप्रेस में अपने आवेदन को स्थानीय रूप से ब्राउज़ कर सकता हूं:

http: // localhost: 1132 /

मैं जो करना चाहता हूं, वह "OffSiteStuff" नामक एक वर्चुअल निर्देशिका बनाता है और इसे मेरी C ड्राइव पर कुछ स्थान पर इंगित करता है, जैसे "c: \ offsitestuff" और फिर इस तरह से उस फ़ोल्डर में आइटम ब्राउज़ करें:

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

मुझे पता है कि मैं अपनी साइट के भीतर एक फ़ोल्डर के साथ ऐसा कर सकता हूं और अभी भी आईआईएस एक्सप्रेस का उपयोग कर सकता हूं, या, उस मामले के लिए पुरानी कैसिनी का उपयोग कर सकता हूं, लेकिन यह फ़ोल्डर उपयोगकर्ताओं द्वारा अपलोड की गई छवियों को संग्रहीत करेगा और मैं वास्तव में इन छवियों के साथ मिश्रित नहीं होना चाहता हूं आवेदन फ़ाइलें।

अन्य, "गो बड़ा" समाधान साइट को एक पूर्ण विकसित सर्वर 2008 IIS 7.5 उदाहरण पर तैनात करना है, हर बार मैं ऑफसाइट सामग्री का उपयोग करने वाली सुविधाओं को डीबग करना चाहता हूं, लेकिन यह थोड़ा बोझिल भी है।

क्या कोई तरीका है जो मैं <System.WebServer />वेब कॉन्फिग तत्व में कर सकता हूं ?


5
विज़ुअल स्टूडियो 2015 के लिए, mikedice417.wordpress.com/2015/09/13/… ने काम किया। applicationHost.configफ़ाइल परियोजना जड़ किया जा रहा है: ${PROJECT}\.vs\config\applicationHost.config
मैट

यहाँ एक उत्तर है जो आपकी सहायता कर सकता है: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

जवाबों:


129

IIS एक्सप्रेस कॉन्फ़िगरेशन को applicationhost.config द्वारा प्रबंधित किया जाता है।
तुम इसमें पा सकते हो

उपयोगकर्ता \ <उपयोगकर्ता नाम> \ दस्तावेज़ \ IISExpress \ config फ़ोल्डर।

अंदर आप उन साइटों अनुभाग को पा सकते हैं जो प्रत्येक IIS एक्सप्रेस कॉन्फ़िगर साइट के लिए एक अनुभाग रखते हैं।

इस तरह एक साइट अनुभाग जोड़ें (या संशोधित करें):

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

व्यावहारिक रूप से आपको प्रत्येक आभासी निर्देशिका के लिए अपनी साइट में एक नया एप्लिकेशन टैग जोड़ने की आवश्यकता है। आपको बहुत अधिक लचीलापन मिलता है क्योंकि आप वर्चुअल निर्देशिका (उदाहरण के लिए एक अलग। नेट फ्रेमवर्क संस्करण) के लिए अलग कॉन्फ़िगरेशन सेट कर सकते हैं।

EDIT धन्यवाद Fevzi Apaydın को और अधिक सुरुचिपूर्ण समाधान को इंगित करने के लिए।

आप अनुप्रयोग टैग में एक या अधिक virtualDirectory टैग जोड़कर समान परिणाम प्राप्त कर सकते हैं:

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

संदर्भ:


प्रत्येक वर्चुअल निर्देशिका के लिए प्रत्येक एप्लिकेशन टैग को जोड़ने के बाद मैं "ऑफ़सिटस्टफ़" एप्लिकेशन को चलाने में सक्षम नहीं था। Ex: iisexpress / site: WebSiteWithVirtualDirectory - पथ "C: \ temp \ website1" से पहला ऐप चलाएं। मैं अपना दूसरा ऐप कैसे चला सकता हूं जिसमें पथ "d: \ temp \ SubFolderApp" शामिल है
वेलु

बाइंडिंग सेक्शन में आप अपनी साइट के रूट तक पहुंचने के लिए इस्तेमाल किया गया यूआरएल और पोर्ट देखते हैं। So: localhost: 1132 c: \ temp \ website1 localhost में स्थापित वेब अनुप्रयोग के लिए url है : 1132 / OffSiteStuff d: \ temp \ SubFolderApp में स्थापित वेब अनुप्रयोग के लिए url है।
बी.एस.टी.

किसी को भी पता है कि क्या / कैसे मैं प्रत्येक प्रोजेक्ट के लिए अलग से सेटिंग्स कॉन्फ़िगर कर सकता हूं (इसलिए मैं कॉन्फ़िगरेशन में जांच कर सकता हूं)? धन्यवाद
इयान ग्रेंजर

1
@श्रेष्ठ। मैं एक आईआईएस साइट के लिए पोर्ट नंबर जैसी चीजें सभी डेवलपर्स के लिए समान होना चाहता हूं - इसलिए मैं कॉन्फ़िगर (कुछ) को कॉन्फ़िगर करना चाहूंगा। लेकिन मैं इसे वर्तमान स्थान से नहीं कर सकता। सोच रहा था कि क्या मैं इसे UserAppSettings आदि की शैली में एक और फ़ाइल के लिए इंगित कर सकता हूं
इयान

26
नोट: जबकि ये निर्देश अभी भी Visual Studio 2015 पर लागू होते हैं, स्थान applicationhost.configबदल गया है। पिछले संस्करणों की तुलना में अधिक समझदारी से, यह अब .vs\configआपके समाधान फ़ोल्डर के उप फ़ोल्डर में स्थित है ।
रिचर्ड मॉस

91

@ Be.St. का एप्रोच सच है, लेकिन अधूरा है। मैं सिर्फ गलत भाग को सही करने के साथ उसकी व्याख्या की नकल कर रहा हूं।

IIS एक्सप्रेस कॉन्फ़िगरेशन को applicationhost.config द्वारा प्रबंधित किया जाता है।
तुम इसमें पा सकते हो

उपयोगकर्ता \ <उपयोगकर्ता नाम> \ दस्तावेज़ \ IISExpress \ config फ़ोल्डर।

अंदर आप उन साइटों अनुभाग को पा सकते हैं जो प्रत्येक IIS एक्सप्रेस कॉन्फ़िगर साइट के लिए एक अनुभाग रखते हैं।

इस तरह एक साइट अनुभाग जोड़ें (या संशोधित करें):

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

एक नया एप्लिकेशन ब्लॉक जोड़ने के बजाय, आपको एप्लिकेशन पैरेंट एलिमेंट में एक नया वर्चुअलडायरेक्ट्री एलिमेंट जोड़ना चाहिए।

संपादित करें - विज़ुअल स्टूडियो 2015

यदि आप ApplicationHost.config फ़ाइल की तलाश कर रहे हैं और आप VS2015 का उपयोग कर रहे हैं, तो आप इसमें पाएंगे:

[Solution_directory] /। बनाम / config / applicationHost.config


4
वहाँ वैसे भी यह दृश्य स्टूडियो परियोजना के भीतर लागू करने के लिए है? एक बहु-डेवलपर वातावरण में, यदि कोई अन्य व्यक्ति अपनी मशीन पर कोड की जांच करता है, तो उनके स्थानीय IIS एक्सप्रेस को वर्चुअल निर्देशिका से कॉन्फ़िगर नहीं किया जाएगा और रनटाइम त्रुटियों का कारण नहीं होगा?
आहिलियर ah

4
Visual Studio 2015 में, IIS कॉन्फ़िग फ़ाइल को .vs / config नामक फ़ोल्डर में समाधान निर्देशिका में संग्रहीत किया जाता है, इसलिए आप चाहें तो इसे स्रोत नियंत्रण में देख सकते हैं।
रैंडी गैमेज

वीएस 2012 के संबंध में इस सवाल के लिए कई गैर-जवाब बाढ़ के Google परिणाम हैं। यह काम करता है !!!!
टिम ओगिलवी

क्या IIS एक्सप्रेस में वर्चुअल निर्देशिका के लिए एक अलग एप्लिकेशन जोड़ना संभव है ताकि मैं एक डोमेन के तहत दो एप्लिकेशन रख सकूं?
एलेक्सीएव

6

VS2013 में मैंने निम्नलिखित चरणों में यह किया है:

1. वेब एप्लिकेशन प्रोजेक्ट पर क्लिक करें और गुण हिट करें

2. गुण पृष्ठ के "वेब" टैब देखें

3.उंडर सर्वर, "IIS एक्सप्रेस" ड्रॉपडाउन की डिफ़ॉल्ट पसंद होने के साथ, "प्रोजेक्ट Url" में पोर्ट नंबर का उपयोग करने वाले url को बदलकर एक है जो आपको सूट करता है। उदाहरण के लिए मैंने पोर्ट नंबर हटा दिया और लोकलहोस्ट के बाद "/ MVCDemo4" जोड़ दिया।

4. "वर्चुअल निर्देशिका बनाएँ" बटन पर क्लिक करें।

5. अपनी परियोजना और नए यूआरएल का उपयोग किया जाएगा


1
यह आपको भौतिक पथ को कॉन्फ़िगर करने की अनुमति नहीं देता है।
विक्टरियो बेर्रा

2

यदि आप विजुअल स्टूडियो 2013 (प्रो संस्करण या उच्चतर की आवश्यकता हो सकती है) का उपयोग कर रहे हैं, तो मैं समाधान एक्सप्लोरर में वेबसाइट पर राइट-क्लिक करके और Add> पर क्लिक करके IIS एक्सप्रेस (फ़ाइल-आधारित) वेबसाइट में वर्चुअल निर्देशिका जोड़ने में सक्षम था नई आभासी निर्देशिका। इसमें एप्लिकेशनहोस्ट.कॉन्फिग फ़ाइल के लिए एक प्रविष्टि जोड़ी गई, जैसा कि यहां वर्णित मैनुअल विधियों के साथ है।



0

मेरे पास कुछ और था, फाइलें जहां एसबीएस एनवायरमेंट में दुर्गम थीं।

कॉन्फ़िगरेशन फ़ोल्डर में फ़ाइलें हटाएं (यदि आप उन्हें नहीं खोल सकते हैं!) और उन्हें अपने स्थानीय पीसी पर फ़ोल्डर की एक प्रति के साथ बदलें।

यह मेरे लिए तय :)


उपयोगकर्ता \ <उपयोगकर्ता नाम> \ Documents \ IISExpress \ config में फ़ाइलें प्रति उपयोगकर्ता संरक्षित हैं। हो सकता है कि आपने इसे किसी भिन्न उपयोगकर्ता के साथ संपादित करने का प्रयास किया हो। तो इसे संपादित करने के लिए आपको प्रशासन मोड में नोटपैड (या अपने संपादक) को चलाने की आवश्यकता है। इस तरह आप इसे संशोधित करने में सक्षम हैं। या हटाएं और कॉपी करें जैसे आपने :-)
Be.St.

0

मुझे [प्रोजेक्ट] .vs \ config \ applicationhost.config फ़ाइल में प्रविष्टि करनी थी।

इससे पहले, यह तैनाती से काम करता था लेकिन कोड से नहीं।


0

आगे के सवाल के जवाब में -

"विजुअल स्टूडियो प्रोजेक्ट के भीतर इसे लागू करने के लिए वैसे भी है? एक बहु-डेवलपर वातावरण में, यदि कोई और व्यक्ति अपनी मशीन पर कोड की जांच करता है, तो उसका स्थानीय IIS एक्सप्रेस वर्चुअल निर्देशिका के साथ कॉन्फ़िगर नहीं किया जाएगा और रनटाइम त्रुटियों का कारण होगा। '' टी?

मुझे कभी भी कहीं भी इसका कोई जवाब नहीं मिला लेकिन फिर लगा कि आप वेबसाइट के लिए प्रोजेक्ट फ़ाइल में 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 शुरू होने से पहले आप इस तकनीक का उपयोग फ़ाइल में कुछ भी रिपीट करने के लिए कर सकते हैं। यह आपको शुरू में एक आवेदन Host.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 एक्सप्रेस में वर्चुअल निर्देशिका के लिए एक अलग एप्लिकेशन जोड़ना संभव है ताकि मैं एक डोमेन के तहत दो एप्लिकेशन रख सकूं?
एलेक्सीएव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.