1

我有一个托管在某处(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 框架与我机器上的框架相同(至少在版本方面)。我想知道是否有一些我需要检查的标志,某事......

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

4

2 回答 2

0

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

此外,您可以尝试挂钩未处理的异常事件以记录错误。 有关桌面应用程序的信息,请参见此内容,有关 Web 应用程序的信息,请参见此内容。

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

于 2012-10-14T07:48:48.733 回答
0

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

于 2012-10-14T08:34:44.883 回答