如果删除了 *.exe.config 文件会发生什么?

3
我向项目中添加了应用程序设置。这些设置保存在 'NameOfMyApp.exe.config' 中。如果有人删除了这个文件,会发生什么?是否需要重新创建它?在哪里存储默认设置的值?

当有人删除.exe文件时,同样的事情会发生。它将无法正常工作。 - Hans Passant
但是,如果您删除 *.exe.config 文件,则程序将正常工作。 - Eugene Maksimov
那么,现在就毫不犹豫地将其删除。不要部署你不需要的文件。 - Hans Passant
但如果用户更改了.config文件中的值,则程序将使用新值。 - Eugene Maksimov
3个回答

3
如果您正在使用设置设计器和生成的代码(位于Properties命名空间中),则在(生成的)代码中有默认值。

2
如果有人删除了.config文件,那么它就永远消失了。需要重新创建、部署或获取它。
存储默认设置的值——很可能会有两个明显的答案:配置文件或数据库表。如果您的默认设置相当静态且不是真正特定于用户的,那么配置文件可能是一个不错的选择(或在初始部署/安装时设置)。如果这些值可以被用户更改,最好将它们存储在数据库中。
我认为存储默认设置的位置取决于应用程序的性质以及用户如何使用它。
希望这能帮到你!
更新:哦,如果他们确实删除了配置文件,我希望您已经在源代码控制中存储了它。这可能会让您的生活变得更容易。祝好运!

1
如果生成的代码中存在 global::System.Configuration.DefaultSettingValueAttribute,则程序将正常工作。
我编写了一个简单的示例(Windows窗体):
using System;
using System.Windows.Forms;

    namespace AppSettings {
        public partial class Form1 : Form {
            public Form1() {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e) {
                textBox1.Text = Properties.Settings.Default.tbText;
            }
        }
    }

TbText的范围是应用程序。我以发布模式编译它。我删除了除*.exe之外的所有文件。这是有效的,因为这个设置在程序集中:

namespace AppSettings.Properties {


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.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.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         //here!
        [global::System.Configuration.DefaultSettingValueAttribute("!!!***HALLO***!!!")]
         //
        public string tbText {
            get {
                return ((string)(this["tbText"]));
            }
        }
    }
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接