无法将使用NLog的库发布到NuGet

4
我正在尝试使用NuGet Package Explorer将一个C#库发布到NuGet。该库使用NLog进行日志记录。我的本地版本按预期工作。
我可以成功上传并下载该库,但是当我尝试使用从NuGet下载的版本时,我会遇到一个NullReferenceException异常。进一步的实验表明,这是由于LogManager.Configuration为null所导致的。
下面是我尝试使用LogManager.Configuration的代码:
var logger = LogManager.GetLogger("MyLibraryName");
var logTarget = new ColoredConsoleTarget();
var loggingRule = new LoggingRule("*", LogLevel.Info, logTarget);
logTarget.Layout = "${longdate} ${level} ${logger}: ${message} ${exception:format=tostring}";
LogManager.Configuration.LoggingRules.Add(loggingRule); // exception thrown here

看起来我的NLog.config文件被本地版本库自动使用了,但是下载的版本没有使用。

在NuGet包浏览器中,“包内容”如下所示:

- lib
  - net45
    - NLog.config
    - MyLibrary.dll

我尝试将NLog.config重命名为nlog.dll.nlog,这是NLog维基页面推荐的方法(https://github.com/nlog/NLog/wiki/Configuration-file)。但这并没有解决问题。请问我该怎么做才能避免LogManager.Configuration为空?

你在 NuGet 清单中包含了 nlog.config 文件吗? - Peter Ritchie
1个回答

2
首先,NLog只会查看app.config中的设置。它不会查找以DLL命名的.config文件。(编辑:这是.NET应用程序的默认行为,但您引用的wiki指定了其他行为-我将放弃它们是否仍然支持,但我将说下面提供的解决方案应始终有效) 其次,您正在将物理文件添加到包中,而应该在包中添加对NLog的依赖项
要解决第一部分问题,您需要在包中指定一些配置文件转换。文档可以在此处找到。只需创建一个空白的app.config文件,将其重命名为app.config.transform,然后将所有NLog特定部分添加到此文件中即可。将其包含在包的内容中。
要解决第二个问题,请从内容中删除NLog dll。在包的元数据中添加对NLog的依赖项。您可以通过编辑XML手动添加它。
<dependencies>
    <group targetFramework=".NETFramework4.5">
        <dependency id="NLog" version="3.1.0.0" />
    </group>
</dependencies>

或通过使用NuGet包资源管理器编辑您的软件包(更简单,更安全)。 更多信息可在此处找到


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接