【问题标题】:How do I get multiple overlapping config files for multiple solutions in ASP.NET?如何在 ASP.NET 中为多个解决方案获取多个重叠配置文件?
【发布时间】:2011-03-30 17:30:39
【问题描述】:

我对 ASP.net 很陌生,所以我只是想弄清楚这一点。

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

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

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

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

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

“Setting1”的值应来自以下文件之一: “测试配置.xml” “产品配置.xml” (会有两个以上的配置文件,但我暂时保持简单)

我只想在一个地方更改单个文本文件,这决定了将使用哪个 *-config.xml 文件:

“WhichSettingsFile.xml”

这是一个文件结构的例子:

\WhichSettingsFile.xml \测试配置.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”嵌入到程序集中。我希望这是应用程序在运行时引用的文件系统上的纯文本文件。我意识到我可能需要避免使用它。有没有更好的办法? -我想要多个配置文件,也可以作为文件系统上的纯文本文件。

我知道我所拥有的东西不起作用,并且可能令人费解。但是有没有更好的方法来做到这一点?谢谢!!

【问题讨论】:

  • 我认为您正在寻找的是 VS 中的 web.config 转换。但您需要使用 Visual Studio 2010 来执行此操作。

标签: asp.net web-config settings projects


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的建议。由于我们的要求,我们的设置过于复杂。我们有多个必须共享设置的解决方案/项目。此外,这些设置必须是特定于部署的。而且我想在运行时使用纯文本文件指定部署,这样我就可以维护一个代码库和一个部署文件/二进制文件。所以我想要一个简单的“config.xml”来指定“test”或“prod”,我希望能够编辑它并重新加载应用程序而无需重新编译。在这种情况下,多个 web.configs 似乎没有帮助。想法?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
相关资源
最近更新 更多