如何在ASP.NET中为多个解决方案获取多个重叠的配置文件?

时间:2011-03-30 17:30:40

标签: asp.net web-config settings projects

我是ASP.net的新手,所以我只想搞清楚这一点。

首先,我有多个单独的项目将托管在同一台服务器上。

其次,他们必须能够共享某些设置(如连接字符串,配置选项等)。

第三,必须为不同的部署(测试,产品等)配置这些共享设置。

例如,我有两个项目: 项目A. B项目

我有一个名为“Setting1”的设置,两个项目都可以访问。

“Setting1”的值应来自以下文件之一: “TEST-config.xml中” “PROD-config.xml中” (将有两个以上的配置文件,但我现在会保持简单)

我想只有一个地方可以更改单个文本文件,该文件确定将使用哪个* -config.xml文件:

“WhichSettingsFile.xml”

以下是文件结构的示例:

\ WhichSettingsFile.xml \ TEST-config.xml中 \ PROD-config.xml中 \ PROJECT1 \ Project1.csproj \ PROJECT1 \的web.config \ Project1 ...(更多文件) \ Project2的\ Project2.csproj \ Project2的\的web.config \ Project2 ...(更多文件)

目前,每个项目都有一个“web.config”,如下所示:

<appSettings file="..\WhichSettingsFile.xml">
    ...
</appSettings>

然后我有一个像这样的文件“WhichSettingsFile.xml”:

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
    <add key="SettingsFilenamePrefix" value="PROD" />
</appSettings>

我有这样的代码:

public static string GetSetting(name) {
    string filename = System.Web.Configuration.WebConfigurationManager.AppSettings["SettingsFilenamePrefix"] + "-config.xml";
    // Open filename, parse as XML, get the values I need from it.
}

这意味着我可以在服务器A上托管两个项目,将WhichSettingsFile.xml设置为包含“PROD”,并且所有设置都将从“PROD-config.xml”中读取。我可以为测试服务器做同样的事情。所有这些价值观都在不同的项目中共享。

但是,我需要能够在文件系统上编辑这些文件,而不是将它们嵌入到dll /程序集中。当我从visual studio运行项目时,内置的asp.net托管服务器将文件部署为:

C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\lskdjflskj\slkdjfsld\klsjdfwbe

但是因为它嵌入在程序集中,所以没有“WhichSettingsFile.xml”文件。此外,“PROD-config.xml”和“TEST-config.xml”文件将不包括在内,因为它们实际上不是“代码”的一部分,因此不会被复制。

理想情况下,我想在部署文件夹中使用它:

C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\Project1\(all the compiled files here)
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\Project2\(all the compiled files here)
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\WhichSettingsFile.xml
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\PROD-config.xml
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\TEST-config.xml

但我不知道该怎么做。

所以我的问题: - “WhichSettingsFile.xml”嵌入到程序集中。我希望这是文件系统上的纯文本文件,在运行时由应用程序引用。我意识到我可能需要避免使用它。有没有更好的办法? - 我希望有多个配置文件,也可以作为文件系统上的纯文本文件。

我知道我所得到的不起作用,而且可能令人费解。但是有更好的方法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

每个目录可以有一个单独的web.config。 根目录web.config将影响所有子文件夹。但是可以使用本地web.config文件在子文件夹中覆盖值。

您可以使用<add ... />添加新值,您可以使用<remove ... />删除全局web.config中设置的现有值,您可以使用<clear />清除部分中的所有值。

http://weblogs.asp.net/mnolton/archive/2005/01/10/349986.aspx

如果单独的目录不适合您的体系结构,您可以将配置存储在数据库中,这在大多数情况下都是理想的,因为它提供了缓存,无需重新启动应用程序即可更改值,在多个Web之间共享设置服务器,更简单的部署(因为您不必在更改设置时部署文件)等等。