【问题标题】:C# Hashtable "object reference not set"C# Hashtable“未设置对象引用”
【发布时间】:2011-06-24 03:55:53
【问题描述】:

我有一个有趣的问题要解决。我在下面有以下代码,它基本上是一个用于将值与 html 文件合并并给我结果集的函数。我为此目的使用哈希表。

功能如下(请记住我继承了这个功能,目前无法更改)

public static string ParseTemplate(string _FileName, int _NumberofSomething)
{
  Hashtable templateVars = new Hashtable();
  templateVars.Add("NameOfFile", _FileName);
  templateVars.Add("NumberOfSomething", _NumberofSomething);
  TemplateParser.Parser parser = 
      new TemplateParser.Parser(
          System.Web.HttpContext
            .Current.Server.MapPath("~/docs/Templatenr.htm"), templateVars);
  return parser.Parse();
}

在我们的开发服务器和实时服务器上,它运行良好。但是,我正在尝试将应用程序部署到另一台生产服务器并获取“对象引用未设置为对象实例”。它完全打破了“Hashtable templateVars = new Hashtable();”线。所以我有点疑惑。如果这是一个编码问题,它肯定不会在任何地方都有效吗?

不同生产服务器之间的唯一区别是正在运行的操作系统和 IIS。 IE。 Server 2005 和 IIS7 与 Server2003 和 IIS6(这是它中断的环境)。两者都安装了最高 3.5 的 .net 框架。旧的操作系统和 ISS 会不会是问题所在?这可能是许可/记忆的事情吗?虽然这听起来有点难以置信,因为我在新生产服务器上使用的所有其他 .net 功能都运行良好。

我发现的关于哈希表的所有问题都与它没有被实例化有关。但是,我的错误发生在尝试实例化 Hashtable 的行上。

以前有没有人遇到过这样的错误,如果有,您是如何解决的?我什至会很感激关于寻找什么的建议,我会试一试。如果其他人将来遇到此错误,我也会发回结果。

【问题讨论】:

  • System.Web.HttpContext.Current.Server.MapPath("~/docs/Templatenr.htm") 这个文件是否存在于新服务器上?运行应用程序的用户帐户是否也有权访问此文件?
  • 我个人建议使用 Reflector Pro 之类的工具来调试 HashTable 构造函数的框架代码,以便查看异常实际上是从哪里抛出的。
  • @Jimmy,是的,是的。然而,这个函数甚至没有走那么远,它停在第一行。
  • @Mel Harbor 我快速浏览了 Reflector Pro。它可以以独立的方式运行吗?看来我只能通过 Visual Studio 运行它。由于此错误仅在生产服务器上,因此我无法从本地计算机上对其进行测试。但我今晚会玩,看看我能不能用它。
  • 您确定没有任何旧版本的项目程序集被缓存在某处吗?您是否检查并清除了 prod 机器上的本地程序集缓存?

标签: c# hashtable


【解决方案1】:

我从来没有真正了解过这个错误。使用 Reflector Pro 进行远程调试的建议也不起作用,这表明网站运行的虚拟服务器存在一些问题。检查日志文件显示 .net 框架抛出的其他错误。

网站已移至使用 IIS7 和 windows server 2008 的新虚拟服务器。它在新环境中按原样运行。

这可能不是每个人的理想解决方案,也许重新安装框架可以解决我们的问题,但由于我们正处于转换到新环境的过程中(出于其他原因),这个解决方案适合我们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多