从IIS下的App中选择文件的正确路径

时间:2014-12-16 20:14:10

标签: asp.net iis web-config

我继承了IIS上托管的.NET应用程序。以前它将是IIS中自己的站点。现在在我的开发环境中,我必须在默认WebSite下运行它(在生产中它仍将作为自己的站点运行。

所以在开发中我遇到了加载脚本和css文件的问题 - 所以我右键单击Dev中的默认网站并添加应用程序 - 调用新的应用程序 - MyApp并指向磁盘上的物理位置。

所以以前的样式表已经加载了:

href="/css/folder/mystylesheet.css"

和js文件:

src="/jslib/jquery-1.9.1.js"

当应用程序作为IIS中自己的站点托管时工作正常,而且仍然需要在Production中进行(只是不在我的开发中)所以在开发中我需要更改css和js如下:

href="~/css/folder/mystylesheet.css" (note ~ added)

src="./jslib/jquery-1.9.1.js" (note . added)

现在加载默认网站下MyApp的js和css文件。但是我可以在IIS或webconfig中做一些简单的事情来在Dev / Production中轻松地打开/关闭此行为,而不是编辑加载脚本和css文件的所有位置 - 我知道在某些时候文件将被检入路径不正确的生产

另一个问题是整个网站上有很多链接都是相对的,所以/Link/Page.aspx现在在默认网站下托管的MyApp中断了

修改

question

查看下面的答案

在ASP.NET中,很多时候你需要使用波浪号(〜)来获取应用程序的根目录,所以你的路径看起来像〜/ stylesheets / main.css 当您指定以/开头的路径指示服务器根目录时,如果您在虚拟目录中有站点,则不会考虑该站点,但如果站点作为默认站点托管,则路径将符合以下条件: 示例:名为foo.net的服务器,其网站托管在名为app / stylesheet的虚拟目录中,将转换为foo.net/stylesheet而不是foo.net/app/stylesheet

我的所有路径都以/开头(即转到服务器根目录) - 我需要弄清楚的是我可以添加到web.config中的内容,对于Dev,我可以指定虚拟应用程序MyApp需要考虑在内(仅适用于Dev - 然后可以在Web Transform for Production web.config文件中删除它

2 个答案:

答案 0 :(得分:1)

简短的回答是否定的,没有一个地方可以处理网站的位置。那是因为您可能需要许多可能的结果,包括:

  • 从IIS根文件夹提供的站点,并在域根(或不是)
  • 访问
  • 从IIS子文件夹提供的站点,并以相同的路径(或不是)访问
  • IIS重写规则(入站和出站),它添加公共路径和专用路径之间的映射层
  • 映射到子域的站点,DNS通配符映射(请求通过主机名区分)等
  • 站点映射到子应用程序,继承或不继承重写规则(和其他配置)
  • 以上所有

与此同时,您可以在很多地方与路径进行交互:

  • 内部物理路径,通常用于磁盘访问,通常需要映射虚拟路径
  • 内部虚拟路径
  • 内部ASP.NET路径,如虚拟路径,但它们可以是应用程序相关的(使用~),IIS并不总是识别
  • 面向公众的路径
  • 以上所有都可以是相对的或绝对的

所以是的,这是一团糟。

对于您的情况,最简单的事情可能是使开发环境镜像生产环境。除非您正在移动实际站点,否则将所有路径引用委派给配置感知功能可能比它的价值更麻烦。

答案 1 :(得分:0)

添加〜来创建相对于根目录的路径。一种建议是将文件夹上移几级或下移几级​​,以确保您的项目在正确的目录中。希望这行得通