首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >app.config/web.config中的变量

app.config/web.config中的变量
EN

Stack Overflow用户
提问于 2009-03-02 16:37:16
回答 11查看 154.6K关注 0票数 95

是否可以在app.configweb.config文件中执行类似以下操作?

代码语言:javascript
复制
<appSettings>
 <add key="MyBaseDir" value="C:\MyBase" />
 <add key="Dir1" value="[MyBaseDir]\Dir1"/>
 <add key="Dir2" value="[MyBaseDir]\Dir2"/>
</appSettings>

然后,我想要在代码中访问Dir2,只需简单地说:

代码语言:javascript
复制
 ConfigurationManager.AppSettings["Dir2"]

当我在不同的服务器和位置安装我的应用程序时,这将对我有所帮助,因为我只需要更改整个app.config中的一个条目。(我知道我可以在代码中管理所有的连接,但我更喜欢这种方式)。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-03-02 17:12:11

问得好。

我不认为有。如果有一种简单的方法,我相信这将是众所周知的,我看到Microsoft正在Visual Studio 2010中创建一种机制,用于部署不同的配置文件以进行部署和测试。

话虽如此,但我发现在ConnectionStrings部分有一种称为"|DataDirectory|“的占位符。或许你可以看看那里有什么工作...

这是来自machine.config的一篇文章,展示了它:

代码语言:javascript
复制
 <connectionStrings>
    <add
        name="LocalSqlServer"
        connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
        providerName="System.Data.SqlClient"
    />
 </connectionStrings>
票数 7
EN

Stack Overflow用户

发布于 2009-03-02 17:25:10

一种稍微复杂但更灵活的替代方法是创建一个表示配置节的类。在您的app.config / web.config文件中,您可以拥有以下内容:

代码语言:javascript
复制
<?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# ),您可以创建两个类,如下所示:

代码语言:javascript
复制
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变量:

代码语言:javascript
复制
DirectoryInfoConfigSection config =
  (DirectoryInfoConfigSection)ConfigurationManager.GetSection("DirectoryInfo");
String dir1Path = config.Directory.Directory1Resolved;  // This value will equal "C:\MyBase\Dir1"
票数 23
EN

Stack Overflow用户

发布于 2009-03-02 18:13:56

通常,我最终会编写一个带有属性的静态类来访问我的web.config的每个设置。

代码语言:javascript
复制
public static class ConfigManager 
{
    public static string MyBaseDir
    {
        return ConfigurationManager.AppSettings["MyBaseDir"].toString();
    }

    public static string Dir1
    {
        return MyBaseDir + ConfigurationManager.AppSettings["Dir1"].toString();
    }

}

通常,在这个类需要的时候,我也会进行类型转换。它允许输入访问您的配置,如果设置更改,您只能在一个地方编辑它们。

通常,用这个类替换设置相对容易,并且提供了更好的可维护性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/603009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档