Fsx执行路径

时间:2014-07-21 14:07:22

标签: f# f#-interactive

我有一个c#.net库我希望在FSI / FSX中使用。作为.net lib初始化的一部分,默认情况下它需要并引用一个自定义配置文件(MyAppConfig.xml),它可以在使用之前加载各种内容。在c#中使用它时,它会被复制到bin文件夹,默认情况下应用程序会在那里引用它并在那里引用它,除非app.config中有特定的条目告诉它。 (我应该补充一点,它是按惯例完成的,而不是按照NLog注入路径+文件名,比如说)

我在控制台应用程序中有一个f#源文件,它将执行此初始化查找,但我无法解决如何使用FSI / FSX实现此目的。

所以我的program.fs看起来就像

open System
open myApp

module Program =   

    [<EntryPoint>]
    let Main(args) =            
        myApp.Initialization.Load()  // references MyAppConfig.xml

        Console.WriteLine("do my stuff!")
        Console.ReadLine() |> ignore
        0

如果我尝试在FSI或使用FSX中做同样的事情,我有

#r @"E:\...path to MyApp...\MyApp.dll" 
#I @"E:\...path to MyAppConfig.xml ..."

Environment.CurrentDirectory <- @"E:\...path to MyAppConfig.xml ..."

myApp.Initialization.Load() |> ignore  // fails ... can't find MyAppConfig.xml

//do my stuff

我怀疑我没有完全正确的路径。

我很感激驾驶

编辑:

所以我设法将调试器附加到c#lib并查看它在哪里查找配置文件 - 结果是&#34; c:\ Program Files \ Microsoft F#\ v4.0 \ &#34; (System.AppDomain.CurrentDomain.BaseDirectory)再次表明我还不太了解如何告诉FSI / FSX使用特定路径。如果我将配置文件(MyAppConfig.xml)复制到该位置,它可以正常工作。

很多thx

取值

1 个答案:

答案 0 :(得分:1)

“我不确定其含义,但有一种可能性暂时改变应用程序基础:

let origAppBase = AppDomain.CurrentDomain.BaseDirectory
AppDomain.CurrentDomain.SetData("APPBASE", "path_to_MyAppConfig.xml")
myApp.Initialization.Load() |> ignore
AppDomain.CurrentDomain.SetData("APPBASE", origAppBase) //restore original app base