我正在编写一个c#类库,需要能够从web读取设置。config或app.config文件(取决于DLL是否从ASP. config引用。NET web应用程序或Windows窗体应用程序)。

我发现

ConfigurationSettings.AppSettings.Get("MySetting")

但该代码已被微软标记为弃用。

我读到我应该使用:

ConfigurationManager.AppSettings["MySetting"]

但是,在c#类库项目中,System.Configuration.ConfigurationManager类似乎不可用。

最好的方法是什么?


当前回答

阅读配置:

你需要在配置中添加一个引用:

打开项目上的“属性” 进入“设置”选项卡 添加“名称”和“值” 使用以下代码获取价值: 字符串值= Properties.Settings.Default.keyname;

保存到配置:

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

其他回答

为了完整起见,还有另一个选项只适用于web项目: System.Web.Configuration.WebConfigurationManager.AppSettings(“MySetting”)

这样做的好处是不需要添加额外的引用,因此对某些人来说可能更可取。

额外:如果你正在处理一个类库项目,你必须嵌入设置。json文件。

类库不应该直接引用 App.config类没有App.config,因为它不是一个 Application是一个类。

转到JSON文件的属性。 Change Build Action ->嵌入式资源。 使用下面的代码来阅读它。

var assembly = assembly . getexecutingassembly ();

var resourceStream = assembly。GetManifestResourceStream(“Assembly.file.json”);

string myString = reader.ReadToEnd();

现在我们有一个JSON字符串,我们可以使用JsonConvert反序列化它

如果您没有在程序集中嵌入该文件,则不能只使用DLL文件而不使用该文件

另一个可能的解决方案:

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

更新。net Framework 4.5和4.6;以下将不再工作:

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

现在通过Properties访问Setting类:

string keyvalue = Properties.Settings.Default.keyname;

有关更多信息,请参阅管理应用程序设置。

必须向系统添加引用。项目的配置程序集。