C#项目的.settings文件中的自定义类型(及其数组)的配置步骤

来源:互联网 发布:mac 音量快捷键 编辑:程序博客网 时间:2024/06/05 09:32


刚刚根据网上各种文章,以及经过各种尝试,整理得出如果步骤可以使.settings文件支持自定义类型。

过程有点复杂,不知道是因为我的VS问题还是什么原因。

先说说环境:Server2008R2 + VS2010 Ultimate。测试时VS启动了一个管理员权限实例,一个普通权限实例(仅作记录,无它用途)

下面是过程,从新建项目开始:

  1. 新建一个项目(类库,控制台均可),这里我新建一个类库,取名为CustomSettingsSample
  2. 新建一个POCO类,这里名为“Config”
    public class Config{public String Name { get; set; }public String Value { get; set; }}
  3. 新建一个.settings文件,这里名为“Settings.settings”,并将其拖到Properties文件夹下(这步貌似不是必须,只是为了项目整洁)
    项目结构如下:
  4. 双击打开Settings.settings,添加一个新项,这里名为“Setting”

  5. 此时,按F6构建项目,点击“同步”删除所有相关的settings文件,然后关闭解决方案(这步很重要,要不然Settings的编辑器会有问题),如果关闭解决方案在接下来的步骤还是不行的话,请重启vs
  6. 右键点击.settings文件,选择“打开方式”,在弹出的对话框中选择“XML(文本)编辑器”


    此时可以直接看见Settings.settings文件内容:
    <?xml version='1.0' encoding='utf-8'?><SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="CustomSettingsSample.Properties" GeneratedClassName="Settings">  <Profiles />  <Settings>    <Setting Name="Setting" Type="System.String" Scope="Application">      <Value Profile="(Default)" />    </Setting>  </Settings></SettingsFile>
  7. 修改对应Setting节点中的Type属性,将其改为自定义类型的全称(如果类在其它程序中必须加上程序集名称)
    修改后如下:
    <?xml version='1.0' encoding='utf-8'?><SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="CustomSettingsSample.Properties" GeneratedClassName="Settings">  <Profiles />  <Settings>    <Setting Name="Setting" Type="CustomSettingsSample.Config" Scope="Application">      <Value Profile="(Default)" />    </Setting>  </Settings></SettingsFile>
  8. 保存修改,并返回可视化的编辑器界面,此时可以发现右面的“值”一列已经变为不可输入状态(没有了下拉箭头,但是还能打字的,但是乱输入值的话会报错)
    原始类型(String):
    复杂类型(Config):

    此时,创建工作已经完毕,剩下就是输入值的问题了,其实之前做的第五步就是为了让复杂类型能被编辑器识别并且编辑所做的,接下来就设置类型的默认值以及在config文件内的值的设置了(这两部是相辅相成的)。
  9. 创建一个复杂对象的数组类型,这个是用来参考的
    在Settings.settings文件中加入一个新的项,这里名为“Settings”

  10. 用XML编辑器打开Settings.settings文件,将Name="Settings"的Setting节点的Type值改为“CustomSettingsSample.Config[]
    <?xml version='1.0' encoding='utf-8'?><SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="CustomSettingsSample.Properties" GeneratedClassName="Settings">  <Profiles />  <Settings>    <Setting Name="Setting" Type="CustomSettingsSample.Config" Scope="Application">      <Value Profile="(Default)" />    </Setting>    <Setting Name="Settings" Type="CustomSettingsSample.Config[]" Scope="Application">      <Value Profile="(Default)" />    </Setting>  </Settings></SettingsFile>
  11. 返回可视化编辑器,尝试编辑Settings的值,发现右面的下拉箭头已经变为三个点的按钮

    点击打开之后就可以看见一个标题为“Config集合编辑器”的可视化的编辑框,点击“添加”按钮加入一项(其实第五步中重新打开工作空间就是为了这个编辑器,个人实验过,如果不关闭工作空间,编辑器是识别不到新定义的自定义类型的

    发现了吗,右边“杂项”一栏整整是我们第一步中新建的POCO的public属性,随便填点东西吧。
  12. 修改完成之后点确认,然后返回,可以看到Settings.settings文件中对应值的那一栏实际是一个xml(不要手动编辑喔)

  13. 现在我们打开项目中的app.config(web form项目是web.config)
    等等,我什么时候新建了个app.config啊!?其实这个是settings编辑器创建的,刚好我们要用到刚刚的内容。
    看看app.config里面的内容
    <?xml version="1.0" encoding="utf-8" ?><configuration>    <configSections>        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >            <section name="CustomSettingsSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />        </sectionGroup>    </configSections>    <applicationSettings>        <CustomSettingsSample.Properties.Settings>            <setting name="Settings" serializeAs="Xml">                <value>                 <ArrayOfConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                     xmlns:xsd="http://www.w3.org/2001/XMLSchema">                     <Config>                         <Name>a</Name>                         <Value>b</Value>                     </Config>                 </ArrayOfConfig>                </value>            </setting>        </CustomSettingsSample.Properties.Settings>    </applicationSettings></configuration>
  14. 好,现在嘛,开始编辑那个类型是Config(不是数组)的“Setting”项的内容了,方法很简单,将app.config修改一下,成下面这样子就好了
    <?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >      <section name="CustomSettingsSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />    </sectionGroup>  </configSections>  <applicationSettings>    <CustomSettingsSample.Properties.Settings>      <setting name="Settings" serializeAs="Xml">        <value>          <ArrayOfConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xmlns:xsd="http://www.w3.org/2001/XMLSchema">            <Config>              <Name>a</Name>              <Value>b</Value>            </Config>          </ArrayOfConfig>        </value>      </setting>      <setting name="Setting" serializeAs="Xml">        <value>          <Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xmlns:xsd="http://www.w3.org/2001/XMLSchema">            <Name>a</Name>            <Value>b</Value>          </Config>        </value>      </setting>    </CustomSettingsSample.Properties.Settings>  </applicationSettings></configuration>
    注意Config节点上的属性,这是xml的一些信息,其实细心点可以注意到,在所有复杂类型(包括数组)的最外层(value的第一直接子节点)都有这个信息。
    剩下的结构规律嘛,一眼就看出来了,我就不多说了
  15. 这个时候返回Settings.settings的可视化编辑器,会弹出一个提示框

    点“是”就可以更新Settings.settings文件的内容,如果点“否”嘛,刚刚做的就白费了,而且后面会导致可视化编辑器不能再编辑(这是我的情况)
  16. 这是最后一步了,返回到编辑器之后看到“Setting”项有值了

    这时候看看值的那一栏,还是没有下拉菜单按钮的,如果出现了下拉按钮就表示编辑器认错项类型了,就是之前某一步错了或者没做
    这时全局保存一下,然后回到看app.config,如果里面的内容没被清空就证明配置成功了,如果被清空了就证明编辑器出错,重启下vs或关闭下解决方案再试。

好了,至此为止,已经全部完成了。如果那个名为“Settings”的数组类型的项没有用的话可以删掉,那项只是作为演示用途。

PS:稍微说明一下,整个过程中,Settings.settings文件中有两项,一项是名为“Setting”的Config类型项,一项是名为“Settings”的Config[]类型项,两项名字只相差一个“s”。而文件的名字和里面配置项的名字都是跟Setting这个单词相关的,可能会比较容易混淆,请自己用心分别。

刚刚发现,原来Settings.settings里面的项是不能与文件名相同的,这个就自己改一下就好,由于截图较多这里就不改了。
原创粉丝点击