我最近用 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);
}
}
我在 MSDN 论坛上找到了对此问题的参考,其中一位用户说:
“旧”值(您在开发时定义的值)是硬编码的。如果框架无法访问或打开配置文件,它将使用默认值。如果您在 dll 中使用设置,这种情况总是会发生。
这是否意味着我不能在配置文件中存储 DLL 的外部值?(我的同事以某种方式完成了这项工作......)
由于我的框架似乎无法访问或打开配置文件,我该如何找出它失败的原因?甚至检测何时发生这种情况?
德克尔:这有点帮助。不幸的是,我正在将此 DLL 写入规范,因此我实际上无法访问应用程序的配置文件。正如您将在上面提到的,我的同事创建了一个“设置1 .settings”文件。当时我不明白这一点,但现在看来,添加“1”会将其排除在任何调用它的应用程序的设置空间之外。
我想我想弄清楚为什么 DLL 似乎没有在同一目录中找到它旁边的配置文件。一步一步地跟踪代码没有发现任何问题。
顺便说一句,我可以将程序集的“输出类型”从“类库”更改为“Windows 应用程序”,并在 DLL 代码的开头添加以下行:
[STAThread]
public static void Main(string[] args)
{
System.Windows.Forms.Application.Run(new form());
}
当我运行它时,它会生成一个不同的配置文件(“.exe.config”),我可以更改该文件并让它从文件中提取新数据。所以我有点困惑。有任何想法吗?