Ошибки инструмента анализа кода с «Указанный ключ отсутствует в словаре». - PullRequest
4 голосов
/ 25 июля 2010

Я получаю следующую бесполезную ошибку при создании моего проекта .NET, когда выполняется анализ кода.Это происходит как в Visual Studio, так и при сборке из командной строки с MSBuild.

  * 1 total analysis engine exceptions.
MSBUILD : error : CA0001 : The given key was not present in the dictionary.

Есть идеи, что сломано?


Редактировать:

Нашли код, который его вызывает.У меня есть метод в моем коде.

Public Function Generate(ByVal input As XDocument) As XDocument
   ' My code
End Function

Если я добавлю следующую строку в качестве первой строки кода, ошибка начнет происходить, если я ее уберу, ошибка прекратится.

Contract.Requires(Of ArgumentNullException)(partCover IsNot Nothing, "input")

Это на самом деле не имеет смысла, так как я использую кодовые контракты на протяжении всего проекта.Единственное, что отличается от этого метода от любого другого, это то, что он содержит около 200 строк XML-литералов.Метод преобразует входной документ в другой формат XML, очень похожий на XSLT.Я думаю, что это как-то связано с этим.

Ответы [ 2 ]

4 голосов
/ 25 июля 2010

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

Вы можете сообщить об ошибке на сайте connect.microsoft.com, им потребуется небольшой образец кода, который может воспроизвести ошибку для них.

0 голосов
/ 03 апреля 2013

У меня была похожая проблема:

<Exceptions>
  <Exception Keyword="CA0001" Kind="Engine">
   <Type>System.Collections.Generic.KeyNotFoundException</Type>
   <ExceptionMessage>The given key was not present in the dictionary.</ExceptionMessage>
   <StackTrace>   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at Microsoft.FxCop.Engines.Phoenix.PreScanPass.AnonymousMethodQueue.ReportDeclaringMethodFound(FunctionSymbol anonymousMethod)
   at Microsoft.FxCop.Engines.Phoenix.PreScanPass.AnonymousMethodPhase.ExamineInstructionForAnonymousMethodDeclaration(Instruction instruction)
   at Microsoft.FxCop.Engines.Phoenix.PreScanPass.AnonymousMethodPhase.Execute(Unit unit)
   at Phx.Phases.PhaseList.DoPhaseList(Unit unit)
   at Microsoft.FxCop.Engines.Phoenix.PreScanPass.Execute(ModuleUnit moduleUnit)
   at Phx.Passes.PassList.DoPassList(ModuleUnit moduleUnit)
   at Microsoft.FxCop.Engines.Phoenix.PhoenixAnalysisEngine.AnalyzeInternal()
   at Microsoft.FxCop.Engines.Phoenix.PhoenixAnalysisEngine.Analyze()
   at Microsoft.FxCop.Common.EngineManager.Analyze(Project project, Boolean verboseOutput)    </StackTrace>
</Exception>

Я провел некоторое исследование и обнаружил, что проблема возникает только при запуске FxCop из Visual Studio 2010. Так как он хорошо работает в VS2012, скорее всего, ошибка в FxCop была исправлена.

После комментирования моих изменений метод за методом я понял, что это было вызвано 2 анонимными методами (работает нормально, если есть только один) в одном классе. Как только я преобразовал их в "именованные" методы, ошибка исчезла.

Надеюсь, это поможет.

...