我正在尝试从Visual Studio 2012中的项目中的app.config文件中读取两个变量。但是我得到一个例外:"配置系统无法初始化"。有什么想法吗?
这是我的app.config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<configurationSections>
<section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection"
/>
</configurationSections>
<connectionConfig portNumber="7777"/>
<connectionConfig hostName="localhost" />
</configuration>
C#文件:
namespace ConnectionManager
{
public class MyConnectionConfigurationSection : System.Configuration.ConfigurationSection
{
[ConfigurationProperty("portNumber")]
public string PortNumber
{
get
{
return (string)this["portNumber"];
}
set
{
this["portNumber"] = value;
}
}
[ConfigurationProperty("hostName")]
public string HostName
{
get
{
return (string)this["hostName"];
}
set
{
this["hostName"] = value;
}
}
}
public static class ConnectionApplication
{
public static MyConnectionConfigurationSection Config { get; internal set; }
public static void Initialize()
{
try
{
Config = ConfigurationManager.GetSection("connectionConfig") as MyConnectionConfigurationSection ;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
}
}
class Program
{
static string portNumber;
static string hostName;
static void Main(string[] args)
{
ConnectionApplication.Initialize();
portNumber=ConnectionApplication.Config.PortNumber;
Console.WriteLine(portNumber);
hostName = ConnectionApplication.Config.HostName;
Console.WriteLine(hostName);
}
}
}
似乎它无法仅初始化...当我转储异常时,异常说:配置系统无法初始化。任何建议我做错了什么
答案 0 :(得分:3)
再次检查您的代码:
<configurationSections>
<section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection"
/>
</configurationSections>
<connectionConfig portNumber="7777"/>
<connectionConfig hostName="localhost" />
<configSections>
<connectionConfig portNumber="7777" hostName="localhost" />
是使用自定义栏目的正确方法。<section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection" />
属性上的type
应该提供该类的完整程序集限定名称。也就是说,如果您的程序集被调用ConnectionManager
,则应配置ConnectionManager.MyConnectionConfigurationSection, ConnectionManager
。 BTW,在我看来,如果您要配置2个简单设置,我就不会使用自定义配置部分(这是一种过度杀伤)。为什么不使用内置在.NET配置模型上的appSettings
?
<appSettings>
<add key="connectionManager:host" value="localhost" />
<add key="connectionManager:port" value="7777" />
</appSettings>
您将以这种方式访问这些参数:
string host ConfigurationManager.AppSettings["connectionManager:host"];
int port = int.Parse(ConfigurationManager.AppSettings["connectionManager:port"]);
答案 1 :(得分:2)
检查配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<configurationSections>
<section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection"/>
</configurationSections>
<connectionConfig portNumber="7777"/>
<connectionConfig hostName="localhost" />
</configuration>
包含portnumber和hostname的部分位于您在代码中读取的部分之外。
试试这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<configurationSections>
<section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection">
<connectionConfig portNumber="7777"/>
<connectionConfig hostName="localhost" />
</section>
</configurationSections>
</configuration>