无法发布使用NLog到NuGet的库

时间:2014-09-29 14:01:28

标签: c# .net nuget nlog

我正在尝试使用NuGet Package Explorer向NuGet发布C#库。该库使用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 Package Explorer中,我的"包内容"看起来像这样:

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

我已尝试将NLog.config重命名为nlog.dll.nlog,如NLog wiki(https://github.com/nlog/NLog/wiki/Configuration-file)所建议的那样。这还没有解决问题。

如何阻止LogManager.Configuration为空?

1 个答案:

答案 0 :(得分:2)

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

其次,当您在NLog上添加依赖到包时,您需要将物理文件添加到包中。

要修复第一部分,您必须在pacakge中指定一些配置文件转换。文档can be found here。只需创建一个裸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 Package Explorer编辑包(更简单,更安全)。更多信息can be found here