在同一个App.Config中使用ConnectionStrings和自定义ConfigSections

问题描述 投票:0回答:2

我有一个按预期工作的自定义 configSection。但是,当我添加“connectionStrings”部分时,我收到错误:

Configuration system failed to initialize

上线:

StencilObjects so = ConfigurationManager.GetSection( "stencilObjects" ) as StencilObjects;

这是配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="connection" connectionString="foo"/>
  </connectionStrings>
  <configSections>
    <section name="stencilObjects" type="Stencil.Configuration.StencilObjects, Stencil.Configuration"/>
  </configSections>
  <stencilObjects>
    <tableData>
      <table schema="Auth" name="SecurityQuestion" />
    </tableData>
  </stencilObjects>
</configuration>

使用自定义配置部分有什么限制吗?这是否不允许使用连接字符串?

再次,当我删除连接字符串时,应用程序按预期运行。

知道发生了什么吗?

c# .net app-config
2个回答
4
投票

我还没有找到一个链接来通过明确的声明来支持这一点,但我总是在文件顶部使用

configSections
,没有任何问题。尝试这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="stencilObjects" type="Stencil.Configuration.StencilObjects, Stencil.Configuration"/>
  </configSections>
  <connectionStrings>
    <add name="connection" connectionString="foo"/>
  </connectionStrings>
  <stencilObjects>
    <tableData>
      <table schema="Auth" name="SecurityQuestion" />
    </tableData>
  </stencilObjects>
</configuration>

configSections
绝对不需要需要位于其描述的部分之前。
connectionStrings
可以介于两者之间。


0
投票

正如 David 在回答中所说,

configSections
部分需要位于配置文件的顶部。

这里是从 Microsoft 备份它的链接:

如果此元素位于配置文件中,则它必须是第一个子元素 元素的元素。

因此您需要切换各部分,如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="stencilObjects" type="Stencil.Configuration.StencilObjects, Stencil.Configuration"/>
  </configSections>
  <connectionStrings>
    <add name="connection" connectionString="foo"/>
  </connectionStrings>
  <stencilObjects>
    <tableData>
      <table schema="Auth" name="SecurityQuestion" />
    </tableData>
  </stencilObjects>
</configuration>
© www.soinside.com 2019 - 2024. All rights reserved.