【问题标题】:How do I get intellisense in app.config for a custom section?如何在 app.config 中为自定义部分获取智能感知?
【发布时间】:2010-09-27 13:05:43
【问题描述】:

我的 app.config 文件中有一个与我们的 IoC 容器类相关的自定义部分。在编辑本节的配置文件时如何获得智能感知,以及摆脱通知我缺少架构的编译器消息。

我在这里找到了这个问题:app.config configSections custom settings can not find schema information,但我不明白它是否适用于我的问题,以及如果适用的话如何使用那里的答案。

我还找到了这个页面How to get Intellisense for Web.config and App.config in Visual Studio .NET,但它说在运行应用程序之前要删除 xmlns 属性。这真的是唯一/最好的方法吗?

这是一个简单文件的示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="ServiceContainers"
        type="LVK.IoC.RegistrationsSectionHandler, LVK"/>
  </configSections>
  <ServiceContainers>
    <Registration type="DatabaseConnection" class="DatabaseConnection">
      <Parameter name="connectionString" type="System.String"
          value="TYPE=MSSQL2000;SERVER=localhost;DATABASE=db"/>
    </Registration>
  </ServiceContainers>
</configuration>

基本上,我希望能够在&lt;ServiceContainers&gt; 节点内输入&lt;R,并在智能感知下拉列表中获得向我建议的注册,以及它的适当属性。

【问题讨论】:

    标签: c# .net configuration app-config custom-sections


    【解决方案1】:

    如果您不想修改 DotNetConfig.xsd,可以添加 xsd 配置“内联”。

    在您的情况下,将以下属性添加到自定义部分

    <ServiceContainers xmlns="your_xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="your_xmlns location_of_your_schema">
    
             <Registration ....
    
    </ServiceContainers>
    

    这在本地测试 xsd 时很有用,因为 location_of_your_schema 可能是本地路径,并且当您准备生产时,将 location_of_your_schema 更改为 xsd 文件的公共 url。

    请注意,xsi:schemaLocation 属性必须包含由空格分隔的字符串对,其中每对字符串中的第一个字符串是命名空间 URI,第二个字符串是模式的位置。

    【讨论】:

    • 嗨,我知道这是一年前的事了。我试过这个,但是当我运行我的应用程序时我得到Unrecognized attribute 'xmlns:xsi'. Note that attribute names are case-sensitive.。如果我删除您提到的属性,我的应用程序将运行,但随后我失去了 Intellisense。你知道它为什么会导致运行时错误吗?谢谢,提前
    【解决方案2】:

    XML Intellisense 不会自动用于自定义配置部分。

    Visual Studio 可能会在编译时报告警告,抱怨自定义配置部分的属性未定义。这些警告可能会被忽略。

    如果您希望自定义配置部分的 XML IntelliSense 支持(或者如果您只是希望“找不到架构”警告消失),请将以下行添加到您的 DotNetConfig.xsd 文件中,紧跟在第一个 行(通常是 DotNetConfig.xsd 文件中的第二行)。

    <xs:include schemaLocation="YOUR_DIRECTORY\namespace.assemblyname.xsd"/>
    

    DotNetConfig.xsd 文件可以在 Visual Studio 8(或 9)安装目录的 Xml\Schemas 子目录中找到。

    【讨论】:

    • +1。当涉及到自定义配置部分时,模式经常被忽略。当您的管理员或 co-lo 必须对您的 app.config 或 web.config 进行更改时,它们非常有用。
    • 我有一个更好的解决方案。可能需要 VS 2010,不确定:) stackoverflow.com/questions/1127315/…
    • 是否有生成“YOUR_DIRECTORY\namespace.assemblyname.xsd”的方法?还是我只需要手动编写?
    • 为应该存在的功能编辑单个开发机器设置是疯狂的。已经有一个工具可以从自定义配置节类型 (ookii.org/Software/ConfigurationDocumentationGenerator) 生成 XSD 文档,根据这个答案:stackoverflow.com/a/7681132/88409,您可以简单地将 XSD 包含在您的解决方案中,然后用相应的 xmlns 标记您的节元素属性。
    • @Triynko:我同意,这太疯狂了。请注意,这个答案来自 2008 年。我希望现在有更好的解决方案 :)
    猜你喜欢
    • 2010-12-03
    • 2018-05-31
    • 2023-04-01
    • 1970-01-01
    • 2017-01-26
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多