2009-06-16 72 views
5

使用虚拟目录和/或虚拟应用程序建立共享相同的应用程序代码(aspx页面等),但有不同的web两个网站是否有可能.config文件?网站和代码驻留在同一个IIS上运行的同一台服务器上。两个ASP.NET网站共享应用程序文件,但具有不同的web.config

我正在使用IIS 6.

+1

两者有什么.config文件之间的区别?也许只是与认证和授权有关?通常可以找到其他方法来处理这些问题(例如,在Internet站点和管理它的Intranet站点之间共享)。 – 2009-06-16 13:07:52

+0

唯一的区别是一些appSettings。我只是好奇地想知道,如果我能在不更改任何代码的情况下做到这一点。 – 2009-06-16 13:11:28

+0

@ Jakob-你可以通过在前面某种特定应用的关键与应用的设置做到这一点,但仍然需要更改代码。 – RichardOD 2009-06-16 13:17:38

回答

5

如果你想保持代码在一个地方,简短的答案是否定的。可能最好的解决方案是让应用程序根据您确定的网站加载自定义配置文件(可能是主机头?)。

喜欢的东西ConfigurationManager.OpenExeConfiguration可能是有用的。

我想一个替代方案是想出一个配置约定,其中包含一个文件中的所有内容,并使用GetSection(具有某种特定于应用的前缀)来获得所需的特定设置。

0

应该是,虚拟应用程序中的web.config将被使用。如果布局是分层的,你可能需要寻找web.config继承

+0

我要补充,你需要在应用程序代码的2个物理副本作为一个web.config将在每个 – Pharabus 2009-06-16 13:05:56

1

这简直是不可能的。

为什么???

因为asp.net工作进程将从应用程序实际驻留的物理文件夹中读取默认配置文件。虚拟目录与web.config无关。它只是被web服务器(IIS)用来映射到特定的物理目录作为网站的根目录。

谢谢。

0

我假设你有应用程序A,应用程序B,应用程序C等等,它们都完全一样,除了它们在web.config文件中定义的某些配置属性不同之外。

当然这是可能的 - 最简单的方法是将项目设置为Web应用程序,然后编译,然后在应用程序中共享该DLL。你可以使用GAC。

您可以在IIS中设置单个站点,指向所有逻辑所在的共享目录(或使用每个虚拟目录),但不能共享app_code文件夹。

编辑

RichardOD有最好的答案上面,我之前已经实施了类似的东西。基本上,我设置了一个由web.config引用的自定义配置文件(以防止应用程序在我对其进行更改时重新启动)。这个文件是通过主机名读取的,并且包含每个主机的特定属性。

我只要将主机标头添加到IIS中,并在自定义配置文件中为该主机添加一个条目。完成。

1

我敢肯定,我这样做一次,几年前为了有一个网站的每个实例不同的数据库连接字符串。我的猜测是,有针对包含一个web.config用实例特定的设置中,然后里面每一个虚拟目录是一个应用程序,它引用的源代码的网站的每个实例的虚拟目录(其中包括共享web.config中)。

这样的伎俩,如果我没有记错,当时,对于一个给定的网站,有只包含一个web.config一个虚拟目录。这些值将被该虚拟目录的子应用程序继承。

相关问题