我有一个写入log4net日志的C#exe。如果我直接运行此exe,则日志记录正常。 但是,如果我从F#脚本调用exe(扩展名为fsx),则会出现错误
log4net:ERROR Failed to find configuration section 'log4net' in the application'
s .config file. Check your .config file for the <log4net> and <configSections> e
lements. The configuration section should look like: <section name="log4net" typ
e="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
任何人都可以帮忙吗?非常感谢
答案 0 :(得分:2)
您应该将此exe文件的配置插入到f#应用程序的配置文件中,或者在代码中初始化logger。我不确定当你运行f#脚本时有配置文件。
您可以尝试使用代码
将config设置为c#exe的configfileAppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", "c:/test.config);
答案 1 :(得分:1)
当您从F#Interactive调用C#.exe时,当前工作目录(.NET将尝试从中加载.config文件)是安装F#Interactive的目录。
在您的F#交互式脚本中,执行以下操作:
// Change the current directory to the directory where the
// C# assembly was loaded from.
System.Environment.CurrentDirectory <-
// TODO : Change 'MyType' to any public type from your C# assembly
typeof<FSharpx.Text.Lexing.Position>.Assembly.Location
编辑:第二个想法,我不知道上面的代码是否会起作用 - 它假定.config文件将被延迟加载(即按需)。如果CLR在加载.exe的同时加载.config文件,则需要执行以下操作:
// Change the current directory *before* referencing the C# assembly.
System.Environment.CurrentDirectory <- @"C:\blah";;
// Reference the C# assembly
#r @"C:\blah\foobar.exe";;