如果* .exe.config被删除会发生什么?

时间:2011-08-07 18:00:21

标签: c# settings config

我在项目中添加了应用程序设置。这些设置保存在“NameOfMyApp.exe.config”中。如果有人要删除这个文件会怎么样?是否有必要再次创建它?我应该在哪里存储默认设置的值?

3 个答案:

答案 0 :(得分:2)

如果有人删除.config文件,它已经消失了,宝贝,走了。并且有必要再次创建,部署或获取它。

存储默认设置的值 - 可能有两个明显的答案可能是配置文件或数据库表。如果默认设置是相当静态的而不是真正特定于用户的,则配置文件可能是一个不错的选择(或者在初始部署/安装时设置)。如果用户可以更改这些值,则最好将它们存储在数据库中。

我认为存储默认设置的位置的答案实际上取决于应用程序的性质以及用户如何使用它。

希望这有帮助!

更新:哦,如果他们确实删除了配置,我希望你把它存储在某个地方的源代码管理中。 :)可能会让你的生活更轻松。祝你好运!!

答案 1 :(得分:2)

如果您使用的是设置设计器和生成的代码(在“属性”命名空间中),则(生成的)代码中有默认值。

答案 2 :(得分:1)

如果生成的代码中存在global :: System.Configuration.DefaultSettingValueAttribute,程序将正常工作。

我写了一个简单的例子(Windows Forms):

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