.net 作为嵌入式资源的配置文件
有没有人举过在VB.NET或C#中使用嵌入式配置文件的例子?我知道如何嵌入配置文件,但是以后访问它的最佳方法是什么?我可以像处理外部配置文件一样将其视为配置文件吗.net 作为嵌入式资源的配置文件,.net,configuration,.net,Configuration,有没有人举过在VB.NET或C#中使用嵌入式配置文件的例子?我知道如何嵌入配置文件,但是以后访问它的最佳方法是什么?我可以像处理外部配置文件一样将其视为配置文件吗 非常感谢您的帮助。我认为将配置文件作为嵌入式资源不是一个好主意。嵌入的资源被打包到dll中,在没有重新编译的情况下,您无法更改配置(这是配置文件的初衷)。您可以选择使用配置对象来包含任何配置设置的默认值。然后,您可以在配置对象的构造函数中,尝试使用app.config、数据库配置表等处的值覆盖默认配置值 这在许多方面都很有用: 单元测
非常感谢您的帮助。我认为将配置文件作为嵌入式资源不是一个好主意。嵌入的资源被打包到dll中,在没有重新编译的情况下,您无法更改配置(这是配置文件的初衷)。您可以选择使用配置对象来包含任何配置设置的默认值。然后,您可以在配置对象的构造函数中,尝试使用app.config、数据库配置表等处的值覆盖默认配置值 这在许多方面都很有用:
public class MyConfiguration
{
private string _defaultValue1 = "Value1";
private int _defaultValue2 = 22;
public string Value1
{
get
{
return _defaultValue1;
}
}
public int Value2
{
get
{
return _defaultValue2;
}
}
#region cnstr
public MyConfiguration()
{
LoadValuesFromConfigurationXml();
}
#endregion
public static MyConfiguration GetConfig()
{
// Optionally Cache the config values in here... caching code removed
// for simplicity
return new MyConfiguration();
}
internal void LoadValuesFromConfigurationXml()
{
int tempInt;
string value = ConfigurationManager.AppSettings["Value1"];
if (!String.IsNullOrEmpty(value))
{
_defaultValue1 = value;
}
value = ConfigurationManager.AppSettings["Value2"];
if (!String.IsNullOrEmpty(value))
{
if (int.TryParse(value, out tempInt))
{
_defaultValue2 = tempInt;
}
}
}
}
要访问配置值,请使用:MyConfiguration.GetConfig().Value1
希望这有帮助,
Max我通常有一个类,它将首选项保存在UserAppDataPath中的xml中。 比如:
public class Preferences
{
public static String prefFile = "/preferences.xml";
private static XmlDocument doc;
public static void set(String prefName, String value)
{
XmlElement nnode = (XmlElement)root.SelectSingleNode("//" + prefName);
if (nnode == null)
{
nnode = doc.CreateElement(prefName);
root.AppendChild(nnode);
}
nnode.InnerText = value;
}
public static String get(String prefName)
{
XmlElement nnode = (XmlElement)root.SelectSingleNode("//" + prefName);
if (nnode != null) return nnode.InnerText;
return "";
}
private static XmlElement root
{
get
{
if (doc == null)
{
doc = new XmlDocument();
try
{
doc.Load(Application.UserAppDataPath + prefFile);
}
catch (Exception)
{
doc.LoadXml("<root></root>");
NodeChangedHandler(null, null); // costringo a salvare.
}
doc.NodeChanged += new XmlNodeChangedEventHandler(NodeChangedHandler);
doc.NodeInserted += new XmlNodeChangedEventHandler(NodeChangedHandler);
doc.NodeRemoved += new XmlNodeChangedEventHandler(NodeChangedHandler);
}
return (XmlElement)doc.FirstChild;
}
}
private static void NodeChangedHandler(Object src, XmlNodeChangedEventArgs args)
{
if (doc != null)
doc.Save(prefFile);
}
}
公共类首选项
{
公共静态字符串prefFile=“/preferences.xml”;
私有静态xml文档文档;
公共静态无效集(字符串名称、字符串值)
{
XmlElement nnode=(XmlElement)root。选择SingleNode(“/”+prefName);
如果(nnode==null)
{
nnode=doc.CreateElement(prefName);
根追加子节点(nnode);
}
nnode.InnerText=值;
}
公共静态字符串get(字符串prefName)
{
XmlElement nnode=(XmlElement)root。选择SingleNode(“/”+prefName);
如果(nnode!=null)返回nnode.InnerText;
返回“”;
}
私有静态XmlElement根
{
得到
{
如果(doc==null)
{
doc=新的XmlDocument();
尝试
{
doc.Load(Application.UserAppDataPath+prefFile);
}
捕获(例外)
{
doc.LoadXml(“”);
NodeChangedHandler(null,null);//costringo a salvare。
}
doc.NodeChanged+=新的XMLnodeChangedHandler(NodeChangedHandler);
doc.NodeInserted+=新的XMLNodeChangedHandler(NodeChangedHandler);
doc.NodeRemoved+=新的XMLNodeChangedHandler(NodeChangedHandler);
}
返回(xmlement)doc.FirstChild;
}
}
私有静态void NodeChangedHandler(对象src,XmlNodeChangedEventArgs)
{
如果(doc!=null)
单据保存(预文件);
}
}
某些配置仅用于开发目的,而不是部署配置。这个功能仍然是需要的。那么,有几种方法可以做到这一点。我的观点是,在这种情况下,设置(静态)类中硬编码的常量要比从配置文件中获取值快得多。因为嵌入式资源需要重新编译来更改值,所以在更改其中的某些值之后,拥有一个需要重新编译的类并不是一种损失。实现这一点的另一种技术是为配置文件中找不到的值提供默认值—这些值不需要为部署指定,并且可以在开发环境中使用非嵌入式资源文件覆盖这些值……如何使单个exe能够在所有.net框架中运行?有没有办法在exe本身中嵌入app.config字符串?为什么没有注释就进行向下投票?如果上面的代码有问题,我很想知道原因,但是随机的下一票没有多大帮助…上一票是因为我认为这是一种优雅的方式,可以将上面的方法结合起来,即使用任何类型的默认配置文件和内部类来处理默认值,以及加载和保存配置文件。。。但我将它实现为一个内部静态类,因为我想不出任何好的理由让两个单独的配置同时处于活动状态。