CA0001:找不到成员FirstOrDefault,代码分析错误

时间:2012-04-25 08:10:32

标签: visual-studio-2010 code-analysis fxcop

在我们的一个解决方案中,启用了代码分析(CA),我们收到错误:

CA0001 : Member 'FirstOrDefault' could not be found in type 'System.Linq.Enumerable' in assembly '[our project]'.

在互联网上查看(http://msdn.microsoft.com/en-us/library/ms245246.aspx),Microsoft告诉我们查看CodeAnalysisReport.xml文件。但在我的机器上没有这样的文件存在。

此外,msdn页面告诉我们查看自定义规则,但我们没有任何自定义规则。

有人可以让我们找到正确的方向如何解决这个问题?或者如何获得有关CA这种奇怪行为的更多信息?

编辑:2012年4月25日 - 10:38

在对VS2010的输出进行一些调查之后,我在bin / debug目录中找到了一个文件[mydll] .CodeAnalysisLog.xml。错误更明确:

  <Exception Keyword="CA0001" Kind="AssemblyLoad">
   <Type>Microsoft.FxCop.Common.AssemblyLoadException</Type>
   <ExceptionMessage>Member 'FirstOrDefault' could not be found in type 'System.Linq.Enumerable' in assembly 'Prodigy.UI.Modules.SecurityDesigner.Silverlight, Version=0.0.0.1, Culture=neutral, PublicKeyToken=fdb1b3fc35f0c32e'.</ExceptionMessage>
   <StackTrace>   at Microsoft.FxCop.Engines.Phoenix.LoadAndResolutionHandler.HandleFailureToFindMatch(ModuleUnit unit, String memberName, Type memberType, String className, UInt32 memberRefToken, UInt32 classToken)
   at Phx.Metadata.ReaderImplementation.GetExternalDefinitionMemberSymbolHelper(UInt32 memberToken, String name, Byte* signature, Symbol parentSymbol, Symbol originalParentSymbol)
   at Phx.Metadata.ReaderImplementation.GetExternalDefinitionMemberSymbolHelper(UInt32 memberToken, String name, Byte* signature, Symbol parentSymbol, Symbol originalParentSymbol)
   at Phx.Metadata.LoaderImplementation.GetExternalDefinitionMemberSymbol(UInt32 memberToken)
   at Phx.Metadata.LoaderImplementation.GetMemberReferenceSymbol(UInt32 memberReferenceToken)
   at Phx.Metadata.MetadataLoader.LoadMemberReferences(AssemblyUnit unit)
   at Microsoft.FxCop.Engines.Phoenix.AssemblyLoader.LoadAssembly(String filePath)
   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>

但问题仍然存在,如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我最近偶然发现了这个问题,经过传统的抨击,解决方案非常有趣。重大变化是在我的项目中引用自定义可移植库。这有效地在结果中带来了两组系统参考。含义System.Core被引用两次为4.0.0.0和2.0.whatever。并且看起来fxcop并不够智能(代码工作正常,它只是验证)。

tl; dr 检查陷入困境的程序集有效引用的内容。确保没有重叠复制品进入你的程序集。

答案 1 :(得分:0)

检查你的代码,如果成员'[mydll] .Silverlight,Version = 0.0.0.1,Culture = neutral,PublicKeyToken = fdb1b3fc35f0c32e'中的'System.Linq.Enumerable'类型的成员'FirstOrDefault'?

通过错误描述,似乎你在[mydll] .Silerlight.dll程序集中有一个“System.Linq.Enumerable”类,这是对的吗?

来自http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/c2165692-67ea-4b4a-b730-52f4b4ff0313/

的摘录