在F#中给出项目的相对路径

时间:2014-11-22 14:55:28

标签: f# f#-3.0 f#-data

我正在尝试将F#SQLProvider合并到我的项目中。现在我可以成功访问Postgresql数据库。但有一种称为解决路径的东西。我需要给予。现在,问题是我在本地计算机上开发的已部署应用程序和应用程序的路径将有所不同。那么,我怎样才能给出我的dll的相对路径。

现在我正在使用以下路径

[<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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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中需要指向哪里,但是通过使用像环境变量这样的东西,它应该很容易根据需要进行更新。