3

我有一个写 log4net 日志的 C# exe。如果我直接运行此 exe,则日志记录工作正常。但是,如果我从 F# 脚本(扩展名为 fsx)调用 exe,则会出现错误

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" />

有人可以帮忙吗?多谢

4

2 回答 2

2

您应该将此 exe 文件的配置插入 f# 应用程序的配置文件或在代码中初始化记录器。我不确定当您运行 f# 脚本时是否有配置文件。

您可以尝试使用代码将配置设置为您的 c# exe 的配置文件:

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", "c:/test.config);
于 2012-12-06T18:27:35.843 回答
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";;
于 2012-12-06T18:34:04.090 回答