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를 사용하지만이 폴더는 사용자가 업로드 한 이미지를 저장하며 이러한 이미지가 서로 섞이는 것을 원하지 않습니다. 응용 프로그램 파일.

다른 "큰"솔루션은 오프 사이트 콘텐츠를 사용하는 기능을 디버깅 할 때마다 사이트를 완전히 중단 된 Server 2008 IIS 7.5 인스턴스에 배포하는 것입니다.

<System.WebServer />웹 구성 요소 에서이 작업을 수행 할 수있는 방법이 있습니까?


5
Visual Studio 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 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 버전)을 설정할 수 있으므로 많은 유연성을 얻을 수 있습니다.

편집 더 우아한 솔루션을 가리키는 Fevzi Apaydın에게 감사드립니다.

Application 태그에 하나 이상의 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"경로에서 첫 번째 앱을 실행합니다. 어떻게 경로를 포함하는 제 2 응용 프로그램 실행 "D를 : \ TEMP \ SubFolderApp"
Velu

바인딩 섹션에는 사이트 루트에 액세스하는 데 사용되는 URL과 포트가 표시됩니다. 따라서 : localhost : 1132 는 c : \ temp \ website1에 설치된 웹 응용 프로그램의 URL입니다. localhost : 1132 / OffSiteStuff 는 d : \ temp \ SubFolderApp에 설치된 웹 응용 프로그램의 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를 사용하는 경우 다음 위치에서 찾을 수 있습니다.

[솔루션 _ 디렉토리] /. 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의 가상 디렉터리에 별도의 응용 프로그램을 추가하여 하나의 도메인 아래에 두 개의 응용 프로그램을 가질 수 있습니까?
Denys Alexieiev

6

VS2013에서는 다음 단계로이 작업을 수행했습니다.

1. 웹 애플리케이션 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 누릅니다.

2. 속성 페이지의 "웹"탭보기

3. Servers 아래에서 "IIS Express"가 드롭 다운의 기본 선택 항목 인 "Project Url"에서 포트 번호를 사용하는 URL을 적합한 URL로 변경합니다. 예를 들어 포트 번호를 삭제하고 localhost 뒤에 "/ MVCDemo4"를 추가했습니다.

4. "Create Virtual Directory"버튼을 클릭합니다.

5. 프로젝트를 실행하면 새 URL이 사용됩니다.


1
이렇게하면 실제 경로를 구성 할 수 없습니다.
Victorio Berra

2

Visual Studio 2013 (Pro 버전 이상이 필요할 수 있음)을 사용하는 경우 솔루션 탐색기에서 웹 사이트를 마우스 오른쪽 단추로 클릭하고 추가>를 클릭하여 IIS Express (파일 기반) 웹 사이트에 가상 디렉터리를 추가 할 수있었습니다. 새 가상 디렉터리. 여기에 설명 된 수동 방법과 마찬가지로 applicationhost.config 파일에 항목이 추가되었습니다.



0

SBS 환경에서 액세스 할 수없는 파일 자체가 있습니다.

config 폴더에있는 파일을 삭제하고 (열 수없는 경우!) 자신의 로컬 PC에있는 폴더의 복사본으로 교체하십시오.

나를 위해 수정했습니다 :)


Users \ <사용자 이름> \ Documents \ IISExpress \ config의 파일은 사용자별로 보호됩니다. 다른 사용자로 편집을 시도했을 수 있습니다. 따라서 편집하려면 관리 모드에서 메모장 (또는 편집기)을 실행해야합니다. 이런 식으로 수정할 수 있습니다. 또는 삭제 및 복사 :-)
Be.St.

0

[프로젝트] .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.