我有一个在FSI/FSX中使用的c# .net库。作为.net库初始化的一部分,默认情况下,它期望并引用一个自定义配置文件(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#库,并查看它在哪里查找配置文件--结果是"c:\Program \Microsoft F#\v4.0\“( System.AppDomain.CurrentDomain.BaseDirectory),这再次表明我不太了解如何告诉FSI/FSX使用特定路径。如果我将配置文件(MyAppConfig.xml)复制到该位置,它就能正常工作。
许多thx
S
发布于 2014-07-21 17:12:05
我不确定这意味着什么,但有一种可能性可能会暂时改变应用程序的基础:
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 basehttps://stackoverflow.com/questions/24867164
复制相似问题