在.NET从读取或的app.config设置的web.config(Reading settings

2019-06-17 16:26发布

我工作的一个C#类库,它需要能够读取来自设置web.configapp.config的文件(根据是否DLL从ASP.NET Web应用程序中引用或Windows窗体应用程序)。

我发现,

ConfigurationSettings.AppSettings.Get("MySetting")

工作,但被微软视为不提倡使用的代码已经被标记。

我读过,我应该使用:

ConfigurationManager.AppSettings["MySetting"]

然而, System.Configuration.ConfigurationManager类似乎并没有提供从C#类库项目。

有谁知道做到这一点的最好办法是什么?

Answer 1:

你将需要添加一个参考 System.Configuration在你的项目的引用文件夹中

你绝对应该使用ConfigurationManager在过时的ConfigurationSettings



Answer 2:

对于样品的App.config象下面这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

您阅读使用代码上面的应用程序设置如下图所示:

using System.Configuration;

你也可能还需要增加一个参考System.Configuration在您的项目,如果没有一个了。 然后,您可以访问像这样的价值观:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

希望这可以帮助!



Answer 3:

更新框架4.5和4.6; 以下将不再起作用:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

现在,通过属性访问设置类:

string keyvalue= Properties.Settings.Default.keyname;

请参阅管理应用程序设置以获取更多信息。



Answer 4:

右键单击您的类库,并从菜单中选择“添加引用”选项; 最后从.NET选项卡,选择System.Configuration。 这将包括System.Configuration DLL到您的项目。



Answer 5:

IM使用这一点,它很适合我

textBox1.Text = ConfigurationManager.AppSettings["Name"];


Answer 6:

阅读从配置:

你将需要添加到配置参考

  1. 你的项目打开“属性”
  2. 进入“设置”选项卡
  3. 添加“名称”和“值”
  4. 获得值使用下面的代码:

    字符串值= Properties.Settings.Default.keyname;

保存到配置:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();


Answer 7:

您必须添加到项目中的System.Configuration程序集的引用。



Answer 8:

你可能会添加App.config文件到一个DLL。 App.Config中仅适用于可执行的项目,因为所有的DLL采取从配置文件中的配置对于正在执行的exe文件。

比方说,你在你的解决方案两个项目:

  • SomeDll
  • SomeExe

你的问题可能是相关型号给你,包括在app.config到SomeDLL而不是SomeExe的事实。 SomeDll是能够从SomeExe项目中读取配置。



Answer 9:

试试这个:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

在web.config中应该是一个结构:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>


Answer 10:

我有同样的问题,只是读取它们是这样的:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]


Answer 11:

web.config中使用的Web应用程序。 web.config默认情况下,先后为Web应用程序所需的多种配置。 你可以有一个web.config下您的Web应用程序的每个文件夹。

app.config用于Windows应用程序。 当您在vs.net构建应用程序,它会自动重命名为<appname>.exe.config并且此文件必须与应用程序一起交付。

你可以用同样的方法来调用app settings从两个配置文件值:

System.Configuration.ConfigurationSettings.AppSettings["Key"]


Answer 12:

我强烈建议你创建此调用的包装。 有点像ConfigurationReaderService和使用依赖注入来获得这个类。 这样,您就能够隔离此配置文件用于测试目的。

所以使用ConfigurationManager.AppSettings["something"]; 建议并返回该值。 你可以用这个方法来创建某种默认返回如果没有在config文件可用键。



Answer 13:

此外,您还可以使用formo :

配置:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

码:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();


Answer 14:

因为我发现最好的方法通过使包装类在System.Configuration如下访问系统的方式应用程序设置变量

public class BaseConfiguration
    {
        protected static object GetAppSetting(Type expectedType, string key)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            try
            {
                if (expectedType == typeof(int))
                    return int.Parse(value);
                if (expectedType == typeof(string))
                    return value;

                throw new Exception("Type not supported.");
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                    key, expectedType), ex);
            }
        }
    }

现在,我们可以使用另一个类,如下硬编码名称访问所需的设置变量

public class ConfigurationSettings:BaseConfiguration
    {
        #region App setting

        public static string ApplicationName
        {
            get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
        }

        public static string MailBccAddress
        {
            get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
        }

        public static string DefaultConnection
        {
            get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
        }

        #endregion App setting

        #region global setting



        #endregion global setting
    }


Answer 15:

只是为了完整性,有仅适用于Web项目的另一种选择:

System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

这样做的好处是,它不需要额外的参考如此添加可能是优选的一些人。



Answer 16:

第1步:引用选项卡上单击鼠标右键添加引用。

步骤2:点击组件选项卡上

步骤3:搜索“System.Configuration”

第4步:单击确定。

然后,它会工作

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];


Answer 17:

我一直在努力,现在找到了同样的问题几天修复。 我能够通过增加在web.config的AppSettings的标签中的一个关键解决这个问题。 这应该使用助手时覆盖.dll文件。

<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>


Answer 18:

我总是创建申报所有配置值类型安全性的IConfig接口。 一个配置实现类,然后包装来System.Configuration呼叫。 您的所有来电System.Configuration现在是在一个地方,这样更容易和更清洁维护并跟踪其正在使用,并宣布其默认值的字段。 我写了一组私人辅助方法来读取和解析常用数据类型。

使用IoC框架,你可以通过简单的界面传递给类构造函数的任何地方访问IConfig字段中输入您的应用程序。 你还那么能够在单元测试中创造了IConfig接口的模拟实现,所以你现在就可以测试各种配置值和值组合,而无需触摸你的App.config或Web.config文件。



Answer 19:

另一种可能的解决方案:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();


Answer 20:

请检查你正在.NET版本。 它应该是高于4你必须System.Configuration系统库添加到您的应用程序



Answer 21:

您可以使用下面一行,在我的情况下,它是工作:

System.Configuration.ConfigurationSettings.AppSettings["yourKeyName"]

你必须要小心,上面的代码行也是旧版本及其在新库已过时。



Answer 22:

这里有一个例子: App.config

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer


文章来源: Reading settings from app.config or web.config in .net