Рослин анализатор отсутствует предупреждение сборки - PullRequest
0 голосов
/ 26 апреля 2018

После создания пакета анализатора Roslyn для .Net Standard 2.0, когда я ссылаюсь на пакет в другом проекте, я получаю следующую ошибку:

'C: \ Users \ username.nuget \ packages \ analyzer4 \ 1.0.0.1 \ analyzers \ dotnet \ cs \ Analyzer4.dll' зависит от 'netstandard, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = cc7b13ffcd2ddd51 'но он не был найден. Анализаторы могут работать некорректно, если отсутствующая сборка не добавлена ​​в качестве ссылки на анализатор.

Воспроизведение проекта с использованием анализатора: здесь . Это репродукция представляет собой ванильное консольное приложение .Net Core 2.0 со ссылкой на анализатор и никаким другим кодом. Сам анализатор был построен просто путем создания проекта Analyzer по умолчанию в Visual Studio, изменения его таким образом, чтобы он предназначался для netstandard2.0 вместо netstandard1.3, а затем построения в режиме выпуска для создания файла .nupkg. Анализатор работает правильно, как показано на рисунке, но генерируется предупреждение.

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

Мне не ясно, что именно означает добавить анализатор в качестве «ссылки на анализатор», а не просто в качестве обычной ссылки на проект. Я попытался изменить

<PackageReference Include="Analyzer4" Version="1.0.0.1" />

до

<Analyzer Include="..\LocalPackages\Analyzer4.1.0.0.1.nupkg" />

, но это привело к другому сообщению об ошибке (" PE-образ не содержит управляемых метаданных ").

Может кто-нибудь объяснить, что означает эта ошибка и в идеале, как ее исправить?

1 Ответ

0 голосов
/ 30 апреля 2018

Некоторые сведения по этому вопросу здесь . Если анализатор зависит от другой сборки, то оба должны быть указаны в качестве анализаторов, но, как правило, существует исключение для сборок базовой системы. К сожалению, похоже, что .Net стандарт 2.0 еще не добавлен в список исключений; по-видимому, это произойдет в какой-то момент в будущем. Вместо этого я смог внести изменения в код, чтобы настроить анализатор на .Net Standard 1.3, что позволило избежать предупреждения.

Эта проблема также возникает при добавлении других сборок (например, Newtonsoft.Json) в ваш анализатор. Одним из решений этого является просто не делать этого; Например, StyleCop устраняет свою зависимость от Newtonsoft.Json и просто включает код для LightJson непосредственно в свою сборку. Другими решениями могут быть (1) ручное копирование dll, от которого вы зависите (при необходимости извлекая его из папки с вашими пакетами) в файл .nupkg, признавая, что .nupkg на самом деле является просто файлом .zip; или (2) использовать инструмент, подобный ILMerge, для объединения зависимости в вашу DLL. Я еще не экспериментировал с этими подходами, поэтому, если кто-то еще сможет дать пошаговое объяснение того, как интегрировать это в сборку для анализатора, я отмечу это как правильный ответ.

...