C# 无法发布使用NLog进行NuGet的库

C# 无法发布使用NLog进行NuGet的库,c#,.net,nuget,nlog,C#,.net,Nuget,Nlog,我正在尝试使用NuGet Package Explorer将一个C#库发布到NuGet。该库使用NLog进行日志记录。我的本地版本按预期工作 我可以成功地上传并下载库,但是当我尝试使用从NuGet下载的版本时,我会得到一个NullReferenceException。进一步的实验表明,这是由LogManager.Configuration为null引起的 这里是我尝试使用LogManager的地方。配置 var logger = LogManager.GetLogger("MyLibraryNa

我正在尝试使用NuGet Package Explorer将一个C#库发布到NuGet。该库使用NLog进行日志记录。我的本地版本按预期工作

我可以成功地上传并下载库,但是当我尝试使用从NuGet下载的版本时,我会得到一个
NullReferenceException
。进一步的实验表明,这是由
LogManager.Configuration
null
引起的

这里是我尝试使用LogManager的地方。配置

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 Package Explorer中,我的“包内容”如下所示:

- lib
  - net45
    - NLog.config
    - MyLibrary.dll
我已尝试按照NLog wiki()上的建议,将NLog.config重命名为NLog.dll.NLog。这并没有解决问题


如何阻止LogManager.Configuration为空?

首先,NLog只查看app.config中的设置。它不会查找以DLL命名的.config文件。(编辑:这是.NET应用程序的默认行为,但您引用的wiki指定了其他行为——我将说明它们是否仍然支持该行为,但我会说我在下面提供的解决方案应该始终有效)

其次,当您应该向包中添加对NLog的依赖时,您正在向包中添加物理文件

要修复第一部分,您必须在包中指定一些配置文件转换。文件。只需创建一个裸app.config文件,将其重命名为app.config.transform,然后将所有NLog特定部分添加到此文件。将其包含在包的内容中

要修复第二部分,请从内容中删除NLog dll。在包的元数据中,添加NLog的依赖项。您可以通过编辑XML来手动添加它



或者使用NuGet软件包浏览器编辑软件包(更简单、更安全)。更多信息。

您是否将nlog.config文件包括在nuget清单中?