Creazione di directory virtuali in IIS express


124

Esiste un modo per creare una directory virtuale in IIS express? So che Cassini non può farlo e sarebbe bello poterlo fare senza usare una versione completa di IIS.

L'ho preso così lontano che posso navigare alla mia applicazione localmente in IIS Express in questo modo:

http: // localhost: 1132 /

Quello che vorrei fare è creare una directory virtuale chiamata "OffSiteStuff" e puntarla in una posizione sul mio disco C, come "c: \ offsitestuff" e quindi cercare gli elementi in quella cartella in questo modo:

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

So che potrei farlo con una cartella all'interno del mio sito e ancora usare IIS Express, o, per la verità, il vecchio Cassini, ma questa cartella memorizzerà le immagini caricate dagli utenti e non voglio davvero mescolarle con file dell'applicazione.

L'altra soluzione "go big" è quella di distribuire il sito su un'istanza completa di Server 2008 IIS 7.5 ogni volta che voglio eseguire il debug delle funzionalità che utilizzano contenuti offsite, ma anche questo è un po 'ingombrante.

C'è un modo per farlo nell'elemento di <System.WebServer />configurazione Web?


5
Per Visual Studio 2015, mikedice417.wordpress.com/2015/09/13/… ha funzionato. Il applicationHost.configfile è sotto la root del progetto: ${PROJECT}\.vs\config\applicationHost.config.
Matt,

Ecco una risposta che potrebbe aiutarti: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

Risposte:


129

La configurazione IIS express è gestita da applicationhost.config.
Puoi trovarlo in

Cartella Utenti \ <nomeutente> \ Documenti \ IISExpress \ config.

All'interno è possibile trovare la sezione dei siti che contiene una sezione per ciascun sito configurato IIS Express.

Aggiungi (o modifica) una sezione del sito come questa:

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

Praticamente devi aggiungere un nuovo tag applicazione nel tuo sito per ogni directory virtuale. Ottieni molta flessibilità perché puoi impostare diverse configurazioni per la directory virtuale (ad esempio una diversa versione .Net Framework)

MODIFICA Grazie a Fevzi Apaydın per indicare una soluzione più elegante.

Puoi ottenere lo stesso risultato aggiungendo uno o più tag virtualDirectory al tag 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>

Riferimento:


Dopo aver aggiunto ogni tag dell'applicazione per ogni directory virtuale non sono stato in grado di eseguire l'applicazione "offsitestuff". Es: iisexpress / site: WebSiteWithVirtualDirectory - esegui la prima app dal percorso "C: \ temp \ website1". Come posso eseguire la mia seconda app che contiene il percorso "d: \ temp \ SubFolderApp"
Velu

Nella sezione dei collegamenti vedi l'URL e la porta utilizzati per accedere alla radice del tuo sito. Quindi: localhost: 1132 è l'URL dell'applicazione Web installata in c: \ temp \ website1 localhost: 1132 / OffSiteStuff è l'URL dell'applicazione Web installata in d: \ temp \ SubFolderApp.
Be.St.

Qualcuno sa se / come posso configurare le impostazioni separatamente per ciascun progetto (in modo da poter verificare nella configurazione)? Grazie
Ian Grainger il

1
@Migliore. Vorrei che cose come il numero di porta di un sito IIS fossero le stesse per tutti gli sviluppatori, quindi mi piacerebbe controllare (parte) della configurazione. Ma non posso farlo dalla posizione corrente. Mi chiedevo se potevo puntarlo su un altro file nello stile di UserAppSettings ecc.
Ian Grainger,

26
Nota: mentre queste istruzioni si applicano ancora a Visual Studio 2015, la posizione di applicationhost.configè cambiata. Più sensibilmente rispetto alle versioni precedenti, ora si trova nella .vs\configsottocartella della cartella della soluzione.
Richard Moss,

91

L'aprile di @ Be.St. È vero, ma incompleto. Sto solo copiando la sua spiegazione con la correzione della parte errata.

La configurazione IIS express è gestita da applicationhost.config.
Puoi trovarlo in

Cartella Utenti \ <nomeutente> \ Documenti \ IISExpress \ config.

All'interno è possibile trovare la sezione dei siti che contiene una sezione per ciascun sito configurato IIS Express.

Aggiungi (o modifica) una sezione del sito come questa:

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

Invece di aggiungere un nuovo blocco applicazione, è sufficiente aggiungere un nuovo elemento virtualDirectory all'elemento padre dell'applicazione.

