首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在IIS虚拟文件夹中而不是站点根中定位站点web.config?

问如何在IIS虚拟文件夹中而不是站点根中定位站点web.config?
EN

Stack Overflow用户
提问于 2016-07-26 23:05:16
回答 3查看 3.4K关注 0票数 2

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

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

代码语言:javascript
复制
<appSettings configSource="config\\app.config" />

不幸的是,IIS在站点根文件夹下查找一个名为"config“的物理路径,如果找不到它,就会发出一个错误。

有人知道如何欺骗IIS使用IIS虚拟文件夹吗?我也开放任何建议(包括服务器端代码),说明如何实现相同的目标(使用相同的文件夹为同一网站的多个实例提供服务,这些实例仅与appSettings不同)。

我还考虑过将所有内容转储到一个虚拟的"web“文件夹中,但这将需要在近200个文件中重新建立所有引用的基础。在这里,使用标记不是一个可行的解决方案,因为它重新建立了所有的基础,包括相同的页面引用,但是对.less文件的引用却莫名其妙地不起作用。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-28 09:36:19

经过更多的研究,我找到了一个可行的解决方案。使用configSource直接引用虚拟文件夹中的另一个配置文件是不可能的,因为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实例,这些实例仅与存储在“配置”IIS虚拟文件夹中的web.config文件的内容不同。显然,IIS中的每个应用程序实例都会使用自己的web.config文件将其配置虚拟文件夹指向不同的物理位置。

我已经测试过了,而且效果很好。

票数 2
EN

Stack Overflow用户

发布于 2016-07-26 23:33:07

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

票数 0
EN

Stack Overflow用户

发布于 2016-07-27 00:41:19

为什么不能为多个环境尝试Web配置转换。我给出了一个启动示例链接

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38601257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档