我遇到了一个问题,当我尝试使用配置文件时,我在这里和其他地方阅读了一些帖子,但我无法解决工作中的问题,
在我的问题中,我添加了配置。
<?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>
Run Code Online (Sandbox Code Playgroud)
文件中声明
string ab123 = ConfigurationManager.AppSettings["ab123"];
Run Code Online (Sandbox Code Playgroud)
但是在侧面,我显示的错误是“win32 Exception was unhandled - System can not find the file specified”
System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["ab123"]);
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,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>
Run Code Online (Sandbox Code Playgroud)
唯一显着的区别是定义设置的方式。例如我将其更改为:
<setting name="ab123" serializeAs="String">
<value>D:\ab123\Source\ab123.c</value>
</setting>
Run Code Online (Sandbox Code Playgroud)
您可以使用不同的方法创建更多设置,就像这样name
客户端代码有点不同,因为它必须找到 userSettings,找到程序属性设置,然后查询密钥(如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);
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Settings.settings 来创建和删除设置,那么代码可以简化为这样,因为 Visual Studio 将为您的设置对象创建在设计时和运行时访问的绑定。有关通过 Visual Studio IDE 使用 Settings.settings 的信息,请参阅本文。如果由于某种原因下面的代码不起作用,您可以使用上面的代码:
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);
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5905 次 |
| 最近记录: |