Erstellen virtueller Verzeichnisse in IIS Express

124

Gibt es eine Möglichkeit, ein virtuelles Verzeichnis in IIS Express zu erstellen? Ich weiß, dass Cassini dies nicht kann, und es wäre schön, dies ohne die Verwendung einer Vollversion von IIS tun zu können.

Ich habe es so weit gebracht, dass ich in IIS Express wie folgt lokal zu meiner Anwendung navigieren kann:

http: // localhost: 1132 /

Ich möchte ein virtuelles Verzeichnis mit dem Namen "OffSiteStuff" erstellen und es auf eine Position auf meinem C-Laufwerk verweisen, z. B. "c: \ offsitestuff", und dann zu Elementen in diesem Ordner wie folgt navigieren:

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

Ich weiß, dass ich dies mit einem Ordner auf meiner Site tun und trotzdem IIS Express oder, was das betrifft, den alten Cassini verwenden kann, aber dieser Ordner speichert Bilder, die von Benutzern hochgeladen wurden, und ich möchte diese Bilder wirklich nicht verwechseln Anwendungsdateien.

Die andere "go big" -Lösung besteht darin, die Site jedes Mal auf einer vollständigen Server 2008 IIS 7.5-Instanz bereitzustellen, wenn ich die Funktionen debuggen möchte, die Offsite-Inhalte verwenden. Dies ist jedoch auch etwas umständlich.

Kann ich dies im <System.WebServer />Webkonfigurationselement auf irgendeine Weise tun ?

John Hoge
quelle
5
Für Visual Studio 2015 hat mikedice417.wordpress.com/2015/09/13/… funktioniert. Die applicationHost.configDatei befindet sich im Projektstamm : ${PROJECT}\.vs\config\applicationHost.config.
Matt
Hier gibt es eine Antwort, die Ihnen helfen könnte: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

Antworten:

129

Die IIS Express-Konfiguration wird von applicationhost.config verwaltet.
Sie finden es in

Ordner Benutzer \ <Benutzername> \ Dokumente \ IISExpress \ config.

Im Inneren finden Sie den Site-Abschnitt, der einen Abschnitt für jede von IIS Express konfigurierte Site enthält.

Fügen Sie einen Site-Abschnitt wie folgt hinzu (oder ändern Sie ihn):

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

Praktisch müssen Sie für jedes virtuelle Verzeichnis ein neues Anwendungs-Tag in Ihre Site einfügen. Sie erhalten viel Flexibilität, da Sie unterschiedliche Konfigurationen für das virtuelle Verzeichnis festlegen können (z. B. eine andere .NET Framework-Version).

EDIT Dank Fevzi Apaydın auf eine elegantere Lösung zu zeigen.

Sie können dasselbe Ergebnis erzielen, indem Sie dem Application-Tag ein oder mehrere virtualDirectory-Tags hinzufügen:

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

Referenz:

Beste.
quelle
Nachdem ich jedes Anwendungs-Tag für jedes virtuelle Verzeichnis hinzugefügt hatte, konnte ich die Anwendung "offsitestuff" nicht ausführen. Beispiel: iisexpress / site: WebSiteWithVirtualDirectory - Führen Sie die erste App über den Pfad "C: \ temp \ website1" aus. Wie kann ich meine 2. App ausführen, die den Pfad "d: \ temp \ SubFolderApp" enthält
Velu
Im Abschnitt "Bindungen" sehen Sie die URL und den Port, die für den Zugriff auf das Stammverzeichnis Ihrer Site verwendet werden. Also: localhost: 1132 ist die URL für die in c: \ temp \ website1 installierte Webanwendung. Localhost: 1132 / OffSiteStuff ist die URL für die in d: \ temp \ SubFolderApp installierte Webanwendung.
Be.St.
Weiß jemand, ob / wie ich Einstellungen für jedes Projekt separat konfigurieren kann (damit ich die Konfiguration überprüfen kann)? Vielen Dank
Ian Grainger
1
@Beste. Ich möchte, dass Dinge wie die Portnummer für eine IIS-Site für alle Entwickler gleich sind - daher möchte ich (einige) der Konfiguration einchecken. Aber ich kann das nicht von ihrem aktuellen Standort aus tun. Ich habe mich gefragt, ob ich es auf eine andere Datei im Stil von UserAppSettings usw. verweisen könnte
Ian Grainger
26
Hinweis: Während diese Anweisungen weiterhin für Visual Studio 2015 gelten, hat sich der Speicherort von applicationhost.configgeändert. Sinnvoller als frühere Versionen befindet es sich jetzt im .vs\configUnterordner Ihres Lösungsordners.
Richard Moss
91

Der Ansatz von @ Be.St. ist wahr, aber unvollständig. Ich kopiere nur seine Erklärung mit der Korrektur des falschen Teils.

Die IIS Express-Konfiguration wird von applicationhost.config verwaltet.
Sie finden es in

Ordner Benutzer \ <Benutzername> \ Dokumente \ IISExpress \ config.

Im Inneren finden Sie den Site-Abschnitt, der einen Abschnitt für jede von IIS Express konfigurierte Site enthält.

Fügen Sie einen Site-Abschnitt wie folgt hinzu (oder ändern Sie ihn):

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

Anstatt einen neuen Anwendungsblock hinzuzufügen, sollten Sie dem übergeordneten Element der Anwendung einfach ein neues virtualDirectory-Element hinzufügen.

Bearbeiten - Visual Studio 2015

