2014-06-04 1 views
1

Я портировал часть своего кода, чтобы использовать NLog, который до сих пор велик. Тем не менее, я столкнулся с ошибкой компилятора на следующий код:Почему NLog.dll содержит пространство имен JetBrains.Annotations?

[UsedImplicitly(ImplicitUseTargetFlags.Members)] 
private class SomeClass 

Ошибка является:

Ошибка 96 Тип 'JetBrains.Annotations.UsedImplicitlyAttribute' существует в обоих «C: \ Код \ пакеты \ Twia.ReSharper.1.1.0 \ Lib \ net40 \ JetBrains.Annotations.dll» и 'C: \ Code \ пакеты \ NLog.3.0.0.0 \ Lib \ net45 \ NLog.dll'

Конечно, NLog.dll содержит JetBrains .Annotations.UsedImplicitlyAttribute класс:

enter image description here

Я, конечно, не имеют контроля над исходным кодом для любой из них. Почему в мире NLog имеет свою собственную копию этого класса? Они ILMerge JetBrains код в сборку или что-то еще? Является ли реализация такой же? Я в безопасности сейчас удалить ссылку на JetBrains.Annotations.dll и все ли работает одинаково? Есть ли работа для ссылок на обе сборки без ошибок компилятора? Благодаря!

ответ

2

Похоже, что это/было known issue.

Хорошая новость: fixed, всего восемь часов назад. Плохая новость заключается в том, что теперь мне придется ждать следующей версии NLog, так как я не хочу строить из источника.

Update:

я нашел временное решение, пока я не ждать до следующего выпуска. В Visual Studio, найти NLog ссылки в проекте:

enter image description here

правой кнопкой мыши, выберите Свойства . Затем измените значение в псевдонимами от Global к чему-то еще, например, NLog:

enter image description here

Это сделает конфликт уйти. Однако тогда, когда вы хотите сослаться на ничего из этой сборки, вы должны полностью квалифицировать его:

  1. Добавление extern alias NLog; к самого верхнего вашего файла .cs (перед любым using ключевых слов) и. ..
  2. Префикс пространства имен с NLog::, например:

public class Logger : NLog::NLog.LogReceiverService.ILogReceiverServer

Тем не менее интересно, что ребята NLog думали положить пространство имен третьей стороны в их сборке и сделать его достоянием общественности.