关于c#:如何将自定义ConfigurationSection添加到Assembly?

How do I add custom ConfigurationSection to Assembly?

我花了几个星期的时间试图弄清楚这个问题,这是我以前问过的问题的副本,但没有得到答复,所以我在这里提炼这个问题。

我创建了一个自定义类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Configuration;

namespace mssql_gui
{
    public class TestConfigSection : ConfigurationSection
    {
        [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
        public TestConfigInstanceCollection Instances
        {
            get { return (TestConfigInstanceCollection)this[""]; }
            set { this[""] = value; }
        }
    }

    public class TestConfigInstanceCollection : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new TestConfigInstanceElement();
        }
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((TestConfigInstanceElement)element).Key;
        }
    }

    public class TestConfigInstanceElement : ConfigurationElement
    {
        [ConfigurationProperty("key", IsKey = true, IsRequired = true)]
        public string Key
        {
            get { return (string)base["key"]; }
            set { base["key"] = value; }
        }
        [ConfigurationProperty("value", IsRequired = true)]
        public string Value
        {
            get { return (string)base["value"]; }
            set { base["value"] = value; }
        }
    }
}

我已经实现了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="testSection" type="mssql_gui.TestConfigSection"/>
  </configSections>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
    </startup>
 
   
   
   
  </appSettings>
  <testSection>
   
  </testSection>
</configuration>

我已经尝试过访问它,我得到:

0

我知道在类型中,应该声明一个程序集dll,但我对此感到困惑…因为在MS的官方指令中,它说要为处理程序创建一个新类:

  • Create a public class that inherits from the
    System.Configuration.ConfigurationSection class.

  • Add code to define the section's attributes and elements.

  • 添加类(至少通过Visual Studio界面)将创建.cs文件,而不是.dll程序集文件,那么如何将该自定义类添加到程序集文件中,以便在app.config的部分中引用它?


    如果我理解正确,您就无法解决实际的Assembly是什么,因为您创建的.cs文件决定了该文件所包含的types

    装配(也许不是很精确的shortcut)只是你解决方案中的项目。它将被编译成单独的程序集-您提到的.dll-稍后。当您将类添加到给定项目中的任何.cs文件中时,编译时它将包含在项目的程序集中。

    默认情况下,如果您不为应该找到对应类型的configSection提供程序集,那么App.config默认为System.Configuration程序集-这就是您得到错误的地方,因为您已经在自己的程序集(=project)中声明了您的部分。

    在Visual Studio中,右键单击保存App.config文件的项目,然后选择Properties以检查其程序集名称:

    enter image description here

    然后将此名称添加到您的App.config部分声明中。在我的示例中,它的consoleapp1,因此我将相应地将其添加到配置中:

    1
    2
    3
    <configSections>
        <section name="testSection" type="mssql_gui.TestConfigSection, ConsoleApp1"/>
    </configSections>


    0

    需要将程序集的名称(类型所依赖的位置)添加到类型属性:

    您将从定义testconfigSection类的项目中的assemblyinfo.cs获取程序集的名称。

    1
     <section name="testSection" type="mssql_gui.TestConfigSection, ASSEMBLYNAME"/>

    示例计算程序集名称mssql_gui

    1
     <section name="testSection" type="mssql_gui.TestConfigSection, mssql_gui"/>

    你是这样读的:

    2

    有关详细信息,请访问msdn。

    如何:使用配置节创建自定义配置节