如何在IIS虚拟文件夹而不是站点根目录

时间:2016-07-26 23:05:16

标签: c# asp.net iis iis-8

我有多个ASP.NET Web应用程序实例,除了包含特定于实例的设置的web.config文件之外,它们在各方面都是相同的。为了避免同一组文件的多个副本,我想将全部或部分web.config文件放在 IIS 虚拟文件夹中。

我创建了一个IIS虚拟文件夹" config"在站点根文件夹下,使用web.config文件中的以下行来引用它:

<appSettings configSource="config\\app.config" />

不幸的是,IIS在名为&#34; config&#34;的站点根文件夹下查找物理路径,并在无法找到错误时发出错误。

有没有人知道如何诱骗IIS使用 IIS 虚拟文件夹?我还打开了有关如何实现相同目标的任何建议(包括服务器端代码)(使用相同的文件夹来为同一网站的多个实例提供服务)。

我还考虑将所有内容转储到虚拟&#34; web&#34;文件夹,但这需要重新基于近200个文件中的所有引用。使用标记在这里不是一个可行的解决方案,因为它重新定位包括相同页面引用在内的所有内容,但是莫名其妙地不能用于引用.less文件。

编辑:虽然想法是为多个实例使用相同的文件夹,但我想明确指出,每个实例都将在IIS中设置为一个单独的网站/应用程序。只是每个实例都指向同一个物理文件夹。

3 个答案:

答案 0 :(得分:1)

经过更多的研究,我发现了一个可行的解决方案。确实,使用configSource将 direct 引用到虚拟文件夹中的另一个配置文件是不可能的,因为web.config文件中的文件夹引用应该是物理引用。但是,IIS虚拟目录可以各自具有自己的 web.config文件。我的解决方案是:

1)在IIS中的站点下创建一个虚拟文件夹。将它指向你想要的任何物理路径。

2)将web.config文件添加到该文件夹​​,其中包含特定于您网站实例的内容。从我原始帖子中的示例来看,这将是appSettings部分。

3)在服务器端代码中,使用System.Xml.XPath方法使用System.Web.HttpContext.Current.Server.MapPath("config/web.config")返回的路径迭代web.config文件。 MapPath将IIS虚拟文件夹相对引用转换为服务器上的可用物理引用。

在虚拟文件夹中使用web.config有另一个好处,因为它对于客户端浏览器是不可见的,就像站点web.config一样。

使用上述方法,可以从一个源物理位置使用相同的二进制文件和客户端可查看文件,以便为同一站点的多个IIS实例提供服务,区别仅在于存储在“config”IIS中的web.config文件的内容虚拟文件夹。显然,IIS中的每个应用程序实例都会将其配置虚拟文件夹指向具有自己的web.config文件的不同物理位置。

我测试了这个并且它有效。

答案 1 :(得分:0)

不,你不能。虚拟目录是一个IIS概念,但您使用的配置文件重定向(单独的配置文件)是.NET / ASP.NET概念。因此,当发现单独的配置文件时,只搜索物理目录,因为搜索算法不知道什么是虚拟目录以及如何在IIS配置中找到它们。

答案 2 :(得分:0)

为什么不能针对多种环境尝试Web配置转换。我已经提供了一个启动示例链接

http://deanhume.com/home/blogpost/working-with-multiple-web-config-files/4100

相关问题