是否可以使用虚拟目录和/或虚拟应用程序来设置两个共享相同应用程序代码(aspx页面等)但具有不同web.config文件的网站?站点和代码驻留在同一IIS上运行的同一服务器上。
我正在使用IIS 6.
答案 0 :(得分:5)
如果您想将代码保存在一个地方,简短的答案是否定的。可能最好的解决方案是让应用程序根据您确定站点的内容(可能是主机头?)加载自定义配置文件。
ConfigurationManager.OpenExeConfiguration之类的内容可能很有用。
我想另一种方法是提出一个配置约定,你可以在一个文件中包含所有内容并使用GetSection(使用某种应用程序特定的前缀)来获取所需的特定设置。< / p>
答案 1 :(得分:1)
这根本不可能。
为什么???
因为asp.net工作进程将从应用程序实际驻留的物理文件夹中读取默认配置文件。虚拟目录与web.config无关。它仅被Web服务器(IIS)用作映射到网站根目录的特定物理目录。
感谢。
答案 2 :(得分:1)
我非常确定我曾在多年前这样做,以便为网站的每个实例提供不同的数据库连接字符串。我的猜测是,网站的每个实例都有一个虚拟目录,仅包含一个带有实例特定设置的web.config,然后在每个虚拟目录中都有一个引用源代码的应用程序(其中包括一个共享的web.config)。
因此,如果我没记错的话,对于给定的网站来说,这个技巧就是拥有一个只包含web.config的虚拟目录。其中的值将由该虚拟目录的子应用程序继承。
答案 3 :(得分:0)
应该是,将使用虚拟应用程序中的web.config。如果布局是分层的,您可能需要注意web.config继承
答案 4 :(得分:0)
我假设你有应用程序A,应用程序B,应用程序C等等,它们都完全相同,只是它们的web.config文件中定义的某些配置属性不同。
当然这是可能的 - 最简单的方法是将项目设置为Web应用程序,然后编译,然后在应用程序之间共享该DLL。您可以根据自己的意愿使用GAC。
您可以在IIS中设置指向所有逻辑所在的共享目录(或使用每个目录中的虚拟目录)的单个站点,但不能共享app_code文件夹。
修改
RichardOD上面有最好的答案,我之前已经实现了类似的东西。基本上,我设置了一个自定义配置文件,该文件由web.config引用(以防止应用程序重新启动时对其进行更改)。此文件由主机名读取,并包含基于每个主机的特定属性。
我所做的只是向IIS添加主机标头,并在自定义配置文件中添加该主机的条目。完成。