wpf应用程序设置实际上如何工作?

时间:2019-02-11 11:37:05

标签: c# .net wpf

在我的应用程序中,我有一个简单的登录页面,其中包含IP地址/登录名/密码/记住我的检查器。

当我检查记得我时,应用程序会将这些数据存储在以下文件中的文件中:C:\ Users \ user \ AppData \ Local \ App \ App.exe_Url_5b4qolbj3ip4ltms1ohyh4cdivud5wfg \ 1.0.0.0 \ user.config

这对我来说完全可以,但是问题是(我不知道为什么会这样)在我构建SetupWizard.msi时,此user.config由应用程序在应用程序文件夹中创建。

然后,当我执行程序并选中“记住我”复选框时,它不会在此应用程序创建的user.config中存储值,但仍存储在AppData文件中。

有什么方法可以摆脱应用程序文件夹中的user.config并将其仅存储在AppData中?主要原因还在于此(通过安装创建)配置文件具有两个扩展名:App.exe.config。我没有办法在发布时像这样。

保存代码

        public void Save_data()
    {
        if (CheckBoxRemCredts.IsChecked == true)
        {
            Properties.Settings.Default.userName = txtBoxLogin.Text;
            Variable.passEncrypted = (Encrypt(pswBox.Password));
            //  MessageBox.Show(Variable.passEncrypted); Debugging
            Properties.Settings.Default.userPass = Variable.passEncrypted;
            Properties.Settings.Default.ipAddress = txtBoxIP.Text;
            Properties.Settings.Default.Remme = "yes";
            Properties.Settings.Default.Save();
        }
        else
        {
            Properties.Settings.Default.userName = txtBoxLogin.Text;
            Properties.Settings.Default.userPass = pswBox.Password;
            Properties.Settings.Default.ipAddress = txtBoxIP.Text;
            Properties.Settings.Default.Remme = "no";
            Properties.Settings.Default.Reset();
        }
    }

Settings.settings文件:

   namespace SMS_Vrána.Properties {


[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

    private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

    public static Settings Default {
        get {
            return defaultInstance;
        }
    }

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("")]
    public string userPass {
        get {
            return ((string)(this["userPass"]));
        }
        set {
            this["userPass"] = value;
        }
    }

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("")]
    public string Remme {
        get {
            return ((string)(this["Remme"]));
        }
        set {
            this["Remme"] = value;
        }
    }

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("")]
    public string ipAddress {
        get {
            return ((string)(this["ipAddress"]));
        }
        set {
            this["ipAddress"] = value;
        }
    }

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("")]
    public string userName {
        get {
            return ((string)(this["userName"]));
        }
        set {
            this["userName"] = value;
        }
    }
}

}

2 个答案:

答案 0 :(得分:1)

检查设置范围。您可以通过在解决方案资源管理器->属性->设置中右键单击项目名称来实现。您的代码表明它是User。这就是为什么可能无法保存设置的原因:

  

根据范围,有两种类型的应用程序设置:

     
      
  • 应用程序范围的设置可用于信息,例如Web服务的URL或数据库连接字符串。这些值   与应用程序关联。因此,用户无法更改   它们在运行时。
  •   
  • 用户范围的设置可用于获取信息,例如保留表单的最后位置或字体首选项。用户可以更改   这些值在运行时。
  •   
     

您可以通过使用Scope属性来更改设置的类型。

     

项目系统将应用程序设置存储在两个XML文件中:

     
      
  • 一个app.config文件,该文件是在设计时创建第一个应用程序设置时创建的
  •   
  • 一个user.config文件,该文件在运行时在运行应用程序的用户更改任何用户设置的值时创建。
  •   
     

请注意,除非更改用户设置,否则不会将其写入磁盘   该应用程序专门调用一种方法来执行此操作。

有关设置here的更多信息。

答案 1 :(得分:0)

有什么方法可以摆脱应用程序文件夹中的user.config并将其仅存储在AppData中?主要原因还在于此(通过安装创建)配置文件具有两个扩展名:App.exe.config。

这是.NET设置的工作方式。如果您具有用户级设置,则应用程序同时需要user.config文件,如果您具有应用程序级设置,则需要app.config文件。应用程序创建用户设置的新文件时,会将user.config文件从安装文件夹复制到AppData\Local\文件夹。同样,在创建{APPNAME}.exe.config文件时,它将文件复制到安装文件夹中。

简而言之,没有理由删除(并且有足够的理由保留)应用程序安装文件夹中的user.config文件。