0

背景资料

我正在使用 VS2010 在 C# 中维护一个 Winforms 应用程序。主窗体有一个带有几个选项卡的 TabControl。启动对象是一个具有 Main 函数的类(这里没有什么新东西),它除了触发主窗体之外什么也不做。该表单创建一个 Datastore 对象,该对象从静态 Settings 类获取其到 DB 服务器的连接字符串。这个类有一个静态初始化块:

static Settings()
    {
        IniReader reader = new IniReader("config.ini");
        //...
    }

配置文件位于主项目文件夹中(与启动对象相同)(也位于 bin 和 debug 文件夹中)。

问题

在解决方案资源管理器中,当我在设计器中双击主窗体以将其打开时,VS 会崩溃,并出现此问题标题中提到的异常,但还会出现错误,指出它在“找不到 config.ini 文件” C:\Program 文件 (x86)\Microsoft Visual Studio 10.0\Common7\IDE"。可以通过将配置文件复制到该位置来解决该问题,但我认为这不是一个真正的解决方案。 为什么 VS 会在该位置搜索文件? 奇怪的是,我上次打开解决方案时,并没有这个问题。从那以后,我没有安装新的 Windows 更新。

评论

应用程序的架构和其他设计决策不是我的。我只是在扩展程序,在这样做的同时,我正在尝试改进架构。但这不是这个问题的主题。

4

1 回答 1

0

我想你已经明白 VS 设计器创建了它试图显示的表单的一个实例,这意味着它将调用构造函数和任何静态构造函数。

我见过的避免此类问题的最常见模式是将任何重要的初始化逻辑移动到单独的 Initialise 方法中。在那里,除了构造函数之外的任何方法中,您都可以使用...

if (!DesignMode)
{
    //your code here
}

...围绕在设计器中正确呈现表单实际上不需要的任何代码。我意识到这意味着对代码进行一些重构,您可能不想这样做,但我使用了这种方法,它很好地避免了这种问题。

于 2012-05-04T12:11:55.367 回答