我是 Iron.io 的 IronWorker 的新手,我正在尝试通过 C#.NET 与之交互。我已经设法让站点上的示例正常工作,它利用了 System.Web.Script.Serialization 库。但是,我想使用 Newtonsoft.Json 库进行序列化/反序列化。我的.worker
文件(位于\bin
Visual Studio 项目的目录中)如下所示:
runtime 'mono'
exec 'Debug\hello.exe'
file 'Debug\Newtonsoft.Json.dll'
我相当肯定 Newtonsoft.Json 正在加载,因为添加第 3 行file: 'Debug\Netwonsoft.Json.dll'
修复了表示无法找到 Newtonsoft 的错误。
我在尝试运行任务时收到的错误如下(我删除了所有看似敏感的信息):
{"code_id":"[CODE_ID]","code_name":"hello","created_at":"2014-11-
16T13:48:01Z","duration":2452,"end_time":"2014-11-16T13:48:06Z","id":"[ID]","msg":"Unhandled
Exception: System.TypeLoadException: Could not load type
'System.Runtime.CompilerServices.ExtensionAttribute' from assembly
'Newtonsoft.Json'.\n at HelloWorld.Main (System.String[] args) [0x00000] in <filename
unknown>:0 \n[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could
not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly
'Newtonsoft.Json'.\n","project_id":"[PROJECTID]","start_time":
"2014-11-16T13:48:04Z","timeout":3600,"updated_at":"2014-11-16T13:48:07Z","status"
:"error"}
在跟踪错误的过程中:Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'Newtonsoft.Json'
我遇到了一个SO 线程,该线程表明 v4.0 和 v4.5 之间可能存在 .NET 框架不匹配。我正在使用 v4.5,我尝试将其更改为 v4.0,但没有成功(所以这可能不是问题)。
有人可以为我指出如何正确利用依赖项的正确方向,例如Newtonsoft.Json
(至少 Iron.io 上的示例可以工作)?
PS 我一直在玩弄 IronSharp作为 API 来协助与 Iron.io 产品的接口(一旦我解决了这个依赖问题)。但是,如果有更好的建议我应该检查一下,我愿意接受建议。
解决方案
@Fealion 在下面的回答确实很有帮助,因为他将我指向了stack
我这样放置的命令:
runtime 'mono'
stack 'mono-3.6'
exec 'Debug\hello.exe'
file 'Debug\Netwonsoft.Json.dll'
我相信它解决了手头的错误,因为更高版本的单声道框架似乎可以处理最新版本的 Newtwonsoft.Json.dll。如果我发现其他情况,我会在这里发布。
请注意,截至 2014 年 11 月 17 日,IronWorker 支持的最高堆栈版本似乎是 3.6(即使 3.10 可用,详情可在此处找到)。在此链接中查看 Iron.io 的最高稳定版本。