2014-11-22 4 views
1

Я пытаюсь включить F # SQLProvider в свой проект. И на данный момент я могу успешно получить доступ к базе данных Postgresql. Но есть что-то вроде пути разрешения. Это мне нужно дать. Теперь вопрос в том, что путь будет другим для развернутого приложения и приложения, которое я разрабатываю на своей локальной машине. Итак, как я могу дать относительный путь к моей dll.Предоставление относительного пути проекта в F #

Прямо сейчас я использую ниже пути

[<LiteralAttribute>] 
let resolutionFolder = @"D:\<myprojectdirectory>\<projectname>\packages\Npgsql.2.2.2\lib\net45" 

Итак, можно преобразовать в нечто вроде

[<LiteralAttribute>] 
let resolutionFolder = @"..\sqlprovider\packages\Npgsql.2.2.2\lib\net45" 

Теперь в Azure сайте я не какой путь он будет. Таким образом, выше путь не исправляет. Но если я могу дать относительный путь, который будет лучшим решением, я думаю.

Дайте мне знать, если требуются какие-либо дополнительные данные.

ответ

2

Казалось бы, вы могли бы использовать условные препроцессорные директивы, чтобы помочь вам здесь.

[<Literal>] 
let resolutionFolder = 
#if DEBUG 
    @"D:\<myprojectdirectory>\<projectname>\packages\Npgsql.2.2.2\lib\net45" 
#else 
    @"..\sqlprovider\packages\Npgsql.2.2.2\lib\net45" 
#endif 
+0

благодарит за ответ. Я думаю, что я не дал идеального вопроса. Я изменил вопрос. В развернутом веб-приложении я не буду знать только путь. Это проблема. Если я могу дать относительный путь, то проблема будет решена, но я не знаю, могу ли я иметь абсолютный путь на лазурных веб-сайтах также каждый раз. :( – kunjee

+0

Хм, хорошо. Позвольте мне подумать об этом. –

2

Когда вы определяете свой тип SqlDataProvider, вы указываете строку подключения и путь разрешения. Это требуется во время разработки, чтобы он мог генерировать нужные вам типы. Например:

type sql = SqlDataProvider< 
       "<design-time connection string>", 
       DatabaseVendor = Common.DatabaseProviderTypes.SQLITE, 
       ResolutionPath = "<design-time path>"> 

При использовании sql типа, вы вызовите функцию sql.GetDataContext. Эта функция имеет перегрузки, одна из которых позволяет вам указать строку подключения и путь разрешения в виде строк. Эти значения будут переопределять то, что было предусмотрено при определении типа.

let ctx = sql.GetDataContext("<RealConnectionString>", "<RealResolutionPath>") 

Поскольку эти строки в GetDataContext не нужны во время разработки, вы можете источник их из конфигурационного файла, или переменного окружение, и т.д. Вы можете иметь настройки для разработки против установок для производства.

Я не уверен, где ваш путь разрешения должен указывать на Azure, но, используя что-то вроде переменной окружения, оно должно быть простым для обновления по мере необходимости.

Смежные вопросы