Tạo thư mục ảo trong IIS express


124

Có cách nào để tạo một thư mục ảo trong IIS express không? Tôi biết rằng Cassini không thể làm điều này và thật tuyệt khi có thể làm điều này mà không cần sử dụng phiên bản đầy đủ của IIS.

Tôi đã nhận được nó cho đến nay tôi có thể duyệt đến ứng dụng của mình cục bộ trong IIS express như thế này:

http: // localhost: 1132 /

Những gì tôi muốn làm là tạo một thư mục ảo có tên "OffSiteStuff" và trỏ nó đến một vị trí nào đó trên ổ C của tôi, như "c: \ offsitestuff" và sau đó duyệt đến các mục trong thư mục đó như sau:

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

Tôi biết tôi có thể làm điều này với một thư mục trong trang web của mình và vẫn sử dụng IIS Express hoặc đối với vấn đề đó là Cassini cũ, nhưng thư mục này sẽ lưu trữ hình ảnh được tải lên bởi người dùng và tôi thực sự không muốn có những hình ảnh này lẫn lộn với hồ sơ ứng dụng.

Một giải pháp "to lớn" khác là triển khai trang web lên một phiên bản IIS 7.5 Server 2008 đầy đủ mỗi khi tôi muốn gỡ lỗi các tính năng sử dụng nội dung ngoại vi, nhưng điều đó cũng hơi cồng kềnh.

Có cách nào tôi có thể làm điều này trong <System.WebServer />phần tử cấu hình Web không?


5
Đối với Visual Studio 2015, mikedice417.wordpress.com/2015/09/13/ đã làm việc. Các applicationHost.configtập tin nằm dưới gốc dự án : ${PROJECT}\.vs\config\applicationHost.config.
Matt

Ở đây có một câu trả lời có thể giúp bạn: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

Câu trả lời:


129

Cấu hình IIS express được quản lý bởi applicationationhost.config.
Bạn có thể tìm thấy nó trong

Thư mục người dùng \ <tên người dùng> \ Documents \ IISExpress \ config.

Bên trong, bạn có thể tìm thấy phần trang chứa một phần cho mỗi trang được cấu hình IIS Express.

Thêm (hoặc sửa đổi) một phần trang web như thế này:

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

Thực tế bạn cần thêm một thẻ ứng dụng mới trong trang web của mình cho mỗi thư mục ảo. Bạn có được rất nhiều tính linh hoạt vì bạn có thể đặt cấu hình khác nhau cho thư mục ảo (ví dụ: phiên bản .Net Framework khác)

EDIT Cảm ơn Fevzi Apaydın để chỉ ra một giải pháp thanh lịch hơn.

Bạn có thể đạt được kết quả tương tự bằng cách thêm một hoặc nhiều thẻ virtualDirectory vào thẻ Ứng dụng:

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

Tài liệu tham khảo:


Sau khi thêm từng thẻ ứng dụng cho mỗi thư mục ảo, tôi không thể chạy ứng dụng "offsitestuff". Ví dụ: iothypress / site: WebSiteWithVirtualDirectory - chạy ứng dụng đầu tiên từ đường dẫn "C: \ temp \ website1". Làm cách nào tôi có thể chạy ứng dụng thứ 2 chứa đường dẫn "d: \ temp \ SubFolderApp"
Velu

Trong phần liên kết, bạn thấy url và cổng được sử dụng để truy cập vào thư mục gốc của trang web của bạn. Vì vậy: localhost: 1132 là url cho ứng dụng web được cài đặt trong c: \ temp \ website1 localhost: 1132 / OffSiteStuff là url cho ứng dụng web được cài đặt trong d: \ temp \ SubFolderApp.
Được.

Bất cứ ai cũng biết nếu / làm cách nào tôi có thể định cấu hình cài đặt riêng cho từng dự án (để tôi có thể kiểm tra cấu hình)? Cảm ơn
Ian Grainger

1
@Tốt. Tôi muốn những thứ như số cổng cho một trang IIS giống nhau cho tất cả các nhà phát triển - vì vậy tôi muốn kiểm tra (một số) cấu hình. Nhưng tôi không thể làm điều đó từ vị trí hiện tại. Đang tự hỏi liệu tôi có thể trỏ nó đến một tệp khác theo kiểu UserAppS Settings không, v.v.
Ian Grainger

26
Lưu ý: Mặc dù các hướng dẫn này vẫn áp dụng cho Visual Studio 2015, vị trí của applicationhost.configđã thay đổi. Hợp lý hơn các phiên bản trước, giờ đây nó nằm trong .vs\configthư mục con của thư mục giải pháp của bạn.
Richard Moss

91

@ Be.St. aprroach là đúng, nhưng không đầy đủ. Tôi chỉ sao chép lời giải thích của anh ấy với việc sửa phần không chính xác.

Cấu hình IIS express được quản lý bởi applicationationhost.config.
Bạn có thể tìm thấy nó trong

Thư mục người dùng \ <tên người dùng> \ Documents \ IISExpress \ config.

Bên trong, bạn có thể tìm thấy phần trang chứa một phần cho mỗi trang được cấu hình IIS Express.

Thêm (hoặc sửa đổi) một phần trang web như thế này:

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

