有没有办法在IIS express中创建虚拟目录?我知道Cassini不能这样做,如果不使用完整版本的IIS就可以做到这一点。
到目前为止我已经知道了,我可以在IIS Express中本地浏览我的应用程序,如下所示:
我想要做的是创建一个名为“OffSiteStuff”的虚拟目录并将其指向我的C驱动器上的某个位置,例如“c:\ offsitestuff”,然后浏览到该文件夹中的项目,如下所示:
http://localhost:1132/OffSiteStuff/UserUploadedImage.jpg
我知道我可以使用我的网站中的文件夹进行此操作并仍然使用IIS Express,或者,对于普通的旧版Cassini,但此文件夹将存储用户上传的图像,我真的不想拥有这些图像混淆了应用程序文件。
另一个“go big”解决方案是每次我想调试使用异地内容的功能时,将网站部署到一个完整的Server 2008 IIS 7.5实例上,但这也有点麻烦。
我有什么方法可以在<System.WebServer />
Web配置元素中执行此操作吗?
答案 0 :(得分:126)
IIS express配置由applicationhost.config管理 你可以在
中找到它用户\&lt;用户名&gt; \ 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标记添加一个或多个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>
参考:
答案 1 :(得分:91)
@ Be.St.的批评是正确的,但不完整。 我只是通过纠正不正确的部分来复制他的解释。
IIS express配置由applicationhost.config管理 你可以在
中找到它用户\&lt;用户名&gt; \ 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 /配置/的applicationHost.config
答案 2 :(得分:6)
在VS2013中,我按以下步骤执行了此操作:
1.右键单击Web应用程序项目,然后单击“属性”
2.查看“属性”页面的“Web”选项卡
3.在服务器下,“IIS Express”是下拉列表的默认选项,在“Project Url”中使用端口号将URL更改为适合您的URL。例如,我删除了端口号,并在localhost之后添加了“/ MVCDemo4”。
4.单击“创建虚拟目录”按钮。
5.运行您的项目,将使用新的URL
答案 3 :(得分:2)
如果您使用的是Visual Studio 2013(可能需要专业版或更高版本),我可以通过右键单击解决方案资源管理器中的网站,将虚拟目录添加到IIS Express(基于文件)的网站中。点击添加&gt;新的虚拟目录。这与applicationhost.config文件中添加了一个条目,与此处描述的手动方法一样。
答案 4 :(得分:1)
一个新选项是用于IIS Express的Jexus Manager,
https://blog.lextudio.com/2014/10/jexus-manager-for-iis-express/
这只是您知道如何使用的管理工具。
答案 5 :(得分:0)
我有其他东西,文件本身在SBS环境中无法访问。
删除配置文件夹中的文件(如果无法打开它们!)并将其替换为您自己本地PC上的文件夹副本。
为我修好了:)
答案 6 :(得分:0)
我必须在[project] .vs \ config \ applicationhost.config文件中输入该条目。
在此之前,它是从部署开始的,而不是从代码开始的。
答案 7 :(得分: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将忽略对该文件的任何更改,因此现在可以轻松共享它们。
答案 8 :(得分:0)
Visual Studio 专业版 2017
/Solution/.vs
目录<Sites>
节点并查找正确的子节点 (based on running port
)
`<virtualDirectory path="/MyVirtualDirectory" physicalPath="D:\MyVirtualDirectoryPhysicalPath" /
>`