FXCop is a code analysis tool from Microsoft, which analyzes compiled .NET assemblies for compliance with recommended programming practices. FXCop is “Framework Cop” in short; it can be operated in two modes: one is through a GUI and the other is through command-line mode. Microsoft has made a huge investment in .NET and in promulgating the best .NET coding practices through the .NET Framework Design Guidelines, which you can find at Design Guidelines for Class Library Developers used by the tool. FxCop aims to make it easy to comply by scanning compiled assemblies and creating a report that details coding errors (called violations), and suggests code fixes and improvements. Behind the screen, FXCop uses the Reflection technique to read the code of your assembly and process against predefined rules (around 200+ rules are defined) categorized as naming conventions, library design, localization, security, performance, portability, interoperability etc. The FXCop Introspection engine can be leveraged to develop custom FXCop rules specific to the project needs.

The report generated by an FXCop run details the violations and the files, where they are found; these are then fixed by developers; the code is then committed and FXCop is re-run to check if the code has successfully passed through all the checks.

It is desirable for the developers to know the errors before the code is checked-in, from within the IDE so that the entire cycle which switches between the FXCop GUI, the VS.NET IDE, and the source-control can be avoided.

VS.NET 2005 has built-in support to run FXCop from within the IDE, as/when developer needs. VS.NET 2003 needs to be configured for FXCop integration by setting up the FXCop command-line utility using the External Tools option in the IDE. The “External Tools” option provides a simple way to hook applications into the Visual Studio IDE.

Arguments: Takes applicable arguments to run the FXCop command-line in console mode.

Some key arguments explained below:

/c – direct FXCop analysis to console or output window in IDE.

/f:<file/directory> - where <file/directory> indicates the executable (EXE), or Dynamic Link Library (DLL), or a directory to browse for target assemblies.

/p:<file> - indicates the FXCop project as the input parameter, and <file> refers to the corresponding FXCop project file.

/s - Indicates FXCop to include the summary report with the informational message.

/r:<file/directory> - Indicates the directory location where FXCop rules library is saved (typically “\Microsoft FXCop 1.32 RC 1\Rules”). This will load the entire rules library (.dll files) from the path, during the run.

Initial directory: Path from where the FXCop command-line is launched.

Mark the “Close on exit” and “Use Output window” check-boxes, and click on the “OK” button.

The Tools menu in the IDE will list the “Run FXCop” option as below:

The FXCop integration settings which use the FXCop project file is as below:

The Arguments setting pointing to “FXCopDMSProject” is a system-wide environment variable.

The FXCop project file will have the target assemblies added, default rules excluded (as applicable). During the run, the FXCop command-line will automatically load the entire included rules library (including the selected rule within them); hence we do not have to specify the rule directory location in the arguments.

Let’s look at how to run FXCop from within the IDE. After having configured the “External Tools” settings, build your project and then click on “Run FxCop” under the Tools menu. FXCop works on the binaries; this means the developer needs to re-compile each time before the analysis is run. The analysis results will be posted in the “Output Window” with the rule name, code file name, and error details (as seen in the FXCop GUI). The developer can click on the relevant FXCop error and navigate to the source-code to understand the problem and then fix it.

The following displays the analysis run results in the IDE output window:

The developer can navigate to the line of code where FXCop has identified a violation:

The fix can be made by the developer for the violations reported by the tool, and it can be re-run from within the IDE to ensure the code passes all the rules check, and then the code can be checked-in to the source-control repository.

Hence, developers cannot configure an FXCop project from within the VS.NET IDE; they need to use the FXCop GUI to make any changes to the project file.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

It also comes from with advanced code visualization (Dependencies Matrix, Metric treemap, Box and Arrows graph...), more than 60 metrics, facilities to generate reports and to be integrated with mainstream build technologies and development tools.

NDepend also allows to compare precisely different versions of your codebase.

Thank you for the great article. Unfortunately, I still can't seem to make FxCopCmd work from within the IDE. I've set up FxCop as an External Tool so that it produces the following commandline (which I obtained by checking the Prompt for Arguments box and running FxCop from the Tools menu):

The only thing I've tried that seems to work is moving the FxCop project file into a directory that has a shorter path. Does anyone know if FxCop has a limit on how deep in a path structure it can go? If so, then I love the fact that it's min length doesn't support Microsoft's default folder structure for Visual Studio projects (NOT).

- FxCop no longer uses Reflection to analyze binaries, all rules are now written using the Introspection engine- FxCop (Managed Code Analysis) is only included in Visual Studio Team Suite and Visual Studio Team Edition for Software Developers- FxCop is cased as FxCop rather than FXCop- The latest version of FxCop is 1.35 Beta 1

You might also want to show a way of implementing a more generic solution that handles multiple FxCop projects.

It's worth noting that to get the "Use output Window" option ungreyed in vs2005 using FxCop 1.35 you need to supply it with a .bat or .cmd file. Therefore FxCop.exe will not ungrey this option as it has an .exe extension.

Note The Use output window option is available for .bat and .com files only.