Как исправить код ошибки 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