是否可以在app.config
或web.config
文件中执行类似以下操作?
<appSettings>
<add key="MyBaseDir" value="C:\MyBase" />
<add key="Dir1" value="[MyBaseDir]\Dir1"/>
<add key="Dir2" value="[MyBaseDir]\Dir2"/>
</appSettings>
然后,我想要在代码中访问Dir2,只需简单地说:
ConfigurationManager.AppSettings["Dir2"]
当我在不同的服务器和位置安装我的应用程序时,这将对我有所帮助,因为我只需要更改整个app.config
中的一个条目。(我知道我可以在代码中管理所有的连接,但我更喜欢这种方式)。
发布于 2009-03-02 17:12:11
问得好。
我不认为有。如果有一种简单的方法,我相信这将是众所周知的,我看到Microsoft正在Visual Studio 2010中创建一种机制,用于部署不同的配置文件以进行部署和测试。
话虽如此,但我发现在ConnectionStrings
部分有一种称为"|DataDirectory|“的占位符。或许你可以看看那里有什么工作...
这是来自machine.config
的一篇文章,展示了它:
<connectionStrings>
<add
name="LocalSqlServer"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
发布于 2009-03-02 17:25:10
一种稍微复杂但更灵活的替代方法是创建一个表示配置节的类。在您的app.config
/ web.config
文件中,您可以拥有以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section must be the first section within the <configuration> node -->
<configSections>
<section name="DirectoryInfo" type="MyProjectNamespace.DirectoryInfoConfigSection, MyProjectAssemblyName" />
</configSections>
<DirectoryInfo>
<Directory MyBaseDir="C:\MyBase" Dir1="Dir1" Dir2="Dir2" />
</DirectoryInfo>
</configuration>
然后,在您的.NET代码中(我将在我的示例中使用C# ),您可以创建两个类,如下所示:
using System;
using System.Configuration;
namespace MyProjectNamespace {
public class DirectoryInfoConfigSection : ConfigurationSection {
[ConfigurationProperty("Directory")]
public DirectoryConfigElement Directory {
get {
return (DirectoryConfigElement)base["Directory"];
}
}
public class DirectoryConfigElement : ConfigurationElement {
[ConfigurationProperty("MyBaseDir")]
public String BaseDirectory {
get {
return (String)base["MyBaseDir"];
}
}
[ConfigurationProperty("Dir1")]
public String Directory1 {
get {
return (String)base["Dir1"];
}
}
[ConfigurationProperty("Dir2")]
public String Directory2 {
get {
return (String)base["Dir2"];
}
}
// You can make custom properties to combine your directory names.
public String Directory1Resolved {
get {
return System.IO.Path.Combine(BaseDirectory, Directory1);
}
}
}
}
最后,在您的程序代码中,您可以使用新类以这种方式访问app.config
变量:
DirectoryInfoConfigSection config =
(DirectoryInfoConfigSection)ConfigurationManager.GetSection("DirectoryInfo");
String dir1Path = config.Directory.Directory1Resolved; // This value will equal "C:\MyBase\Dir1"
发布于 2009-03-02 18:13:56
通常,我最终会编写一个带有属性的静态类来访问我的web.config的每个设置。
public static class ConfigManager
{
public static string MyBaseDir
{
return ConfigurationManager.AppSettings["MyBaseDir"].toString();
}
public static string Dir1
{
return MyBaseDir + ConfigurationManager.AppSettings["Dir1"].toString();
}
}
通常,在这个类需要的时候,我也会进行类型转换。它允许输入访问您的配置,如果设置更改,您只能在一个地方编辑它们。
通常,用这个类替换设置相对容易,并且提供了更好的可维护性。
https://stackoverflow.com/questions/603009
复制相似问题