c#泛型方法崩溃

时间:2012-10-14 00:36:37

标签: c# generics methods crash

我有一个托管在某处的应用程序(webhostingworld.net),我有一个两难的境地。我有一个工具(简单的普通exe在.net 4 anycpu中)执行一些离线的东西,它由'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框架与我的机器上的框架相同(至少与版本有关)。我想知道是否有一些我需要检查的旗帜,某事......

更新:很抱歉,但支持人员对他们的回复非常缓慢。我对此没有答案。我会在没有“模板”的情况下离开它。 : - (

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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