关于在.NET Win应用程序中存储应用程序设置的位置的困惑

sup*_*tsy 2 .net connection-string appsettings

我需要知道应用程序设置(连接字符串)的存储位置和方式,以便在运行时更改它们并保存.

我知道在VS中你可以配置项目>属性下的设置,这些设置存储在apps安装目录下的appname.exe.config文件中.但是"应用程序范围"在运行时不能读/写,如果你改变那些在用户范围下,配置文件的副本在用户目录下创建,并且不会被应用程序的其他用户访问.

我需要有一种方法,以便用户可以根据应用程序内部的需要配置存储在公共配置文件中的连接字符串,然后让所有其他用户(在该计算机上)也可以使用它.我该怎么做到这一点?

小智 9

最简单,最快速的解决方案是在普通用户有权读/写的共享位置创建配置文件.

创建一个具有配置数据的公共属性的类,然后在此共享位置将其序列化为xml.

public class Configuration
{
  // config filename
  private static _name = Path.Combine(
      System.Environment.GetFolderPath(
         Environment.SpecialFolder.CommonApplicationData),
      @"MyApp\MyConfig.xml");

  // the connection string
  public string ConnectionString {get;set;}

  // load the configuration from disk
  public static Configuration Load()
  {
    using (var f = File.OpenRead(name))
    {
      var x = new System.Xml.Serialization.XmlSerializer(typeof(Configuration));
      return x.Deserialize(f) as Configuration;
    }
  }

  // save the configuration to disk
  public static Save(Configuration config)
  {
    using (var f = File.OpenWrite(name))
    {
      var x = new System.Xml.Serialization.XmlSerializer(typeof(Configuration));
      x.Serialize(f, config);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*n M 5

应用程序范围连接字符串是可写的,但您必须以不同的方式获取字符串以供使用.例如:

Configuration c = ConfigurationManager
   .OpenExeConfiguration(ConfigurationUserLevel.None);

c.ConnectionStrings.ConnectionStrings["myConnectionString"]
   .ConnectionString = "theConnectionString";
c.Save();
Run Code Online (Sandbox Code Playgroud)

您还应该刷新该部分,以便正确检索更改.紧接着:

string sectionName = c.ConnectionStrings.SectionInformation.SectionName;
ConfigurationManager.RefreshSection(sectionName);
Run Code Online (Sandbox Code Playgroud)

  • 除非用户具有对基础文件系统的必要权限,否则无法保存配置文件. (2认同)