C#.NET在运行时从.config读取默认值

时间:2015-02-05 10:18:42

标签: .net visual-studio-2008

我有一个使用类库的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文件中的值,应用程序将读取新值,但我不知道项目之间有什么区别。

谢谢。

1 个答案:

答案 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"]);