gpt4 book ai didi

c# - AppSettings 中的 NULL 值 - 从类库访问配置文件

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:03 26 4
gpt4 key购买 nike

我正在尝试从 appSettings 读取值,但返回的是 null 值。还在我的类文件中的 element 变量中获取 null 值。下面是我的类文件内容。

using System;
using System.Configuration;

namespace SampleDLL
{
public class Class1
{
private static string GetAppSetting(Configuration config, string key)
{
var testValue = ConfigurationManager.AppSettings[key]; //Alternate option.
var element = config.AppSettings.Settings[key];
if (element == null) return string.Empty;
var value = element.Value;
return !string.IsNullOrEmpty(value) ? value : string.Empty;
}

public void GetDataAppConfig()
{
Configuration config = null;
var exeConfigPath = GetType().Assembly.Location;
try
{
config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
}
catch (Exception exception)
{
//handling exception here.
}
if (config != null)
{
var myValue = GetAppSetting(config, "myKey");
}
}
}
}

我的app.config文件如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="myKey" value="TestValue"/>
</appSettings>
</configuration>

System.Configuration 的引用出现在我的类库项目中。我正在从同一解决方案的另一个项目中存在的一个窗口窗体调用 GetDataAppConfig 窗体。

已编辑

我正在使用我的类库项目中的配置文件。

enter image description here

我的 WinForm 类如下所示,我用它来调用存在于类库项目的类 Class1 中的 GetDataAppConfig

using System;
using System.Windows.Forms;
using SampleDLL;

namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
var class1 = new Class1();
class1.GetDataAppConfig();
}
}
}

最佳答案

问题是您使用错误的配置文件调用 OpenExeConfiguration(),方法是使用以下方法确定配置文件

var exeConfigPath = GetType().Assembly.Location;

当您实际想要加载引用 Client1 的当前客户端的配置(WinForm应用程序在你的情况下)。

试试这个:

config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

参见 MSDN


更新:

由于要将配置文件嵌入到类库项目中,因此必须执行以下步骤:

  • 将文件名从 App.Config 更改为其他名称(这样它就不会与客户端的配置文件冲突)。

  • 将文件的Build Action更改为Content

  • Copy to output directory 更改为 Copy always

然后在你的代码中:

try
{
var configurationMap = new ExeConfigurationFileMap
{
// assuming name of your file is "ClassiLibrary1.config"
ExeConfigFilename = Path.Combine(exeConfigPath, "ClassLibrary1.config")
};

config = ConfigurationManager.OpenMappedExeConfiguration(configurationMap, ConfigurationUserLevel.None);
}

关于c# - AppSettings 中的 NULL 值 - 从类库访问配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com