代码在调试中工作并从 Visual Studio 运行,但是发布模式会出错

Posted

技术标签:

【中文标题】代码在调试中工作并从 Visual Studio 运行,但是发布模式会出错【英文标题】:Code works in debug and running from visual studio however release mode gives error 【发布时间】:2015-10-19 09:31:57 【问题描述】:

关于调试和发布有很多问题,但我的情况不同。 下面是我的代码

private void frmMDIStpDataView_Load(object sender, EventArgs e)

    string[] tempCommandLine = Environment.GetCommandLineArgs();
    if (tempCommandLine.Count() > 1 && !string.IsNullOrEmpty(tempCommandLine[1]))
        ModFormManager.strTmpPath = tempCommandLine[1];
    m_FormManager = ModFormManager.FormManager;//Line where i am getting object reference error
        //some other code
;

ModFormManager 是一个静态类,它的所有成员都是静态的。FormManager 是一个非静态类的对象。如果我从 Visual Studio 2013 运行,则此错误不会出现在 Debug more 和 Release 模式下。如果我双击发行版中构建的 exe,则会出现错误。我收到内部异常,因为 “对象引用未设置为对象的实例”

【问题讨论】:

你到底得到了什么异常?您知道 GetCommandLineArgs 中的第一个条目是可执行文件的文件名,其余的是在命令行中输入的附加参数。 FormManager of ModFormManager 未设置为对象的实例。你在哪里调用ModFormManager的构造函数?您确定 FormManager 已初始化吗?它是否通过在您的本地工作但不在发布中的东西进行初始化?一些配置错误? 如果异常在属性ModFormManager.FormManager中,你应该发布属性的代码。您发布的代码与您的错误无关。 这是另一种情况,程序员发现为 AppDomain.CurrentDomain.UnhandledException 事件编写事件处理程序是可选的。如果您不这样做,那么您只是不知道为什么代码在没有附加调试器的情况下会失败。当它是导致异常的 Form 类的字段初始值设定项时,它从来都不是简单的。调用Debugger.Launch()是问答方式。 【参考方案1】:

调试模式通常会初始化堆数据分配。该程序可能依赖于这种行为。寻找没有被初始化的变量和缓冲区。就像在这种情况下,ModFormManager 没有被初始化。创建 ModFormManager 的对象,然后使用它。

【讨论】:

以上是关于代码在调试中工作并从 Visual Studio 运行,但是发布模式会出错的主要内容,如果未能解决你的问题,请参考以下文章

我的 Visual Studio 2012 程序在 Debug 中工作,在没有调试的情况下发布 (ctrl + F5) 但不是发布。我该如何解决?

visual studio vb.net 转到行短键(Ctrl + G)不起作用?

使用 Visual Studio 2008 构建 OpenCV 应用程序并从另一台计算机运行它

代码在visual studio css文件中工作,但在ruby on rails css文件中出现错误

会话无法在 chrome 中工作并在 Firefox 中工作

ctypes.cast 在 python2 中工作并在 python3 中抛出 ArgumentError