Как исправить код ошибки FxCop 512?
Во время рефакторинга, перемещения вокруг некоторых сборок и т.д. Я собрал решение в Visual Studio и получил одно сообщение об ошибке: "FxCop завершен с кодом ошибки 512". Конструкция кажется отличной, кроме этой ошибки.
Кто-нибудь знает, что это на самом деле означает в деталях? Где я могу начать искать, как это исправить? Установка FailOnError в false - это не путь, по которому я хочу спуститься.
Ответы
Ответ 1
Другие ответы на правильном пути, но пропустите одну небольшую часть.
- Подавление - это вариант, но вы можете скрыть ошибку относительно важной dll, и это не очень хорошо.
- Каталог случайной зависимости подвержен ошибкам.
- Отчеты Xml - это то, что нужно посмотреть, но задача FxCop MSBuild не раскрывает, куда она их помещает: (
Чтобы запустить FxCop из командной строки, мне пришлось выполнить следующее:
FxCopCmd.exe /f:<Assembly.dll> /o:<OutputFileName> /verbose
FxCopCmd - это то, что использует MSBuild. Он вернет код ошибки 512, если отсутствует сборка , даже если сборка не нужна для запуска. См. Ниже сообщение FxCop:
Не удалось найти косвенную ссылку "Newtonsoft.Json, Version = 4.0.2.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed". Эта сборка не требуется для анализа, однако результаты анализа могут быть неполными. На эту сборку ссылались: Removed.dll.
Добавьте ссылку на эту DLL, а затем код ошибки исчезнет.
Ответ 2
Я нашел решение. Это связано с тем, что я ссылался на сборку с более высокой версией, и FxCop жаловался на нее с предупреждением CA0060 в дальнейшем. Решение состоит в том, чтобы отредактировать файл FxCopCmd.exe.config и изменить
<add key="AssemblyReferenceResolveMode" value="StrongName" />
to
<add key="AssemblyReferenceResolveMode" value="StrongNameIgnoringVersion" />
Ответ 3
В соответствии с MSDN это означает, что ему не удалось ссылаться на какую-либо сборку. Этот парень предлагает переопределить его (я цитирую его блог):
The following can be placed directly into the Post-build event field in your project properties.
<YOUR FXCOP COMMAND>
IF 512 == %ERRORLEVEL% (
echo postbuildevent:fxcop warning FXCOP:FxCopCode analysis was unable to complete.
SET ERRORLEVEL = 0
)
Ответ 4
Код ошибки FxCop 512 возникает, если воронка сонара не обнаруживает местоположение зависимых сборок:
Для устранения этой ошибки вы должны установить свойство assemblyDependencyDirectories в Sonar-Runner. Значение этого должно быть разделенным запятыми списком шаблонов пути, чтобы найти каталоги, в которых могут быть найдены сборки зависимостей.
Эти пути могут быть абсолютными или относительными, отправной точкой являются папки, в которых находятся файлы csproj. Также специальный ключ $(SolutionDir)
может использоваться для построения пути относительно корневой папки решения (т.е. Где находится sln файл).
Например: $(SolutionDir)/**/libs
(и не $(SolutionDir)/**/libs/*.dll
)
Например: sonar.fxcop.assemblyDependencyDirectories=$(SolutionDir)/**/libs,$(SolutionDir)/**/Debug
Подробное решение и разрешение еще одной ошибки сонара-бегуна нажмите здесь.
Ответ 5
Первое место, где нужно искать дополнительную информацию, - это файл отчета XML, который обычно содержит полезную информацию ближе к концу.
В противном случае другой метод, который я использовал в подобных случаях, заключается в том, чтобы сделать тот же запрос в графическом интерфейсе FxCop; который выведет диалоговое окно, когда он не сможет решить ссылку на сборку, попросив вас указать на соответствующую сборку. Зная, какая сборка упрощает добавление дополнительного пути каталога.
Ответ 6
Не уверен, что вы все еще ищете решение, но то, что обычно работает для меня, - это добавить fxcop cmdline-option/d: {dir-of-random-assemblies}, который по существу говорит fxcop о том, чтобы посмотреть в этом дополнительном каталоге для сборок. Добавление ссылки на прог, который не нужен, это, по-моему, плохая идея.
Это также нехарактерный способ заботы о проблеме.
http://msdn.microsoft.com/en-US/library/bb429449(v=vs.80).aspx