【问题标题】:ASP.NET "Object reference not set..." errorASP.NET“未设置对象引用...”错误
【发布时间】:2011-02-08 21:15:42
【问题描述】:

我有一个使用 ASP.NET 编写的网站。我们有一台开发机器和一台部署服务器。
该站点在开发机器上运行良好,但传输时(使用简单的 FTP 上传)会产生奇怪的行为。它开始工作得很好,但一段时间后停止工作并抛出异常“异常:对象引用未设置为对象的实例。”。
交易是开发机器上网站的绝对路径与部署服务器上的不同(为什么它们应该相似?),确切的错误是:

异常:对象引用未设置为对象的实例。 在 C:\inetpub\wwwroot\SOMEPROJECTSolution\ALLPROJECT\SOMEPROJECT_Objects\Player.cs:SOMEPROJECT_GameLayer.M_Game.PlayerActiveGame(Int32 PlayerID) 在 C:\inetpub\wwwroot\SOMEPROJECTSolution 中的 SOMEPROJECT_Objects.Player..ctor(Int32 PlayerID) 的第 123 行\ALLPROJECT\SOMEPROJECT_GameLayer\M_Game.cs:C:\inetpub\wwwroot\SOMEPROJECTSolution\ALLPROJECT\SOMEPROJECT-sms\Web\getsms.aspx.cs:第 59 行中 Web.getsms.Page_Load(Object sender, EventArgs e) 的第 85 行

它正在寻找的地址是 DEVELOPMENT 机器上的地址,因为该站点现在驻留在部署服务器上。

任何想法为什么会发生这种情况将不胜感激。

谢谢, 罗马

【问题讨论】:

  • 粘贴相关代码... Player.cs 第 123 行及其周围有什么?该路径仅来自调试符号。你需要弄清楚什么对象是空的,而这只能通过代码来完成。
  • 代码只是一个 datareader.read() [一个 SQLDataReader 对象],我无法通过它——因为它被编译到机器上。 (我们将其“发布”到机器上)。当它使用 VS 调试时 - 它工作得很好。
  • 好的,那么您的 DataReader 为空。您没有从您期望的数据库中提取数据。您确定您的数据库环境和配置设置已在生产环境中设置并正确吗?

标签: asp.net exception object reference


【解决方案1】:

很遗憾,在您发布相关代码之前,我们目前无法提供太多帮助。

不过,您不必担心路径。仅显示该路径是因为您在开发机器上构建了程序集,然后将其移动到服务器。它经常发生。这不是问题的根源。

【讨论】:

  • 哦...所以路径不是真实的?问题出在代码本身?
  • 这很奇怪 - 如果我使用 VS 调试的相同代码 - 它可以工作。如果我使用实际地址运行代码 - 我会收到此异常。奇怪 - 有什么想法吗?
  • 很简单:SqlParameter[] Par = new SqlParameter[1]; Par[0] = new SqlParameter("@PlayerID", SqlDbType.Int); Par[0].Value = PlayerID; SqlDataReader dr = Dal.GetReader("SP_Get_Player", Par); if (dr.Read()) ... 中断“dr.read()”
  • 正如我所说 - 使用内部 VS Web 服务器但不使用 IIS
【解决方案2】:

它正确地告诉您在源代码中最后一次编译的位置的哪里可以找到问题。您通常不会将所有源代码部署到生产机器上。

回到开发机器并检查它指向的代码行,你应该能够确定它所抱怨的对象是空的。

【讨论】:

  • 我们尝试使用 VS2010 发布它 - 仍然是同样的问题。它出于某种原因在开发机器上查找源文件,而不是在当前机器上。
  • 正如我们所说,该路径仅供您参考以帮助调试。这不是实际的错误。实际错误是对象引用为空。该错误来自 Player.cs 第 123 行。
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多