gpt4 book ai didi

c# - 从 C# 应用程序中的配置文件检索值不起作用

转载 作者:行者123 更新时间:2023-11-30 15:28:32 26 4
gpt4 key购买 nike

我在尝试使用配置文件时遇到问题,我在这里和其他地方读过一些帖子但我无法解决工作中的问题,

在我这里的问题中,我添加了配置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CA.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<CA.Properties.Settings>

<appSettings>
<add key="ab123" value="D:\ab123\Source\ab123.c" />
</appSettings>

</CA.Properties.Settings>
</userSettings>
</configuration>

在文档中声明

string ab123 = ConfigurationManager.AppSettings["ab123"];

但在旁边,我显示错误是“未处理 win32 异常 - 系统找不到指定的文件”

System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["ab123"]);

当我运行此代码时,ab123 值始终为空!我确定路径是正常的。

我该如何解决?

最佳答案

从您的 xml 配置文件看来,您实际上是在尝试使用用户设置而不是应用程序设置,并且您混淆了一些想法。我认为更正确的配置版本可能是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CA.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<CA.Properties.Settings>
<setting name="ab123" serializeAs="String">
<value>D:\ab123\Source\ab123.c</value>
</setting>
</CA.Properties.Settings>
</userSettings>
</configuration>

唯一显着的区别是您定义设置的方式。比如我改成:

<setting name="ab123" serializeAs="String">
<value>D:\ab123\Source\ab123.c</value>
</setting>

您可以像这样使用不同的名称

创建更多设置

客户端代码有点不同,因为它必须找到 userSettings,找到程序属性设置,然后查询 key (如 ab123)。我添加了一些简单的错误处理,但您需要自己处理这些错误。为了简化代码,我只是返回错误。该代码包含内联注释,以帮助弄清楚发生了什么。

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Diagnostics;
using System.IO;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Retrieve the userSettings gorup
ConfigurationSectionGroup group = config.SectionGroups[@"userSettings"];
if (group == null) return;

// Get the program settings
ClientSettingsSection clientSection = group.Sections["CA.Properties.Settings"] as ClientSettingsSection;
if (clientSection == null) return;

// This retrieves the value associated with the key
string sFileName = clientSection.Settings.Get("ab123").Value.ValueXml.InnerText;

// Check if ab123 has a value and the file exists
if (!string.IsNullOrEmpty(sFileName) && System.IO.File.Exists(sFileName))
{
using (StreamReader sr = new StreamReader(sFileName))
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
System.Diagnostics.Debug.WriteLine(line);
}
}
}
}
}
}

如果您使用 Settings.settings 创建和删除设置,则代码可以简化为这样,因为 Visual Studio 将为您的设置对象创建绑定(bind),以便在设计时和运行时访问。有关通过 Visual Studio IDE 使用 Settings.settings 的信息,请参阅此 article .如果由于某种原因下面的代码不起作用,您可以使用上面的代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Diagnostics;
using System.IO;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string sFileName = Properties.Settings.Default.ab123;

// Check if ab123 has a value and the file exists
if (!string.IsNullOrEmpty(sFileName) && System.IO.File.Exists(sFileName))
{
using (StreamReader sr = new StreamReader(sFileName))
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
System.Diagnostics.Debug.WriteLine(line);
}
}
}
}
}
}

关于c# - 从 C# 应用程序中的配置文件检索值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656125/

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