“调用目标引发了异常”

时间:2012-04-25 09:31:29

标签: winforms visual-studio-2010 exception

背景信息

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

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

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

问题

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

备注

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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