我有一个使用类库的3.5 .NET应用程序。对于该课程,我创建了一些设置,这些设置导致了 app.config 文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyClass.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<MyClass.Properties.Settings>
<setting name="FPISORescan" serializeAs="String">
<value>3</value>
</setting>
</MyClass.Properties.Settings>
</userSettings>
</configuration>
此文件在编译时以 MyClass.dll.config 的形式复制到目标文件夹中。
从MyClass代码我可以使用以下代码读取FPISORescan值:
int total_rescan = Convert.ToInt32(global::MyClass.Properties.Settings.Default.FPISORescan);
但是如果我将值修改为5,例如在.config文件中,则读取值保持不变(3)。要修改默认值,我必须在Visual Studio中更改设置并重新编译应用程序。
我有一个类似的项目工作正常,如果我修改.config文件中的值,应用程序将读取新值,但我不知道项目之间有什么区别。
谢谢。
答案 0 :(得分:1)
来自Visual Studio - Application Settings:
由于类库没有配置文件模型,因此应用程序设置不适用于类库项目。例外是Office DLL项目的Visual Studio工具,它可以有一个配置文件。
我刚试过这个,而你的权利,MyClass.dll.config中更改的设置将被忽略。
但是,如果您将这些设置复制到调用程序集的配置文件中,您会发现它可以按照您的意图运行。
如果您仍想在dll.config文件中进行配置设置,可以使用自己的解析器,如下所示:
private class ConfigurationManager
{
public static NameValueCollection AppSettings;
public static bool LoadConfig()
{
try
{
string ConfigFile = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.Replace("file:///","") + ".config";
if (System.IO.File.Exists(ConfigFile) == false)
return false;
System.Xml.XmlDocument oXml = new System.Xml.XmlDocument();
oXml.Load(ConfigFile);
System.Xml.XmlNodeList oList = oXml.GetElementsByTagName("appSettings");
AppSettings = new NameValueCollection();
foreach (System.Xml.XmlNode oNode in oList)
foreach (System.Xml.XmlNode oKey in oNode.ChildNodes)
AppSettings.Add(oKey.Attributes["key"].Value, oKey.Attributes["value"].Value);
return true;
}
catch (Exception ex)
{
Console.WriteLine("Error reading configuration: {0}", ex.Message);
return false;
}
}
}
然后你可以有一个属于你的dll的配置文件,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="FPISORescan" value="3"/>
</appSettings>
</configuration>
然后,要使用这些设置,您可以执行以下操作:
int total_rescan = Convert.ToInt32(ConfigurationManager.AppSettings["FPISORescan"]);