【问题标题】:F# interactive in Visual Studio 2015 may ignore DLL include pathVisual Studio 2015 中的 F# 交互可能会忽略 DLL 包含路径
【发布时间】:2016-01-04 11:21:14
【问题描述】:

我有一个 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 路径?

【问题讨论】:

  • 对我来说看起来像一个错误。我想 DLL 路径不应该受到环境中存在的对象的影响。
  • 我也怀疑这是一个错误。

标签: dll f# visual-studio-2015 fsi


【解决方案1】:

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

【讨论】:

  • 是的,使用带有正确 JSON 文件夹的 #I 解决了问题,因此显然 #r 中的路径可能会被忽略(但并不总是像我们在解决方法中看到的那样被忽略)。
  • 是的,因为一旦您执行一些使用该程序集中的类型的代码,它就会强制 FSI 急切地引用该程序集。在那一点上,已执行的代码将解析为 #r 引用的代码。我同意这是不一致的,可能应该在 Visual F# 存储库中作为一个问题提出。
  • 尽量不要在#r中使用相对路径,将其与'#I'结合起来-sergeytihon.wordpress.com/2014/07/23/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2016-11-02
  • 1970-01-01
相关资源
最近更新 更多