如何修复FxCop错误代码512?

时间:2011-10-31 03:08:30

标签: c# visual-studio-2010 fxcop

在重构时,在一些程序集周围移动等等。我在Visual Studio中编译了一个解决方案并返回了一条错误消息:“FxCop退出时出现错误代码512”。除了这个错误之外,构建似乎很好。

任何人都知道这实际上意味着什么?我可以从哪里开始寻找解决方法?将FailOnError设置为false不是我想要关闭的路径。

6 个答案:

答案 0 :(得分:6)

其他答案都在正确的轨道上,但错过了一小部分。

  • 抑制是一个选项,但您可能会隐藏有关重要dll的错误,这不是一件好事。
  • 随机依赖目录容易出错。
  • Xml报告是要查看的地方,但FxCop MSBuild任务不会显示它放置的位置:(

为了从命令行运行FxCop,我必须执行以下操作:

FxCopCmd.exe /f:<Assembly.dll> /o:<OutputFileName> /verbose

FxCopCmd是MSBuild Task使用的。如果缺少程序集,它将返回错误代码512,即使程序集不需要运行。请参阅以下FxCop消息:

  

无法找到间接引用的程序集“Newtonsoft.Json,Version = 4.0.2.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”。 分析不需要此程序集,但分析结果可能不完整。此程序集由以下引用:Removed.dll。

添加对该dll的引用,然后错误代码消失。

答案 1 :(得分:5)

我找到了解决方案。这是因为我引用了一个更高版本的程序集,并且FxCop正在抱怨它,警告CA0060进一步下降。解决方案是编辑FxCopCmd.exe.config文件并更改

<add key="AssemblyReferenceResolveMode" value="StrongName" />

<add key="AssemblyReferenceResolveMode" value="StrongNameIgnoringVersion" />

答案 2 :(得分:1)

根据MSDN,这意味着它无法引用某些程序集。 This guy建议覆盖它(我引用他的博客):

The following can be placed directly into the Post-build event field in your project's properties.
<YOUR FXCOP COMMAND>
IF 512 == %ERRORLEVEL% (
    echo postbuildevent:fxcop warning FXCOP:FxCopCode analysis was unable to complete.
    SET ERRORLEVEL = 0
) 

答案 3 :(得分:1)

如果声纳运行器未找到从属装配位置,则会出现FxCop错误代码512: 要解决此错误,您必须在Sonar-Runner中设置 assemblyDependencyDirectories 属性。它的值应该是以逗号分隔的路径模式列表,以找到可以找到依赖项程序集的目录。

这些路径可以是绝对路径或相对路径,起点是csproj文件所在的文件夹。此外,特殊键$(SolutionDir)可用于构建相对于解决方案的根文件夹的路径(即sln文件所在的位置)。

例如:$(SolutionDir)/**/libs(而不是$(SolutionDir)/**/libs/*.dll

例如:sonar.fxcop.assemblyDependencyDirectories=$(SolutionDir)/**/libs,$(SolutionDir)/**/Debug

详细解决和解决更多声纳跑步者错误click here

答案 4 :(得分:0)

查找额外信息的第一个地方是XML报告文件 - 通常在最后附近有一些有用的信息。

如果不这样,我在这种情况下使用的另一种技术是在FxCop GUI中进行相同的查询;当它无法解析程序集引用时,会弹出一个对话框,要求您指向相关的程序集。知道它是哪个程序集使得添加额外的目录路径变得更加容易。

答案 5 :(得分:0)

不确定你是否还在寻找解决方案,但通常对我有用的是添加fxcop cmdline-option / d:{dir-of-random-assemblies}这实际上告诉fxcop查看该附加目录组件。在我看来,添加对不需要它的项目的引用是一个坏主意。 这也是一种解决问题的非黑客方式。

http://msdn.microsoft.com/en-US/library/bb429449(v=vs.80).aspx