2010-07-24 12 views
4

Je reçois l'erreur inutile suivante lors de la construction de mon projet .NET lorsque l'analyse de code s'exécute. Cela se produit à la fois dans Visual Studio et à partir de la ligne de commande avec MSBuild.Erreurs d'outil d'analyse de code avec "La clé donnée n'était pas présente dans le dictionnaire."

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

Des idées sur ce qui est cassé?


Edit:

ont trouvé le code qui provoque. J'ai une méthode dans mon code.

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

Si j'ajoute la ligne suivante comme la première ligne de code l'erreur commence à se produire, si je le supprimer, l'arrêt erreur. Cela n'a pas vraiment de sens car j'utilise des contrats de code tout au long de mon projet. La seule différence entre cette méthode et n'importe quelle autre est qu'elle contient environ 200 lignes de littéraux XML. La méthode transforme le document d'entrée en un autre format XML un peu comme un XSLT. Je suppose que cela a quelque chose à voir avec ça.

+0

Également vu avec VS2017 avec du code qui ne l'affichait pas dans VS2013. Dans notre cas, nous avons déclenché cela en appliquant accidentellement un mauvais jeu de règles. –

Répondre

4

Il s'agit d'une erreur interne dans l'outil. Il n'y a pas grand-chose à faire à ce sujet, bien qu'il semble que vous ayez trouvé une solution temporaire. Il est possible qu'il se résout quand vous continuez à travailler sur le code source. Bien que cela nécessiterait un verre à moitié plein.

Vous pouvez signaler le bogue sur connect.microsoft.com, ils auront besoin d'un petit échantillon de votre code qui peut reproduire le bogue pour eux.

0

J'ai eu un problème similaire:

<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> 

Je l'ai fait une enquête et a constaté ce problème apparaît uniquement si elle est exécutée FxCop à partir de Visual Studio 2010. Comme il fonctionne très bien dans VS2012 très probablement le bogue dans FxCop a été corrigé . Après avoir commenté mes changements méthode par méthode, je me suis dit que c'était dû à 2 méthodes anonymes (il n'y en a qu'une) dans la même classe. Une fois que je les ai convertis en méthodes «nommées», l'erreur a disparu.

Espérons que ça aide.