Thay vì thêm một khối ứng dụng mới, bạn chỉ nên thêm một phần tử virtualDirectory mới vào phần tử cha của ứng dụng.

Chỉnh sửa - Visual Studio 2015

Nếu bạn đang tìm kiếm tệp applicationhost.config và bạn đang sử dụng VS2015, bạn sẽ tìm thấy nó trong:

[Solution_directory] /. vs / config / applicationhost.config


4
Có cách nào để áp dụng điều này trong dự án Visual Studio không? Trong môi trường nhiều nhà phát triển, nếu người khác kiểm tra mã trên máy của họ, thì IIS Express cục bộ của họ sẽ không được định cấu hình với thư mục ảo và gây ra lỗi thời gian chạy phải không?
ahillier88

4
Trong Visual Studio 2015, tệp cấu hình IIS được lưu trữ trong thư mục giải pháp, trong thư mục có tên .vs / config, do đó bạn có thể kiểm tra nó vào kiểm soát nguồn nếu bạn muốn.
Randy Gamage

Vì vậy, nhiều câu trả lời không tràn ngập kết quả google cho câu hỏi này liên quan đến VS 2012. Điều này hoạt động !!!!
Tim Ogilvy

Có thể thêm một ứng dụng riêng vào thư mục ảo trong IIS express để tôi có thể có hai ứng dụng trong một miền không?
Denys Alexieiev

6

Trong VS2013 tôi đã làm điều này trong các bước sau:

1. Nhấp chuột phải vào dự án ứng dụng web và nhấn Thuộc tính

2. Xem tab "Web" của trang Thuộc tính

3.Under Servers, với "IIS Express" là lựa chọn mặc định của danh sách thả xuống, trong "Url dự án" thay đổi url bằng cách sử dụng số cổng thành một số phù hợp với bạn. Ví dụ: tôi đã xóa số cổng và thêm "/ MVCDemo4" sau localhost.

4. Nhấp vào nút "Tạo thư mục ảo".

5.Run dự án của bạn và url mới sẽ được sử dụng


1
Điều này không cho phép bạn cấu hình đường dẫn vật lý.
Victorio Berra

2

Nếu bạn đang sử dụng Visual Studio 2013 (có thể yêu cầu phiên bản Pro trở lên), tôi có thể thêm thư mục ảo vào trang web IIS Express (dựa trên tệp) bằng cách nhấp chuột phải vào trang web trong Solution Explorer và nhấp vào Thêm> Thư mục ảo mới. Điều này đã thêm một mục vào tệp applicationationhost.config như với các phương thức thủ công được mô tả ở đây.



0

Tôi đã có một cái gì đó khác, chính các tập tin không thể truy cập được trong môi trường SBS.

Xóa các tệp trong thư mục cấu hình (nếu bạn không thể mở chúng!) Và thay thế chúng bằng một bản sao của thư mục trên máy tính cục bộ của riêng bạn.

Đã sửa nó cho tôi :)


Các tệp trong Người dùng \ <tên người dùng> \ Documents \ IISExpress \ config được bảo vệ theo người dùng. Có lẽ bạn đã cố chỉnh sửa nó với một người dùng khác. Vì vậy, để chỉnh sửa nó, bạn cần chạy Notepad (hoặc trình chỉnh sửa của bạn) trong chế độ Quản trị. Bằng cách này bạn có thể sửa đổi nó. Hoặc xóa và sao chép như bạn đã làm :-)
Be.St.

0

Tôi đã phải thực hiện mục trong tệp [dự án] .vs \ config \ applicationationhost.config.

Trước đó, nó hoạt động từ triển khai nhưng không phải từ mã.


0

Trả lời cho câu hỏi tiếp theo -

"có cách nào để áp dụng điều này trong dự án Visual Studio không? Trong môi trường nhiều nhà phát triển, nếu người khác kiểm tra mã trên máy của họ, thì IIS Express cục bộ của họ sẽ không được cấu hình với thư mục ảo và gây ra lỗi thời gian chạy. phải không? "

Tôi chưa bao giờ tìm thấy câu trả lời nhất quán cho vấn đề này ở bất cứ đâu nhưng sau đó đã tìm ra bạn có thể làm điều đó với một sự kiện xây dựng bài đăng bằng cách sử dụng tác vụ XmlPoke trong tệp dự án cho trang 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>

Bạn có thể sử dụng kỹ thuật này để bổ sung bất cứ thứ gì trong tệp trước khi IISExpress khởi động. Điều này ban đầu sẽ cho phép bạn buộc một tệp applicationhost.config vào GIT (giả sử nó bị bỏ qua bởi gitignore) sau đó sau đó lặp lại tất cả các đường dẫn khi xây dựng. GIT sẽ bỏ qua mọi thay đổi đối với tệp để giờ đây dễ dàng chia sẻ chúng xung quanh.

Để trả lời cho câu hỏi xa hơn về việc thêm các ứng dụng khác trong một trang web:

Bạn có thể tạo trang web trong ứng dụng lưu trữ tệp giống như trang trên máy chủ của bạn. Ví dụ:

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

Sau đó sử dụng kỹ thuật trên để thay đổi vị trí thư mục khi xây dựng.


Có thể thêm một ứng dụng riêng vào thư mục ảo trong IIS express để tôi có thể có hai ứng dụng trong một miền không?
Denys Alexieiev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.