特定于机器的(??)行为,将JSON字符串解析为DynamicJsonObject - c#

我有一部分代码可以在没有调试器的情况下按预期运行,但是当我在调试器下运行该代码时,它可以在一台计算机上运行而在另一台计算机上失败。两台计算机的设置几乎相同:Windows 8,.NET Framework 4.5,Visual Studio 2013 Ultimate Update 4,我在两台计算机上运行相同的控制台应用程序。

代码解析包含JSON的此字符串:

{"success":true,"doAlternative":false,"errors":null,"content":null}

使用System.Web.Helpers转换为动态对象:

dynamic result = Json.Decode(jsonString);

然后,我访问结果对象的success字段:

if ( result.success != true )

在一台机器上(我提醒:问题是在调试器下运行),这只是工作。另一方面,我得到RuntimeBinderException:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException occurred
  _HResult=-2146233088
  _message='System.Web.Helpers.DynamicJsonObject' does not contain a definition for 'success'
  HResult=-2146233088
  IsTransient=false
  Message='System.Web.Helpers.DynamicJsonObject' does not contain a definition for 'success'
  Source=Microsoft.CSharp
  StackTrace:
       at Microsoft.CSharp.RuntimeBinder.RuntimeBinderController.SubmitError(CError pError)
  InnerException: 

在“工作”计算机上,当我在“即时”窗口中键入result时,我得到:

{System.Web.Helpers.DynamicJsonObject}
    base: {System.Web.Helpers.DynamicJsonObject}

在“失败”的计算机上,我得到以下信息:

{System.Web.Helpers.DynamicJsonObject}
    base: {System.Web.Helpers.DynamicJsonObject}
    _values: Count = 4

这是最奇怪的一点:在故障机器的即时窗口中播放,第一次键入result["success"]会给出以下信息:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException occurred
  _HResult=-2146233088
  _message=Cannot apply indexing with [] to an expression of type 'System.Web.Helpers.DynamicJsonObject'
  HResult=-2146233088
  IsTransient=false
  Message=Cannot apply indexing with [] to an expression of type 'System.Web.Helpers.DynamicJsonObject'
  Source=Microsoft.CSharp
  StackTrace:
       at Microsoft.CSharp.RuntimeBinder.RuntimeBinderController.SubmitError(CError pError)
  InnerException: 

然后,再次键入result["success"]使其生效!然后result.success也可以。它不会打扰我,但是如果我不放置断点并仅使用F5运行应用程序,它将失败。

这种特定于机器调试器的行为令人恐惧-我担心将具有此类问题的代码投入生产((目前仅在调试器中可以观察到,但是谁知道..?)有人可以向您说明一下这个?

参考方案

好的,我找到了原因-here。

转到“工具”>“选项”>“调试”并选中“仅启用我的代码”可以有效解决此问题。

该复选框正是两种环境之间的区别。尝试在“运行中”的计算机上取消选中它,并在那里获得相同的异常,因此我可以确认此行为是稳定且一致的(现在我很高兴)。

因此,问题出在的只是调试器,它试图遵循被调试的代码并读取动态对象的成员,而这些成员在创建动态对象的程序集内部。这就是为什么它在调试器下失败的原因,这就是为什么在没有调试器的情况下运行的原因。

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

将字符串分配给numpy.zeros数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

T-SQL等价的正则表达式'\ b' - c#

我正在将利用regex的CLR函数转换为SQL函数。我知道SQL Server并不完全支持正则表达式,但是我只需要一种情况就可以搜索单词。搜索字段值:{"Id":1234, "Title": "The quick brown"}.NET中的正则表达式模式:'\b' + '…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…