Visual Studio 2015 - 添加虚拟目录不可行。

9
我们在Visual Studio中将一些网站设置为Web项目。最近我们升级到了VS2015,现在无法向新网站添加虚拟目录。
我们已经尝试了右键单击“添加新的虚拟目录”,但收到了错误消息,也编辑了项目文件夹中的applicationhost.config文件。
这是VS2015的一个错误吗?还是有办法创建这些目录?之前在升级到VS2015之前在IIS Express上运行的项目没有问题。
PS:我知道这个线程here,但它没有帮助。
4个回答

8
将FileSystem网站转换为IIS Express。
  1. 以管理员身份打开VS2015(右键单击并选择以管理员身份运行)。
  2. 单击“文件”>“新建”>“网站…”。
  3. 在“新建网站”对话框中,单击浏览…按钮。
  4. 在左窗格中选择本地IIS。在右窗格中选择IIS Express站点
  5. 右上角有4个按钮。单击创建新站点按钮。
  6. 命名并单击打开。这将在Web位置中选择HTTP。
  7. 单击确定。
  8. 然后关闭解决方案。
  9. 从Users\\Documents\IISExpress\config文件夹中打开applicationhost.config。您可以在记事本中打开它。
  10. sites部分中找到您的网站。更改内部的物理路径(virtualDirectory path="/" physicalPath="C:\WebApp\WebSite1")。写入现有Web项目的路径。
  11. 保存并关闭applicationhost.config文件。
  12. 以管理员身份运行VS2015。
  13. 单击“文件”>“打开”>“网站…”。
  14. 在“打开网站”对话框中,从左窗格中选择本地IIS。
  15. 选择IIS Express站点下的您的站点,然后单击打开
  16. 单击网站菜单和新建虚拟目录…
  17. 命名别名和文件夹路径,然后单击“确定”。
现在,您可以无错误地创建它。

我已成功使用此方法添加位于项目外的特定虚拟文件夹 - 例如/mywebsite/folders...是我的大部分代码所在的地方。我有一些图像在/someotherfolder/folders/images/...中,我设置了一个虚拟文件夹,指向从/mywebsite/images/...-> /someotherfolder/folders/images/... - 我应该能够在解决方案资源管理器视图中看到这个特定的文件夹吗? - qxotk

8

以上的答案都不适用于我,我仍然不确定为什么这样会起作用,但是以下是我的做法:

修改项目中的Applicationhost.config文件:

原本它是这样的:

<site name="Website" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\...\MyWebsite" />
    </application>

    <bindings>
        <binding protocol="http" bindingInformation="*:51005:localhost" />
    </bindings>
</site>

我需要添加另一个应用程序路径条目:
<application path="/mywebsite" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\...\MyWebsite" />
</application>

所以最终看起来是这样的:
<site name="Website" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\...\MyWebsite" />
    </application>

    <application path="/mywebsite" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\...\MyWebsite" />
    </application>

    <bindings>
        <binding protocol="http" bindingInformation="*:51005:localhost" />
    </bindings>
</site>

1
对我来说完美地运作了。非常感谢!我必须启用隐藏文件夹,然后我看到了“.vs”文件夹,然后按照您的答案描述修改了“**.vs\config\applicationhost.config**”文件。 - Uwe Keim

2
如果您有一个“.sln”解决方案文件,可以按照以下步骤进行操作:
  1. 使用记事本打开解决方案文件。

  2. 查找以Project("{开头的行。

例如:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebProject1", "WebProject1", ......

然后将其更改为:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebProject1", "http://localhost:12345/WebProject1", ......

并添加新属性

SlnRelativePath = "C:\WebProject1\"

ProjectSection(WebsiteProperties)

例如,从以下ProjectSection开始:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebProject1", "WebProject1", "{6D411253-734E-401A-A049-9620FC55D4FB}"
    ProjectSection(WebsiteProperties) = preProject
        UseIISExpress = "true"
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
        Debug.AspNetCompiler.VirtualPath = "/WebProject1"
        Debug.AspNetCompiler.PhysicalPath = "C:\WebProject1\"
        Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\WebProject1\"
        Debug.AspNetCompiler.Updateable = "true"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        Debug.AspNetCompiler.FixedNames = "false"
        Debug.AspNetCompiler.Debug = "True"
        Release.AspNetCompiler.VirtualPath = "/WebProject1"
        Release.AspNetCompiler.PhysicalPath = "C:\WebProject1\"
        Release.AspNetCompiler.TargetPath = "PrecompiledWeb\WebProject1\"
        Release.AspNetCompiler.Updateable = "true"
        Release.AspNetCompiler.ForceOverwrite = "true"
        Release.AspNetCompiler.FixedNames = "false"
        Release.AspNetCompiler.Debug = "False"
    EndProjectSection
EndProject

最终变成这样:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebProject1", "http://localhost:12345/WebProject1", "{6D411253-734E-401A-A049-9620FC55D4FB}"
    ProjectSection(WebsiteProperties) = preProject
        UseIISExpress = "true"
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
        Debug.AspNetCompiler.VirtualPath = "/WebProject1"
        Debug.AspNetCompiler.PhysicalPath = "C:\WebProject1\"
        Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\WebProject1\"
        Debug.AspNetCompiler.Updateable = "true"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        Debug.AspNetCompiler.FixedNames = "false"
        Debug.AspNetCompiler.Debug = "True"
        Release.AspNetCompiler.VirtualPath = "/WebProject1"
        Release.AspNetCompiler.PhysicalPath = "C:\WebProject1\"
        Release.AspNetCompiler.TargetPath = "PrecompiledWeb\WebProject1\"
        Release.AspNetCompiler.Updateable = "true"
        Release.AspNetCompiler.ForceOverwrite = "true"
        Release.AspNetCompiler.FixedNames = "false"
        Release.AspNetCompiler.Debug = "False"
        SlnRelativePath = "C:\WebProject1\"
    EndProjectSection
EndProject

2
这个答案对我有用,但是我不得不删除位于隐藏的.vs文件夹中的applicationhost.config文件,该文件夹是IIS Express用来确定应用程序结构的。一旦我运行了网站,IIS Express就会使用正确的虚拟目录配置应用程序。谢谢! - Chartreugz

0

类似于WhizBang的回答...

删除您根目录项目文件夹中的文件(如果需要,请备份)

.vs\config\applicationhost.config 

清空项目文件中的IISUrl标签(如果存在)

<IISUrl></IISUrl>

前往项目属性,尝试重新创建您的虚拟URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接