我想使用 App.config 来存储一些设置。 我尝试使用下一个代码从配置文件中获取参数。
private string GetSettingValue(string paramName)
{
return String.Format(ConfigurationManager.AppSettings[paramName]);
}
我还为其添加了
System.Configuration
(我使用了一个单独的类),并且在 App.config 文件中我有:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key ="key1" value ="Sample" />
</appSettings>
</configuration>
但是我在尝试使用
ConfigurationManager
- ConfigurationManager can't exist in such context
时遇到错误,但我已经添加了 System.Configuration
。还是我错过了什么?
编辑:
带有配置的类(完整视图)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
namespace browser
{
class ConfigFile
{
private string GetSettingValue(string paramName)
{
return String.Format(ConfigurationManager.AppSettings[paramName]);
}
}
}
编辑2
添加它的外观
这意味着问题不是在使用期间
ConfigurationManger
而是之前 - 程序“说”它“不知道这样的元素”,据我了解错误 - “Element ConfigurationManager”在这样的上下文中不存在”
编辑3
编辑4
好吧,我花了一段时间才看到这个,但是它无法编译:
return String.(ConfigurationManager.AppSettings[paramName]);
您甚至没有调用
String
类型的方法。只需这样做:
return ConfigurationManager.AppSettings[paramName];
AppSettings
KeyValuePair 已返回一个字符串。如果名称不存在,则会返回null
。
根据您的编辑,您尚未将引用添加到您正在处理的项目的System.Configuration
程序集中。
tools
>>
nuget
>>
console
并输入:
Install-Package System.Configuration.ConfigurationManager
如果您想要特定版本:
Install-Package System.Configuration.ConfigurationManager -Version 4.5.0
您的
ConfigurationManager
dll 现在将被导入,代码将开始工作。
使用 ASP .NET6
安装NuGet包System.Configuration.ConfigurationManager
我的配置文件的名称是App.Config
App.config内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="DBConnectionString" value="aa" />
<add key="DBName" value="bb" />
<add key="AuthKey" value="cc" />
</appSettings>
</configuration>
文件读取值,即SettingsService.cs:
using namespc = System.Configuration;
namespace Ecommerce_server.Services.SetupOperation
{
public interface ISettingsService
{
string MongoDBConnectionString { get => namespc.ConfigurationManager.AppSettings["DBConnectionString"]!; }
string DataBaseName { get => namespc.ConfigurationManager.AppSettings["DBConnectionString"]!; }
public string AuthKey { get => namespc.ConfigurationManager.AppSettings["DBConnectionString"]!; }
}
public class SettingsService : ISettingsService
{
public string MongoDBConnectionString { get => namespc.ConfigurationManager.AppSettings["DBConnectionString"]!; }
public string DataBaseName { get => namespc.ConfigurationManager.AppSettings["DBConnectionString"]!; }
public string AuthKey { get => namespc.ConfigurationManager.AppSettings["DBConnectionString"]!; }
}
}
注意:我们必须为ConfigurationManger创建一个专门的命名空间来解决歧义。
/// <summary>
/// set config, if key is not in file, create
/// </summary>
/// <param name="key">Nome do parâmetro</param>
/// <param name="value">Valor do parâmetro</param>
public static void SetConfig(string key, string value)
{
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
/// <summary>
/// Get key value, if not found, return null
/// </summary>
/// <param name="key"></param>
/// <returns>null if key is not found, else string with value</returns>
public static string GetConfig(string key)
{
return ConfigurationManager.AppSettings[key];
}
安装包System.Configuration.ConfigurationManager
使用namepc = System.Configuration;
字符串ConStrings = namepc.ConfigurationManager.ConnectionStrings[0].ToString();或
私有字符串 ConnectionStrings { get => namespc.ConfigurationManager.AppSettings["ConnectionStrings"]!; }对于App.config文件
谢谢。