gpt4 book ai didi

.net - 在自定义配置中添加 Intellisense

转载 作者:行者123 更新时间:2023-12-04 16:51:27 27 4
gpt4 key购买 nike

我看过相关问题 Intellisense for custom config section problem with namespaces它描述了我遇到的同样问题。虽然解决方案对我不起作用。

我在这里粘贴了我的整个解决方案,因此其他人也可以看到如何实现所需的功能。我已经学习了许多关于定制配置部分以及如何在配置文件中实现 Intellisense 的教程,但没有一个能解决我遇到的问题。

我收到一个 ConfigurationErrorException:

Unrecognized attribute 'xmlns'. Note that attribute names are case-sensitive.

我不知道热修复它。

我的自定义配置节类:
namespace CustomConfigurationExample
{
using System.Configuration;

public class MyConfiguration : ConfigurationSection
{
[ConfigurationProperty("MyInstance")]
public MyConfigurationElementCollection Configuration
{
get { return (MyConfigurationElementCollection)this["MyInstance"]; }
}
}

public class MyConfigurationElement : ConfigurationElement
{
[ConfigurationProperty("MyEnums", IsKey = true, IsRequired = true)]
public MyEnums MyEnums
{
get { return (MyEnums)base["MyEnums"]; }
}

[ConfigurationProperty("ConnectionAddress", IsKey = true, IsRequired = true)]
public string ConnectionAddress
{
get { return (string)this["ConnectionAddress"]; }
}

[ConfigurationProperty("LoadBalancer", IsKey = true, IsRequired = true)]
public bool LoadBalancer
{
get { return (bool)this["LoadBalancer"]; }
}

}

public class MyConfigurationElementCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new MyConfigurationElement();
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((MyConfigurationElement)element).MyEnums;
}
}
}

我的枚举:
namespace CustomConfigurationExample
{
public enum MyEnums
{
AB,
CD,
EF
}
}

我的 App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MyConfiguration" type="CustomConfigurationExample.MyConfiguration, CustomConfigurationExample" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<MyConfiguration xmlns="http://tempuri.org/MyConfiguration.xsd">
<MyInstance>
<add MyEnums="AB" LoadBalancer="true" ConnectionAddress="http://win.tendo.server:10305" />
</MyInstance>
</MyConfiguration>
</configuration>

我的架构文件:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="MyConfiguration"
targetNamespace="http://tempuri.org/MyConfiguration.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/MyConfiguration.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="add">
<xs:annotation>
<xs:documentation>My configuration.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="MyEnums" use="required" >
<xs:annotation>
<xs:documentation>MyEnums at blah blah</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="AB">
<xs:annotation>
<xs:documentation>AB</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="CD">
<xs:annotation>
<xs:documentation>CD</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="EF">
<xs:annotation>
<xs:documentation>EF</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ConnectionAddress"></xs:attribute>
<xs:attribute name="LoadBalancer">
<xs:annotation>
<xs:documentation>Loadbanlancer.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:boolean">
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

...最后我的program.cs:
namespace CustomConfigurationExample
{
using System.Collections;
using System.Configuration;
using System.Linq;

class Program
{
static void Main(string[] args)
{
var mySettings = new ArrayList(((MyConfiguration)ConfigurationManager.GetSection("MyConfiguration")).Configuration).Cast<MyConfigurationElement>().Select(x => new { x.MyEnums, x.LoadBalancer, x.ConnectionAddress, }).SingleOrDefault();
}
}
}

现在我的配置中的智能感知工作正常。但是当我运行我的程序时尝试映射我的设置时出现异常。
我可以删除我的 'xmlns="http://tempuri.org/MyConfiguration.xsd"' 部分
' <MyConfiguration xmlns="http://tempuri.org/MyConfiguration.xsd"> '在我的 App.config 文件中,并在我的 App.config 属性下的物理位置添加位置,并且智能感知也在工作和映射。但是物理位置与我的机器相关联,我希望该位置是相对的,因为架构文件是我的 VS 解决方案的一部分。我更喜欢在我的解决方案中引用相对文件。

我缺少什么?我怀疑我需要装饰 MyConfiguration具有命名空间和架构位置的类文件?

最佳答案

我在你的代码中发现了这个问题,结果很简单。您需要将 xmlns 标记添加到您的 MyConfiguration 类,如下所示:

public class MyConfiguration : ConfigurationSection
{
[ConfigurationProperty("xmlns")]
public string XmlNamespace
{
get
{
return (string)this["xmlns"];
}
set
{
this["xmlns"] = value;
}
}

[ConfigurationProperty("MyInstance")]
public MyConfigurationElementCollection Configuration
{
get { return (MyConfigurationElementCollection)this["MyInstance"]; }
}
}

然后 ConfigurationManager 知道如何读取它。

关于.net - 在自定义配置中添加 Intellisense,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20718215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com