【问题标题】:Unable to publish a library which uses NLog to NuGet无法将使用 NLog 的库发布到 NuGet
【发布时间】:2014-10-02 02:00:38
【问题描述】:

我正在尝试使用 NuGet 包资源管理器将 C# 库发布到 NuGet。该库使用 NLog 进行日志记录。我的本地版本按预期工作。

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

这是我尝试使用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 wiki (https://github.com/nlog/NLog/wiki/Configuration-file) 的建议将 NLog.config 重命名为 nlog.dll.nlog。这并没有解决问题。

如何阻止 LogManager.Configuration 为空?

【问题讨论】:

  • 您是否在 nuget 清单中包含 nlog.config 文件?

标签: c# .net nuget nlog


【解决方案1】:

首先,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 包资源管理器编辑您的包(更简单、更安全)。更多信息can be found here

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2022-09-30
    • 2020-07-18
    • 2017-08-19
    • 2021-02-18
    • 2021-04-08
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多