Когда вы создаете свой код, информация о связанных DLL-файлах содержится не в самом коде, а в другом месте (файл проекта). Но когда вы выполняете код в FSI, все FSI видит код. У него нет файла проекта, из которого можно получить ссылки.
Но так как FSI по-прежнему нужно загружать связанные DLL-файлы изредка (в противном случае это было бы не очень полезно), он предлагает способ их кодирования в коде. Этот способ описан in the page you linked - в частности, #r
.
К сожалению, эти директивы не поддерживаются при создании кода с помощью компилятора. Компилятор будет генерировать ошибку, когда увидит их.
Итак, у вас есть выбор: либо выполнить код с помощью FSI, либо построить его с помощью компилятора. Нельзя использовать тот же код для обоих.
К счастью, есть несколько уловок, чтобы обойти это.
Первый, вы могли бы использовать специальную переменную условной компиляции под названием INTERACTIVE
и поставить #r
директиву внутри #if
, так что только FSI будет видеть его, но компилятор не будет:
#if INTERACTIVE
#r "./path/to/my.dll"
#endif
Второй , вы можете создать отдельный файл сценария, который будет загружать ссылки, а затем загружать фактический файл кода:
#r "./path/to/my.dll"
#load "./my_code.fs"
Затем выполните этот файл сценария с помощью FSI.
В обоих случаях пути относятся к файлу сценария.
Это означает, что ошибка «не найден», которую вы получаете, вероятно, связана с неправильным путём к Suave DLL. Я серьезно сомневаюсь, что DLL находится в том же каталоге с файлом кода. А также, что он не имеет расширения.
Вы пытались использовать ту же директиву '# r'? –
У меня нет. Имеют ли директивы только файлы * .fsx? Xamarin даже не позволяет мне вводить '# r' внутри модуля. – wegry
Эти директивы работают либо в файлах * .fsx, либо в FSI (независимо от того, как вы с ним взаимодействуете), это то, что выполняет * .fsx-файлы, поэтому это должно иметь смысл. Страница, к которой вы привязаны, относится к * .fsx и FSI, а не к Visual Studio. Просто случается использовать VS в качестве демонстрационного автомобиля. –