我创建了一个直接映射到Web ConfigSection
的类。配置。我的课程定义如下:
public class myConfiguration: ConfigurationSection
{
public myConfiguration()
{
//
// TODO: Add constructor logic here
//
}
[ConfigurationProperty("fileName", IsRequired = true)]
public string FileName
{
get { return this["fileName"] as string; }
}
[ConfigurationProperty("rootNode", IsRequired = true)]
public string RootNode
{
get { return this["rootNode"] as string; }
}
[ConfigurationProperty("childNode", IsRequired = true)]
public string ChildNode
{
get { return this["childNode"] as string; }
}
[ConfigurationProperty("comparableAttributes", IsRequired = true)]
public string ComparableAttributes
{
get
{ return this["comparableAttributes"] as string; }
}
}
我在web.config文件中创建了如下部分:
<configSections>
<section name="myConfigDemo" type="myConfiguration"/>
</configSections>
然后我将此部分用作
<myConfigDemo fileName="myXml.xml" rootNode="world" childNode="country" comparableAttributes="id, population">
</myConfigDemo>
现在的问题是如何在运行时分配fileName = "anotherFile.xml"
?我试过了
[ConfigurationProperty("fileName", IsRequired = true)]
public string FileName
{
get { return this["fileName"] as string; }
set {
string str = this["fileName"] as string;
str = value; }
}
但我的Visual Studio让我的电脑挂起我使用上面的代码!我知道当你只使用get
但set
使我的电脑挂起时,该属性是只读的!我该怎么做才能更改文件名运行时?
答案 0 :(得分:2)
有.net类可以更准确地访问几乎所有可以在.config文件中找到的内容(而不仅仅是appSettings或ConnectionStrings元素);文档:http://msdn.microsoft.com/en-us/library/x1et32w6.aspx
我不确定他们是否提供改变价值观的方法(看看)。但是,一个gotcha:config文件旨在在启动时配置应用程序;换句话说,应用程序在启动时读取文件,然后再次手动或通过进程更改文件。使用asp.net应用程序,这意味着应用程序将自动重启(默认情况下; IIS设置)。
如果您确实想在运行时重新配置应用程序,则每次保存文件时都会强制重新启动它。因此,在这种情况下,编写代码以在内存中进行所有更改(例如,通过使用xml类),然后立即保存所有内容。
app-pool中有一个设置可以禁用配置更改时的自动重启;但是,如果你这样做,当你进行配置更改时应用程序将不会重新启动,并且你必须编写代码来重新启动它以获取这些更改。
如果您想自动将自定义配置类序列化为xml元素,则此类可能是您的朋友:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx
我希望有所帮助。