gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:57:47 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com