解析F#程序集引用

时间:2018-04-20 11:29:38

标签: visual-studio f# nuget azure-functions rider

在Rider和Visual Studio中,我都遇到了让F#识别Newtonsoft.Json依赖关系的问题。

我导入#r "Newtonsoft.Json",并使用NuGet将其添加到我的项目中,但它不会影响突出显示的错误:

汇编参考" Newtonsoft.Json"未被发现或无效。

我第一次尝试F#,所以这可能是一个非常简单的问题,但我无法在网上找到它的引用。

2 个答案:

答案 0 :(得分:1)

#r正用于F#脚本文件.fsx

为了使它工作,你应该将相对或绝对路径传递给dll,如下所示:

#r @"C:\Users\USER_NAME\.nuget\packages\newtonsoft.json\11.0.2\lib\net45\Newtonsoft.Json.dll"
//or
#r @"..\packages\Newtonsoft\Newtonsoft.Json.dll"
//or
#r "Newtonsoft.Json.dll" //assumes that dll and .fsx file are in the same folder

您还可以创建通常的F#项目文件.fsproj(Rider和VisualStudio可以提供帮助),它使用通常的.fs文件。

如果这些.fs文件属于.fsprojCompile部分),您可以像往常一样使用nuget中的命名空间(open指令)而不使用#r dll链接。

检查this教程以在VS

中创建项目

答案 1 :(得分:1)

所以,最终我找到了一个答案,由Microsoft发布。

  

支持F#编译器服务的编辑器不会知道Azure Functions自动包含的命名空间和程序集。因此,包含一个帮助编辑器查找您正在使用的程序集的序言以及显式打开名称空间可能很有用。

例如:

#if !COMPILED
#I "../../bin/Binaries/WebJobs.Script.Host"
#r "Microsoft.Azure.WebJobs.Host.dll"
#endif

open System
open Microsoft.Azure.WebJobs.Host

let Run(blob: string, output: byref<string>, log: TraceWriter) =
...

所以在我的情况下:

#if !COMPILED
#I "../bin"
#r "Newtonsoft.Json.dll"
#endif