Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 从TypeProvider引用Newtonsoft.Json_F#_Json.net_Type Providers - Fatal编程技术网

F# 从TypeProvider引用Newtonsoft.Json

F# 从TypeProvider引用Newtonsoft.Json,f#,json.net,type-providers,F#,Json.net,Type Providers,我正在尝试创建使用Newtonsoft.Json的类型提供程序。提供的构造函数接受JObject: let constr = ProvidedConstructor([ProvidedParameter("json",typeof<JObject>)]) constr.InvokeCode <- fun args -> <@@ let jObject = %%args.[0]:JObject jObject @@

我正在尝试创建使用Newtonsoft.Json的类型提供程序。提供的构造函数接受
JObject

let constr = ProvidedConstructor([ProvidedParameter("json",typeof<JObject>)])  
constr.InvokeCode <- fun args -> 
    <@@
        let jObject = %%args.[0]:JObject
        jObject
    @@>
调试类型提供程序时,我可以看到Newtonsoft.Json.dll有两个版本:我的项目中nuget下载位置的版本6.0.3.17227和C:\Program Files\Common Files\Microsoft Shared\Visual Studio\12.0\Newtonsoft.Json.dll的版本4.5.11.15520

后者显然是由VisualStudio2013更新2 for Json编辑器加载的

客户端和类型提供程序程序集都指定版本重定向:


我如何解决这个问题

编辑:

事实证明,仅仅摆脱Json.NET的VS版本并不是一个好的解决方案。VS在开始时抛出异常,它会隐藏该异常,直到您尝试使用其他帐户登录。我甚至不想去猜测它背后的逻辑,简单的回答是——不要把VS搞得一团糟

对于类型提供程序,解决方法是在所有TP提供的方法中用字符串替换JObject,并在实现中将其解析为JObject


让我们希望VS团队能对此做些什么。

检查VisualStudio目录中的NewtonSoft.Json是否确实存在。我曾一度在尝试开发类型提供程序时经历了惊人的痛苦,直到我意识到,在3个月前的几天里,NuGet一直在解包我安装到C:\Program Files\Common Files\Microsoft Shared\Visual Studio\12.0 \-的所有依赖项,而这些依赖项是在类型提供程序能够加载任何内容之前加载的。作为一个(非常小的)安慰奖,如果您与我有相同的问题,TP将在FSI/编译代码中运行-只是不在Visual Studio中。

如果您幸运,它可能会在返回到错误版本之前触发System.AppDomain.CurrentDomain.AssemblyResolve事件。如果是这样的话,您可以在事件处理程序中重定向它,我已经修复了类似的问题。谢谢你的提示,没有帮助:(.我甚至没有在这个事件处理程序中遇到断点。我怀疑这是Visual Studio错误。如果我只是从普通代码中引用不兼容的Json.Net版本,我不知道它如何工作。我希望在设计时看到错误的错误通知。现在,加上@RossMcKinlay提供的
AssemblyResolve
提示,成功了!没有
AssemblyResolve
Studio抱怨它找不到版本6.0.0事件,尽管我可以看到版本6.0.3已加载。非常感谢,伙计们!这也解决了我遇到的一个问题,即F#interactive恢复到旧版本的NewtonSoft.json,非常感谢。
type ProvidedType = MyProvider<"source.file">
let json = JObject.Parse(str)
let objct = ProvidedType("""{ "name" = "foo bar" }""")