我有一个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
取值
答案 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