【发布时间】: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