我正在尝试使用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为空?
答案 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。