Modifica - Visual Studio 2015

Se stai cercando il file applicationHost.config e stai usando VS2015 lo troverai in:

[Solution_directory] /. Vs / config / applicationHost.config


4
Esiste un modo per applicarlo all'interno del progetto Visual Studio? In un ambiente multi-sviluppatore, se qualcun altro controlla il codice sulla propria macchina, allora il loro IIS Express locale non sarebbe configurato con la directory virtuale e causerebbe errori di runtime, no?
ahillier88,

4
In Visual Studio 2015, il file di configurazione IIS è archiviato nella directory della soluzione, in una cartella denominata .vs / config, quindi è possibile controllarlo nel controllo del codice sorgente, se lo si desidera.
Randy Gamage,

Così tanti risultati di Google inondazioni senza risposta per questa domanda in relazione a VS 2012. Funziona !!!!
Tim Ogilvy,

È possibile aggiungere un'applicazione separata alla directory virtuale in IIS express in modo da poter avere due applicazioni in un dominio?
Denys Alexieiev,

6

In VS2013 l'ho fatto nei seguenti passaggi:

1.Fare clic con il pulsante destro del mouse sul progetto dell'applicazione Web e premere Proprietà

2.Visualizza la scheda "Web" della pagina Proprietà

3.Sotto server, con "IIS Express" come scelta predefinita del menu a discesa, in "URL progetto" modifica l'URL utilizzando il numero di porta in quello che preferisci. Ad esempio, ho eliminato il numero di porta e aggiunto "/ MVCDemo4" dopo l'host locale.

4.Fare clic sul pulsante "Crea directory virtuale".

5. Esegui il tuo progetto e verrà utilizzato il nuovo URL


1
Questo non ti consente di configurare il percorso fisico.
Victorio Berra,

2

Se stai utilizzando Visual Studio 2013 (potrebbe richiedere Pro Edition o successiva), sono stato in grado di aggiungere una directory virtuale a un sito Web IIS Express (basato su file) facendo clic con il pulsante destro del mouse sul sito Web in Esplora soluzioni e facendo clic su Aggiungi> Nuova directory virtuale. Ciò ha aggiunto una voce al file applicationhost.config come con i metodi manuali descritti qui.



0

Avevo qualcos'altro, i file stessi erano inaccessibili in un ambiente SBS.

Elimina i file nella cartella di configurazione (se non riesci ad aprirli!) E sostituiscili con una copia della cartella sul tuo PC locale.

Risolto il problema per me :)


I file in Users \ <nomeutente> \ Documents \ IISExpress \ config sono protetti per utente. Forse hai provato a modificarlo con un altro utente. Quindi per modificarlo è necessario eseguire Blocco note (o l'editor) in modalità Amministrazione. In questo modo puoi modificarlo. Oppure cancella e copia come hai fatto tu :-)
Be.St.

0

Ho dovuto inserire la voce nel file [project] .vs \ config \ applicationhost.config.

Prima di questo, ha funzionato dalla distribuzione ma non dal codice.


0

In risposta all'ulteriore domanda -

"esiste comunque un modo per applicarlo all'interno del progetto Visual Studio? In un ambiente multi-sviluppatore, se qualcun altro controlla il codice sul proprio computer, il loro IIS Express locale non sarebbe configurato con la directory virtuale e causerebbe errori di runtime vero? "

Non ho mai trovato una risposta coerente a questo da nessuna parte, ma poi ho capito che potresti farlo con un evento post build usando l'attività XmlPoke nel file di progetto per il sito 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>

È possibile utilizzare questa tecnica per reimpostare qualsiasi cosa nel file prima dell'avvio di IISExpress. Ciò consentirebbe di forzare inizialmente un file applicationHost.config in GIT (supponendo che sia ignorato da gitignore), quindi successivamente reimpostare tutti i percorsi al momento della compilazione. GIT ignorerà qualsiasi modifica al file, quindi ora è facile condividerli.

In risposta alla domanda ulteriore sull'aggiunta di altre applicazioni in un sito:

È possibile creare il sito nel file host dell'applicazione proprio come quello sul server. Per esempio:

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

Quindi utilizzare la tecnica sopra per modificare le posizioni delle cartelle in fase di creazione.


È possibile aggiungere un'applicazione separata alla directory virtuale in IIS express in modo da poter avere due applicazioni in un dominio?
Denys Alexieiev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.