如何在 app.config 中为自定义部分获取智能感知?
Posted
技术标签:
【中文标题】如何在 app.config 中为自定义部分获取智能感知?【英文标题】:How do I get intellisense in app.config for a custom section? 【发布时间】: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>
基本上,我希望能够在<ServiceContainers>
节点内输入<R
,并在智能感知下拉列表中获得向我建议的注册,以及它的适当属性。
【问题讨论】:
【参考方案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 文件中,紧跟在第一个
<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,不确定:) ***.com/questions/1127315/… 是否有生成“YOUR_DIRECTORY\namespace.assemblyname.xsd”的方法?还是我只需要手动编写? 为应该存在的功能编辑单个开发机器设置是疯狂的。已经有一个工具可以从自定义配置节类型 (ookii.org/Software/ConfigurationDocumentationGenerator) 生成 XSD 文档,根据这个答案:***.com/a/7681132/88409,您可以简单地将 XSD 包含在您的解决方案中,然后用相应的 xmlns 标记您的节元素属性。 @Triynko:我同意,这太疯狂了。请注意,这个答案来自 2008 年。我希望现在有更好的解决方案 :)以上是关于如何在 app.config 中为自定义部分获取智能感知?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中为自定义 DataTemplateSelector 获取 DataTemplate 的 x:DataType
如何在 EF Core 5 中为自定义 SQL 配置导航属性
如何在 Visual Studio 中为自定义配置文件添加配置转换?
如何在android中为自定义视图创建setter和getter