为什么NLog.dll包含JetBrains.Annotations命名空间?

时间:2014-06-04 20:53:11

标签: c# .net resharper nlog

我已经移植了一些代码来使用NLog,到目前为止这很好。但是,我在以下代码中遇到了编译器错误:

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
private class SomeClass

错误是:

  

错误96类型'JetBrains.Annotations.UsedImplicitlyAttribute'   存在于两者中   'C:\代码\包\ Twia.ReSharper.1.1.0 \ LIB \ net40 \ JetBrains.Annotations.dll'   和'c:\ Code \ packages \ NLog.3.0.0.0 \ lib \ net45 \ NLog.dll'

果然,NLog.dll包含一个JetBrains.Annotations.UsedImplicitlyAttribute类:

enter image description here

当然,我无法控制其中任何一个的源代码。为什么NLog在这个世界中拥有自己的副本?他们是否将JetBrains代码ILMerge到程序集中?实施是否相同?我现在可以安全删除JetBrains.Annotations.dll的引用并让所有内容都一样吗?是否有工作来引用两个程序集而没有编译器错误?谢谢!

1 个答案:

答案 0 :(得分:2)

看起来这是/ known issue

8小时前的好消息fixed。坏消息是,现在我将不得不等待NLog的下一个版本,因为我不想从源代码构建。

<强>更新

我等到下一个版本时发现了一个临时修复程序。在Visual Studio中,找到项目中的 NLog 引用:

enter image description here

右键单击,选择属性。然后,将别名值从全局更改为其他内容,例如 NLog

enter image description here

这将使冲突消失。但是,当您想要从该程序集中引用任何时,您必须完全符合以下条件:

  1. extern alias NLog;添加到.cs文件的最顶层(在任何using个关键字之前)并且......
  2. 使用NLog::作为命名空间的前缀,例如:
  3. public class Logger : NLog::NLog.LogReceiverService.ILogReceiverServer

    仍然想知道NLog的人在考虑将第三方命名空间放入他们的程序集并将其公之于众。