Wenn Sie nach der Datei applicationHost.config suchen und VS2015 verwenden, finden Sie sie in:

[Lösungsverzeichnis] ​​/. vs / config / applicationHost.config

Fevzi Apaydın
quelle
4
Gibt es überhaupt eine Möglichkeit, dies im Visual Studio-Projekt anzuwenden? Wenn in einer Umgebung mit mehreren Entwicklern jemand anderes den Code auf seinem Computer auscheckt, wird sein lokaler IIS Express nicht mit dem virtuellen Verzeichnis konfiguriert und verursacht Laufzeitfehler, nicht wahr?
ahillier88
4
In Visual Studio 2015 wird die IIS-Konfigurationsdatei im Lösungsverzeichnis in einem Ordner namens .vs / config gespeichert, sodass Sie sie bei Bedarf in die Quellcodeverwaltung einchecken können.
Randy Gamage
So viele Nicht-Antworten überfluten Google-Ergebnisse für diese Frage in Bezug auf VS 2012. Das funktioniert !!!!
Tim Ogilvy
Ist es möglich, dem virtuellen Verzeichnis in IIS Express eine separate Anwendung hinzuzufügen, sodass ich zwei Anwendungen unter einer Domäne haben kann?
Denys Alexieiev
6

In VS2013 habe ich dies in den folgenden Schritten getan:

1.Klicken Sie mit der rechten Maustaste auf das Webanwendungsprojekt und klicken Sie auf Eigenschaften

2. Zeigen Sie die Registerkarte "Web" auf der Seite "Eigenschaften" an

3. Unter Servern, wobei "IIS Express" die Standardauswahl der Dropdown-Liste ist, ändern Sie in der "Projekt-URL" die URL unter Verwendung der Portnummer in eine für Sie geeignete. Zum Beispiel habe ich die Portnummer gelöscht und "/ MVCDemo4" nach dem localhost hinzugefügt.

4.Klicken Sie auf die Schaltfläche "Virtuelles Verzeichnis erstellen".

5. Führen Sie Ihr Projekt aus und die neue URL wird verwendet

user2765861
quelle
1
Dadurch können Sie den physischen Pfad nicht konfigurieren.
Victorio Berra
2

Wenn Sie Visual Studio 2013 verwenden (möglicherweise ist Pro Edition oder höher erforderlich), konnte ich einer (dateibasierten) IIS Express-Website ein virtuelles Verzeichnis hinzufügen, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Website klicken und auf Hinzufügen> klicken Neues virtuelles Verzeichnis. Dies fügte der Datei applicationhost.config einen Eintrag hinzu, wie bei den hier beschriebenen manuellen Methoden.

Bryan B.
quelle
0

Ich hatte noch etwas anderes, die Dateien selbst waren in einer SBS-Umgebung nicht zugänglich.

Löschen Sie die Dateien im Konfigurationsordner (wenn Sie sie nicht öffnen können!) Und ersetzen Sie sie durch eine Kopie des Ordners auf Ihrem eigenen lokalen PC.

Für mich behoben :)

NicoJuicy
quelle
Dateien unter Benutzer \ <Benutzername> \ Dokumente \ IISExpress \ config sind pro Benutzer geschützt. Vielleicht haben Sie versucht, es mit einem anderen Benutzer zu bearbeiten. Um es zu bearbeiten, müssen Sie Notepad (oder Ihren Editor) im Administrationsmodus ausführen. Auf diese Weise können Sie es ändern. Oder löschen und kopieren wie Sie :-)
Be.St.
0

Ich musste den Eintrag in der Datei [project] .vs \ config \ applicationhost.config vornehmen.

Zuvor funktionierte es von der Bereitstellung, aber nicht vom Code.

TheJoe
quelle
0

Als Antwort auf die weitere Frage -

"Gibt es eine Möglichkeit, dies innerhalb des Visual Studio-Projekts anzuwenden? Wenn in einer Umgebung mit mehreren Entwicklern jemand anderes den Code auf seinem Computer auscheckt, wird sein lokaler IIS Express nicht mit dem virtuellen Verzeichnis konfiguriert und verursacht keine Laufzeitfehler nicht wahr? "

Ich habe nirgendwo eine einheitliche Antwort darauf gefunden, aber dann herausgefunden, dass Sie dies mit einem Post-Build-Ereignis mithilfe der XmlPoke-Aufgabe in der Projektdatei für die Website tun können.

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

Mit dieser Technik können Sie alles in der Datei neu terminieren, bevor IISExpress gestartet wird. Auf diese Weise können Sie zunächst eine applicationHost.config-Datei in GIT erzwingen (vorausgesetzt, sie wird von gitignore ignoriert) und anschließend alle Pfade zur Erstellungszeit neu zuweisen. GIT ignoriert alle Änderungen an der Datei, sodass Sie sie jetzt problemlos freigeben können.

Als Antwort auf die weitere Frage zum Hinzufügen anderer Anwendungen unter einer Site:

Sie können die Site in Ihrer Anwendungshostsdatei genau wie die auf Ihrem Server erstellen. Beispielsweise:

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

Verwenden Sie dann die oben beschriebene Technik, um die Ordnerpositionen beim Erstellen zu ändern.

AngryDaz
quelle
Ist es möglich, dem virtuellen Verzeichnis in IIS Express eine separate Anwendung hinzuzufügen, sodass ich zwei Anwendungen unter einer Domäne haben kann?
Denys Alexieiev