我有多个ASP.NET web应用程序的实例,这些实例在各个方面都是相同的,除了包含实例特定设置的web.config文件之外。为了避免拥有同一组文件的多个副本,我希望将web.config文件的全部或部分放在IIS虚拟文件夹中。
我在站点根文件夹下创建了IIS虚拟文件夹"config“,并使用web.config文件中的以下行来引用它:
<appSettings configSource="config\\app.config" />不幸的是,IIS在站点根文件夹下查找一个名为"config“的物理路径,如果找不到它,就会发出一个错误。
有人知道如何欺骗IIS使用IIS虚拟文件夹吗?我也开放任何建议(包括服务器端代码),说明如何实现相同的目标(使用相同的文件夹为同一网站的多个实例提供服务,这些实例仅与appSettings不同)。
我还考虑过将所有内容转储到一个虚拟的"web“文件夹中,但这将需要在近200个文件中重新建立所有引用的基础。在这里,使用标记不是一个可行的解决方案,因为它重新建立了所有的基础,包括相同的页面引用,但是对.less文件的引用却莫名其妙地不起作用。
编辑:虽然我的想法是对多个实例使用相同的文件夹,但我想明确的是,每个实例都将作为一个单独的网站/应用程序在IIS中设置。只是每个实例都指向同一个物理文件夹。
发布于 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文件将其配置虚拟文件夹指向不同的物理位置。
我已经测试过了,而且效果很好。
发布于 2016-07-26 23:33:07
不,你不能。虚拟目录是IIS概念,但是您使用的配置文件重定向(单独的配置文件)是.NET/ASP.NET概念。因此,当发现单独的配置文件时,只搜索物理目录,因为搜索算法不知道什么是虚拟目录,也不知道如何在IIS配置中找到它们。
发布于 2016-07-27 00:41:19
为什么不能为多个环境尝试Web配置转换。我给出了一个启动示例链接
http://deanhume.com/home/blogpost/working-with-multiple-web-config-files/4100
https://stackoverflow.com/questions/38601257
复制相似问题