两个网站运行相同的代码和不同的configuration文件?

我有一台运行IIS的Windows 2008R2服务器,运行一个站点(ASP.NET4.5)。 所有的参数都写在web.config文件中。

我必须添加一个新的站点,它将运行在与第一个站点相同的代码(相同的根文件夹)上,但会从它自己的configuration文件(而不是从第一个站点web.config)读取像sql连接string等参数。

我怎样才能做到这一点?

是否有可能在不同的应用程序池中运行第二个网站? 这两个网站当然会运行相同的.NET版本。

谢谢!

是。 我已经提供了多年来从多个AppPools完全相同的代码/文件; 它工作正常。

但是所有的实例都会以相同的方式读取web.config,因为微软的标准function并没有被写入做你正在做的事情。 所以你将不得不实现你自己定制的解决scheme来确定代码在哪个实例下运行,并根据它来select合适的configurationvariables。 您可以将您的configuration数据存储在web.config(在“configSections”中定义)内的自定义configuration部分中,或者在其他位置使用单独的.config文件。

我通常做的是切换代码的​​行为,根据它运行的IIS应用程序的path(即path)。 例如,如果站点在“/ example1”下被提供,我select一组configuration数据,并且如果它在“/ example2”下被提供,则获得另一组。 (请注意,当您通过VisualStudio运行网站时,您还需要处理Dev Server URL的configuration。)

另一个解决scheme是维护两个独立的根文件夹,每个文件夹都有自己的web.config,但是创build指向另一个根文件夹中的目录/文件的链接,因此您只需要将源文件保存在一个位置。

PowerShell会像这样创build链接的第一次:

function mklink { cmd /c mklink $args } Get-ChildItem "root-source" | Where {($_.PSIsContainer) -band ($_.Name -ne "web.config")} | mklink /d ("root-links-are-here" + $_.Name) $_.FullName Get-ChildItem "root-source" | Where {(!$_.PSIsContainer) -band ($_.Name -ne "web.config")} | mklink ("root-links-are-here" + $_.Name) $_.FullName