如何在VS2013中调试“对象引用未设置为对象的实例”?

时间:2014-02-14 07:49:29

标签: c# asp.net visual-studio azure

我有一个c#Azure项目,它只是一个web api,并且想要删除一些非API默认组件(欢迎页面,帮助等)。执行此操作后,启动应用程序时,出现错误消息“对象引用未设置为对象的实例”。我之前在Azure中做过这些事情时已经看到了这一点,并且每次都以某种方式绕过它们。我的问题是:我如何自己调试此错误?这个错误描述非常缺乏细节(没有调用堆栈或任何东西,好像应用程序尚未启动,并且对话框是模态的,因此我无法点击VS中的任何内容)

额外说明:

  • 这是一个ASP .NET项目。
  • 一旦我发布到Azure,它就可以工作了。
  • 完全复制项目并重建后,它似乎有效。然后当与NuGet依赖关系混淆时,我们回到它不工作(我已经尝试删除我的包文件夹并让NuGet重新创建 - 没有运气;根本不知道是否与NuGet有关)
  • 我重新复制了这个项目,所以只是'MySolutionFolder' - > 'MySolutionFolder - Copy',使用相同版本的VS重新打开,运行正常。这显然是一个非常草率的解决方案,所以寻找更好的东西。

如评论中所述,该问题可能涉及对各种文件的访问权限,很可能与NuGet相关但也可能是Azure,这解释了为什么复制到新的解决方案目录“修复”了这个问题。我希望看到更好的错误信息,例如“错误:Visual Studio无法写入'packages.config'”,所以我实际上知道 where 来解决这类问题。就像现在一样,它就像一个编译错误,上面写着“代码中的语法错误。某处。好运找到它”

11 个答案:

答案 0 :(得分:10)

不幸的是,我从来没有找到一种以更一般的方式调试此类问题的方法。我最终解决了这个问题,然后又看到它再次弹出;按照别人在另一个论坛上试过的建议,我删除了我的包文件夹,并让NuGet重新创建它,无论出于何种原因纠正了这个问题。

另一次,来自this question的解决方案有效(删除并重新添加所有角色);有时这似乎需要重新安装Azure SDK并重新启动计算机。

修改

最后,我能找到的最佳解决方案是here:删除SUO文件并重新启动VS。

希望此解决方案能够帮助将来遇到类似问题的人!

答案 1 :(得分:5)

勾选调试>例外>公共语言运行时异常>系统> NullReferenceException并运行你的应用程序

答案 2 :(得分:2)

答案 3 :(得分:2)

在asp.net应用启动周期的早期(调试器附加之前)出现问题时,我看到了类似的症状。

我之前使用的一种解决方法:

  1. 确保使用本地IIS实例而不是IIS Express进行调试(右键单击项目属性 - > Web - >服务器下拉列表 - >本地IIS
  2. 点击F5并获取错误对话框。 (只是为了确保IIS进程已经启动)。关闭错误对话框。
  3. 调试 - >附加到流程 - >附加到w3wp.exe(iis进程)。如果没有,请确保同时检查“显示所有用户/会话的进程”。
  4. 通过更改web.config文件强制重启您的应用。
  5. 现在重启将在调试器从一开始就连接到进程。如果这没有提供更多有用的信息,那么请关闭“Just My Code”调试异常/断点处理并重复。

答案 4 :(得分:1)

对于Visual Studio 2019,单击菜单“ 调试> Windows>例外设置”。

公共语言运行时异常下,在 System.NullReferenceException 上打钩。调试器将在捕获此异常的地方中断。

enter image description here

答案 5 :(得分:0)

答案 6 :(得分:0)

在global.asax中:

protected void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();
    string message = error.Message;
    string callStack = error.StackTrace();  
    //Write message and callStack to file
    ...
}

答案 7 :(得分:0)

在这种情况下,我不认为调试会有所帮助。

但是,通过右键单击卸载/重新加载Azure项目可能会修复。在发现这个之前,我尝试过很多东西。

如上所述here

答案 8 :(得分:0)

我还启动了Compute Emulator的“Object reference not set”问题。我发现运行VS作为管理员解决了这个问题。

答案 9 :(得分:0)

将项目目标更改为4.6.1。似乎对我有用。

答案 10 :(得分:-1)

您可以通过日志进行调试。就像你可以检查诊断日志。通过代码启用它们。它有一些配置。我也遇到过这类问题,这对我来说很难追查。所以我启用了诊断日志并在我的自定义检查点上写日志。