2

我有一个 DLL 加载指令列表,如下所示:

#I __SOURCE_DIRECTORY__
#r @"packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll"
#r @"packages\Akka\lib\net45\Akka.dll" ...

请注意,该列表引用了 Newtonsoft.Json.dll(版本 7.0.1)。但是,当我在 FSI 中执行使用引用 DLL 的代码时,Visual Studio 会从不同的位置加载 Newtonsoft.Json,如其日志所示:

绑定会话到 'C:\Projects\Samples\fsharpreactivepatterns\packages\Akka\lib\net45\Akka.dll'... 绑定会话到 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft. Json.dll'...

Newtonsoft.Json.dll 甚至不指向 Visual Studio 2015 文件夹之一,它引用了也安装在我的机器上的 Visual Studio 2013 中的 DLL。

这是我到目前为止找到的解决方法:

#I __SOURCE_DIRECTORY__
#r @"packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll"
let c = Newtonsoft.Json.Converters.DiscriminatedUnionConverter
#r @"packages\Akka\lib\net45\Akka.dll"

现在 FSI 加载并使用正确的 Newtonsoft.Json 版本。

有没有更好的方法来确保 FSI 使用 #r 指令中指定的 DLL 路径?

4

1 回答 1

3

我认为如果你#I 到 JSON.Net 所在的文件夹,它可能会从那里找到它。但我同意,我也时常看到这种行为,它不直观。

于 2016-01-04T11:35:57.697 回答