【问题标题】:c# generic method crashc# 泛型方法崩溃
【发布时间】:2012-10-14 00:36:36
【问题描述】:

我有一个托管在某处 (webhostingworld.net) 的应用程序,但我遇到了难题。我有一个执行一些离线操作的工具(.net 4 anycpu 中的简单普通 exe),它由“Parallel Plesk Panel 11.0.9”作为“计划任务”启动。一切都很顺利,直到我添加了一个通用方法。

  • 基本上,它只是一个从数据库中读取 json 字符串并返回的虚拟方法;
  • 进程刚刚结束,没有抛出异常 - 我不得不将日志记录从一个地方转移到另一个地方,我做的最后一件事是在调用此方法和其中的第一件事之前放置日志记录。调用这个方法之前的日志是有的,方法里面的日志是没有的;
  • 方法声明如下所示:

public T Get<T>(string id);

  • 我联系他们寻求一些反馈 - 也许他们在系统日志中看到了一些东西,但我怀疑他们会带来一些启示;
  • 在我的电脑上工作正常(不总是这样吗?);
  • 尝试编译所有 cpu 风格:x86、x64、anyCPU 并具有相同的行为...

我没有主意了。我总是可以尝试使用通用对象(从代码大小 pov 来看,这可能是一个更好的想法 - 但这是另一个主题)......但这非常令人沮丧,因为我无法找到发生这种情况的充分理由... 那么,对发生了什么有任何想法吗?

谢谢!

更新:代码如下:

public T Get<T>(string id)
{
   Log.Debug("mary still has that little lamb");

   string jsonString = GetASimpleStringFromDatabase(id);  // id has values like "ID", "TEMPPATH", "MAIL", etc;

   DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));

   using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
   {
      return ser.ReadObject(ms);
   }
}

调用看起来像这样:

Log.Debug("Let's check if Mary has that little lamb");
MyClass c = deserializer.Get<MyClass>(stuff);

第一个记录语句出现(“让我们检查一下”),第二个(“仍然有”)没有。 .net 框架与我机器上的框架相同(至少在版本方面)。我想知道是否有一些我需要检查的标志,什么...

更新:很抱歉,支持人员的反应很慢。我对此没有答案。我将不使用“模板”。 :-(

【问题讨论】:

  • 你能贴出public T Get&lt;T&gt;(string id) 的代码和调用它的代码行吗?
  • 安装在应用程序运行的机器上的.Net框架是什么? Framework 1.0/1.1 不支持泛型
  • 这是.NET 4 - simple plain exe in .net 4 anycpu
  • 您可能正在谈论您的机器配置。我在询问机器应用程序上的 .net 环境配置正在运行和失败。
  • 在您发布的 Get 方法中,您的代码不止一处有问题。请修复,如果i 是一个错字并且在返回反序列化值时缺少演员表。还有,id 有什么用?而jsonString 是从哪里来的?

标签: c# generics methods crash


【解决方案1】:

用户可能只安装了“客户端”.Net 4.0 运行时,而您可能正在使用需要“完整”.Net 4.0 运行时的功能。 See this 了解有关差异的更多信息。

此外,您可以尝试挂钩未处理的异常事件以记录错误。 See this 用于桌面应用,this 用于网络应用。

如果所有其他方法都失败了,您可以开始排除应用程序的较低层以排除通信或其他原因。 (即,将数据库调用替换为对返回硬编码 JSON 字符串等的模拟数据库的调用)

【讨论】:

  • 并非如此。我通过删除模板的东西解决了这个问题,它工作正常。我正在使用完整的 .net 版本。
【解决方案2】:

有时编译器会生成未通过验证的代码。如果发生这种情况,如果您的代码没有完全信任(可能在这种情况下),您可能会遇到类似的问题。通过运行 PEVerify 验证您的代码是否可验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多