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

标签 c# .net nuget nlog

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

我该怎么做才能阻止 LogManager.Configuration 为空?

最佳答案

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

其次,当您应该将对 NLog 的依赖添加到包中时,您将物理文件添加到包中。

要修复第一部分,您必须在您的包中指定一些配置文件转换。文档 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 .

关于c# - 无法将使用 NLog 的库发布到 NuGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26101735/

相关文章:

c# - 发布 Nuget 包时有关 PackageReference 版本的最佳实践?

.net - 如何正确构建 netstandard1.0 NuGet 包的依赖关系?

c# - 将 iTextSharp 与 MVC 结合使用

c# - log4net 将在哪里创建这个日志文件?

c# - 将 Html 或 RTF 转换为 Markdown 或 Wiki 兼容语法?

c# - Pex(及其输出)是否适合企业环境?

visual-studio-2013 - 在 VS 2013 中启动 NuGet 包管理器控制台时出现 Set-DefaultScaffolder 错误

visual-studio-2012 - Visual Studio 2012 "Extensions and Updates" "Unable to connect to the remote server"

c# - 在不使用 lambda 表达式的情况下从该方法传递额外参数时在方法内部订阅事件

c# - 存储库模式 - 使其可测试、DI 和 IoC 友好且 IDisposable