c# – Settings.Default.始终在持久性存储(XML文件)中返回默认值而不是值

前端之家收集整理的这篇文章主要介绍了c# – Settings.Default.始终在持久性存储(XML文件)中返回默认值而不是值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近在C#(.Net 2.0)中写了一个DLL,其中包含一个需要IP地址的类.我的同事改变了类从“.dll.config”( XML)文件中检索IP – 这显然是由他创建的“应用程序设置”文件(Settings1.settings)自动生成的.这样做的好处是允许最终用户随意更改XML / config文件中的IP地址.

不幸的是,当我从树中检查他的代码并尝试编译(或使用)这个新代码时,调用此DLL的任何应用程序只能获取默认值,而不是文件中的值.

调用配置文件的构造函数如下所示:

public class form : System.Windows.Forms.Form
    {
        public form()
        {
            // This call is required by the Windows Form Designer.
            InitializeComponent();
            IP = IPAddress.Parse(Settings1.Default.IPAddress);
        }
    }

我发现a reference to this problem on the MSDN forums用户说:

the ‘old’ values (the ones you define at development time) are hard coded. If the franework isn’t able to access or open the config file it will use the defaults instead. This will always happen if you use settings in a dll.

>这是否意味着我无法在配置文件中存储DLL的外部值? (我的同事以某种方式使这项工作…)
>由于我的框架似乎无法访问或打开配置文件,我如何知道为什么它失败?甚至可以检测出这种情况?

Decker:这有点帮助不幸的是,我正在将这个DLL写入规范,所以我实际上没有访问应用程序的配置文件.如上所述,我的同事创建了一个“Settings1.settings”文件.我当时不明白这一点,但现在似乎添加“1”可以将它从任何调用它的应用程序的设置空间中删除.

我想我想知道的是为什么DLL似乎找不到位于同一目录下的配置文件.跟踪代码一步一步显示没有任何东西.

除此之外,我可以将我的程序集的“输出类型”从“类库”更改为“Windows应用程序”,并在我的DLL代码的开头添加以下行:

[STAThread]
    public static void Main(string[] args)
    {
        System.Windows.Forms.Application.Run(new form());
    }

当我运行它,它会生成一个不同的配置文件(“.exe.config”),我可以改变它,并从文件中拉出新的数据.所以我有点困惑.有任何想法吗?

解决方法

我正在处理原型中的一个应用程序中的这个确切问题.虽然Decker建议将配置文件一起入侵,但我认为这是一个非常不方便的手动操作,作为构建周期的一部分.而不是我决定最干净的解决方案是让每个库解析自己的library.dll.config文件.它仍然不完美,它需要一些额外的锅炉代码,但它似乎是唯一的方式来绕过拜占庭的方式.Net处理这些app.config文件.
原文链接:https://www.f2er.com/csharp/92521.html

猜你在找的C#相关文章