IIS Expressで仮想ディレクトリを作成する


124

IIS Expressで仮想ディレクトリを作成する方法はありますか?Cassiniではこれを実行できないことを知っています。フルバージョンのIISを使用せずにこれを実行できると便利です。

これまでのところ、次のようにIIS Expressでアプリケーションをローカルで参照できるようになっています。

http:// localhost:1132 /

私がしたいのは、「OffSiteStuff」という仮想ディレクトリを作成し、それを「c:\ offsitestuff」などのCドライブの場所にポイントして、次のようにそのフォルダー内のアイテムを参照することです。

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

私は自分のサイト内のフォルダーでこれを行うことができ、それでもIIS Expressを使用することができます。あるいは、単純に古いCassiniを使用しますが、このフォルダーにはユーザーがアップロードした画像が保存され、これらの画像を混在させたくありません。アプリケーションファイル。

もう1つの「大規模な」ソリューションは、オフサイトコンテンツを使用する機能をデバッグするたびにサイトを本格的なServer 2008 IIS 7.5インスタンスに展開することですが、これも少し面倒です。

<System.WebServer />Web構成要素でこれを行う方法はありますか?


5
Visual Studio 2015の場合、mikedice417.wordpress.com / 2015/09/13 /…が機能しました。applicationHost.configファイルは、プロジェクトのルートの下にあります:${PROJECT}\.vs\config\applicationHost.config
Matt

ここにあなたを助けることができる答えがあります:https
//stackoverflow.com/a/46260607/2472664

回答:


129

IIS Express設定はapplicationhost.configによって管理されます。
あなたはそれを見つけることができます

Users \ <ユーザー名> \ 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のバージョンが異なる)、柔軟性が大幅に向上します

編集 よりエレガントなソリューションを指摘してくれたFevziApaydınに感謝します。

Applicationタグに1つ以上の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>

参照:


各仮想ディレクトリに各アプリケーションタグを追加した後、「オフサイトスタッフ」アプリケーションを実行できませんでした。例:iisexpress / site:WebSiteWithVirtualDirectory-パス「C:\ temp \ website1」から最初のアプリを実行します。:「\ TEMP \ SubFolderApp D」どのように私は、パスが含まれている私の第二のアプリを実行することができます
Velu

bindingsセクションに、サイトのルートへのアクセスに使用されるURLとポートが表示されます。つまり、localhost:1132はc:\ temp \ website1にインストールされたWebアプリケーションのURLですlocalhost:1132 / OffSiteStuffはd:\ temp \ SubFolderAppにインストールされたWebアプリケーションのURLです。
Be.St.

誰でも/プロジェクトごとに個別に設定を構成できるかどうかを知っていますか?ありがとう
Ian Grainger 2013

1
@ベスト。IISサイトのポート番号がすべての開発者で同じになるようにしたいので、(一部の)構成をチェックインしたいのですが、現在の場所からそれを行うことはできません。UserAppSettingsなどのスタイルで別のファイルをポイントできるかどうか疑問に思っていました
Ian Grainger

26
注:これらの手順はVisual Studio 2015にも適用されますが、場所applicationhost.configは変更されました。以前のバージョンよりもわかりやすく.vs\config、ソリューションフォルダーのサブフォルダーに配置されました。
Richard Moss

91

@ Be.St。のアプローチは真実ですが、不完全です。私は彼の説明を間違った部分を訂正してコピーしているだけです。

IIS Express設定はapplicationhost.configによって管理されます。
あなたはそれを見つけることができます

Users \ <ユーザー名> \ 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、2015

VS 2012に関連して、この質問に対するGoogleの結果が氾濫している非常に多くの非回答。これは機能します!!!!
Tim Ogilvy

IIS Expressの仮想ディレクトリに別のアプリケーションを追加して、1つのドメインで2つのアプリケーションを作成することはできますか?
Denys Alexieiev

6

VS2013では、次の手順でこれを行いました。

1. webアプリケーションプロジェクトを右クリックし、[プロパティ]をクリックします。

2.プロパティページの[Web]タブを表示します。

3.「サーバー」の下で、「IIS Express」がドロップダウンのデフォルトの選択ですが、「プロジェクトURL」で、ポート番号を使用してURLを適切なものに変更します。たとえば、ポート番号を削除し、localhostの後に「/ MVCDemo4」を追加しました。

4.「仮想ディレクトリの作成」ボタンをクリックします。

5.プロジェクトを実行すると、新しいURLが使用されます


1
これでは、物理パスを構成できません。
Victorio Berra 14

2

Visual Studio 2013(Proエディション以上が必要な場合があります)を使用している場合、ソリューションエクスプローラーでWebサイトを右クリックして[追加]をクリックすることにより、仮想ディレクトリをIIS Express(ファイルベース)Webサイトに追加できました。新しい仮想ディレクトリ。これにより、ここで説明する手動の方法と同様に、applicationhost.configファイルにエントリが追加されました。



0

SBS環境でアクセスできないファイル自体が他にありました。

configフォルダー内のファイルを(開くことができない場合は)削除し、ローカルPC上のフォルダーのコピーに置き換えます。

私のために修正しました:)


Users \ <ユーザー名> \ Documents \ IISExpress \ config内のファイルは、ユーザーごとに保護されています。別のユーザーで編集しようとした可能性があります。したがって、編集するには、メモ帳(またはエディター)を管理モードで実行する必要があります。このようにして、変更することができます。または、削除したようにコピーしてください:-)
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はファイルへの変更を無視するため、簡単に共有できます。

1つのサイトに他のアプリケーションを追加することに関するさらなる質問への回答:

サーバー上のファイルと同じように、アプリケーションのhostsファイルにサイトを作成できます。例えば:

  <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の仮想ディレクトリに別のアプリケーションを追加して、1つのドメインで2つのアプリケーションを作成することはできますか?
Denys Alexieiev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.