F# Interactive в Visual Studio 2015 может игнорировать путь включения DLL

У меня есть список инструкций загрузки 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 код, который использует библиотеки ссылок, 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, он ссылается на библиотеку DLL из Visual Studio 2013, которая также установлена ​​на моем компьютере.

Вот обходной путь, который я нашел до сих пор:

#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 использует пути DLL, указанные в директиве #r?

1 ответ

Решение

Я думаю, что если вы #I в папку, где живет JSON.Net, он может найти его оттуда. Но я согласен, я видел такое поведение время от времени, оно не интуитивно понятно.

Другие вопросы по тегам