Visual Studio 2015中的F#interactive可能会忽略DLL包含路径
我有一个DLL加载指令列表,如下所示:Visual Studio 2015中的F#interactive可能会忽略DLL包含路径,dll,f#,visual-studio-2015,fsi,Dll,F#,Visual Studio 2015,Fsi,我有一个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,如其
#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路径?我认为,如果您访问JSON.Net所在的文件夹,它可能会在那里找到它。但我同意,我也经常看到这种行为,这是不直观的。在我看来像一个bug。我认为DLL路径不应该受到环境中存在的对象的影响。我还怀疑这是一个bug。是的,使用#I和正确的JSON文件夹解决了这个问题,因此#r中的路径显然可能会被忽略(但并非像我们在解决方法中看到的那样总是被忽略)。是的,因为一旦您执行一些使用该程序集类型的代码,它就会迫使FSI急切地引用该程序集。此时,执行的代码将解析为#r引用的代码。我同意这是不一致的,可能应该在可视F#repo中作为一个问题提出。只是尽量不要在
#r
中使用相对路径,将其与“#I”结合起来-