<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>BuildCop Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Home</link><description>BuildCop Wiki Rss Description</description><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Home&amp;version=5</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Introduction
&lt;/h1&gt; &lt;br /&gt;BuildCop is a tool that analyzes MSBuild project files (interactively or during e.g. a daily build) according to a customizable set of rules and generates reports - e.g. is strong naming enabled, are certain project properties set correctly, is XML documentation being generated, are assembly references correct, are naming conventions respected, ...&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Getting Started
&lt;/h1&gt; &lt;br /&gt;BuildCop consists of a command-line tool and an XML configuration file. When the application is run, it will read the configuration file to figure out which files to analyze, which rules to run, and which reports to generate.&lt;br /&gt; &lt;br /&gt;Basic usage looks as follows:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Define the configuration file&lt;/b&gt;: this XML file determines the actions that BuildCop takes; see below for the details of the configuration file. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Run the tool&lt;/b&gt;: this can be done interactively on the command-line or in an automated way, e.g. during a daily build. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Open the report(s)&lt;/b&gt;: the generated reports contain the results of the analysis and allow you to take appropriate actions to correct issues in MSBuild files; various reporting options (to the console, or to a XML, HTML or CSV file) are provided out of the box. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Create additional rules and/or formatters&lt;/b&gt;: BuildCop is created with extensibility in mind, so if you would like to extend BuildCop to run additional rules or provide additional reporting formats, it's quite easy to provide custom rules and formatters. &lt;/li&gt;
&lt;/ol&gt;In the future, an additional GUI application could be foreseen to run the rules interactively in a rich Windows application, and to edit configuration files, but those are currently not implemented yet. Of course, feel free to contact me if you want to contribute to the project!&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Documentation
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Configuration&amp;amp;referringTitle=Home"&gt;Configuration&lt;/a&gt;: Provides details on how to configure the application.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Rules&amp;amp;referringTitle=Home"&gt;Built-In Rules&lt;/a&gt;: Lists the built-in rules and explains how to configure them.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Formatters&amp;amp;referringTitle=Home"&gt;Built-In Formatters&lt;/a&gt;: Lists the built-in formatters and explains how to configure them.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Customization&amp;amp;referringTitle=Home"&gt;Customization&lt;/a&gt;: Provides details on how to add custom rules and formatters.&lt;/li&gt;
&lt;/ul&gt;A slightly better version of the documentation is also included in the released download package, where everything is bundled in one compiled help (chm) file.&lt;br /&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 21:18:39 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080205091839P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Home&amp;version=4</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Introduction
&lt;/h1&gt; &lt;br /&gt;BuildCop is a tool that analyzes MSBuild project files (interactively or during e.g. a daily build) according to a customizable set of rules and generates reports - e.g. is strong naming enabled, are certain project properties set correctly, is XML documentation being generated, are assembly references correct, are naming conventions respected, ...&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Getting Started
&lt;/h1&gt; &lt;br /&gt;BuildCop consists of a command-line tool and an XML configuration file. When the application is run, it will read the configuration file to figure out which files to analyze, which rules to run, and which reports to generate.&lt;br /&gt; &lt;br /&gt;Basic usage looks as follows:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Define the configuration file&lt;/b&gt;: this XML file determines the actions that BuildCop takes; see below for the details of the configuration file. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Run the tool&lt;/b&gt;: this can be done interactively on the command-line or in an automated way, e.g. during a daily build. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Open the report(s)&lt;/b&gt;: the generated reports contain the results of the analysis and allow you to take appropriate actions to correct issues in MSBuild files; various reporting options (to the console, or to a XML, HTML or CSV file) are provided out of the box. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Create additional rules and/or formatters&lt;/b&gt;: BuildCop is created with extensibility in mind, so if you would like to extend BuildCop to run additional rules or provide additional reporting formats, it's quite easy to provide custom rules and formatters. &lt;/li&gt;
&lt;/ol&gt;In the future, an additional GUI application could be foreseen to run the rules interactively in a rich Windows application, and to edit configuration files, but those are currently not implemented yet. Of course, feel free to contact me if you want to contribute to the project!&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Documentation
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Configuration&amp;amp;referringTitle=Home"&gt;Configuration&lt;/a&gt;: Provides details on how to configure the application.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Rules&amp;amp;referringTitle=Home"&gt;Built-In Rules&lt;/a&gt;: Lists the built-in rules and explains how to configure them.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Formatters&amp;amp;referringTitle=Home"&gt;Built-In Formatters&lt;/a&gt;: Lists the built-in formatters and explains how to configure them.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Customization&amp;amp;referringTitle=Home"&gt;Customization&lt;/a&gt;: Provides details on how to add custom rules and formatters.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;A slightly better version of the documentation is also included in the released download package, where everything is bundled in one compiled help (chm) file.&lt;br /&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 21:18:14 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080205091814P</guid></item><item><title>UPDATED WIKI: Customization</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Customization&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Customization
&lt;/h1&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt; &lt;br /&gt;BuildCop is designed with extensibility in mind: its use would be very restricted if it weren't possible to write custom rules or formatters. Luckily, customization is quite straight-forward if you are a .NET developer, so feel free to extend the tool and send me any custom classes you have created!&lt;br /&gt; &lt;br /&gt;If the documentation would not suffice, you can always look at the source code for the existing rules (they have no special tricks or privileges) to get more insight in the way it works. If you would still get stuck in any way, though, please let me know and I'll clear up whatever isn't obvious right now.&lt;br /&gt; &lt;br /&gt;As for the technical details: BuildCop is written on .NET 2.0 so all you need is a compiler and a reference to the &lt;span class="codeInline"&gt;JelleDruyts.BuildCop.dll&lt;/span&gt; assembly, which contains all the required classes needed for customization.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Writing Custom Rules
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Create a class that derives from &lt;span class="codeInline"&gt;JelleDruyts.BuildCop.Rules.BaseRule&lt;/span&gt;.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Re-implement the base class constructor (simply pass through to the base class constructor).&lt;/li&gt;&lt;li&gt;Override the &lt;span class="codeInline"&gt;Check&lt;/span&gt; method to analyze an MSBuild project file and return log entries.&lt;/li&gt;&lt;li&gt;If your rule has configuration information, retrieve the strongly typed configuration instance using the generic &lt;span class="codeInline"&gt;GetTypedConfiguration&lt;/span&gt; method.&lt;/li&gt;&lt;li&gt;When creating log entries, you should pass the &lt;span class="codeInline"&gt;Name&lt;/span&gt; property of your rule as the &lt;span class="codeInline"&gt;rule&lt;/span&gt; argument for the log entry's constructor.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;If your rule requires configuration:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Create a root configuration element that inherits from &lt;span class="codeInline"&gt;JelleDruyts.BuildCop.Configuration.RuleConfigurationElement&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Re-implement the two base class constructors (simply pass through to the base class constructors).&lt;/li&gt;&lt;li&gt;Inside the class, use the standard .NET 2.0 Configuration infrastructure (i.e. &lt;span class="codeInline"&gt; ConfigurationElement&lt;/span&gt; and &lt;span class="codeInline"&gt;ConfigurationElementCollection&lt;/span&gt; classes) to define the actual configuration information.&lt;/li&gt;&lt;li&gt;Decorate your custom rule class with &lt;span class="codeInline"&gt;[BuildCopRule(ConfigurationType = typeof(your configuration root type))]&lt;/span&gt; to associate the rule with the configuration type.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Copy the assembly containing your rule to the BuildCop directory.&lt;/li&gt;&lt;li&gt;Register your rule in the configuration file using its fully qualified name, and provide the necessary configuration information.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;Below is a sample implementation of a custom rule that raises errors if the project's assembly name contains forbidden words:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
[BuildCopRule(ConfigurationType = typeof(ForbiddenWordsRuleElement))]
public class ForbiddenWordsRule : BaseRule
{
    public ForbiddenWordsRule(RuleConfigurationElement configuration) : base(configuration)
    {
    }
 
    public override IList&amp;lt;LogEntry&amp;gt; Check(BuildFile project)
    {
        ForbiddenWordsRuleElement config = this.GetTypedConfiguration&amp;lt;ForbiddenWordsRuleElement&amp;gt;();
        List&amp;lt;LogEntry&amp;gt; entries = new List&amp;lt;LogEntry&amp;gt;();
 
        foreach (string forbiddenWord in config.Words.ForbiddenWords.Split(';'))
        {
            if (project.AssemblyName.IndexOf(forbiddenWord, StringComparison.OrdinalIgnoreCase) &amp;gt;= 0)
            {
                string message = &amp;quot;The assembly name contains a forbidden word.&amp;quot;;
                string detail = string.Format(&amp;quot;The assembly name \&amp;quot;{0}\&amp;quot; contains the forbidden word \&amp;quot;{1}\&amp;quot;.&amp;quot;,
                    project.AssemblyName, forbiddenWord);
                entries.Add(new LogEntry(this.Name, &amp;quot;ForbiddenWord&amp;quot;, LogLevel.Error, message, detail));
            }
        }
 
        return entries;
    }
} 
&lt;/pre&gt; &lt;br /&gt;The configuration classes for this rule would be defined as follows:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
public class ForbiddenWordsRuleElement : RuleConfigurationElement
{
    public ForbiddenWordsRuleElement()
    {
    }
 
    public ForbiddenWordsRuleElement(XmlReader reader) : base(reader)
    {
    }
 
    [ConfigurationProperty(&amp;quot;words&amp;quot;, IsRequired = true)]
    public WordsElement Words
    {
        get { return (WordsElement)base[&amp;quot;words&amp;quot;]; }
    }
}
 
public class WordsElement : ConfigurationElement
{
    [ConfigurationProperty(&amp;quot;forbidden&amp;quot;, IsRequired = true)]
    public string ForbiddenWords
    {
        get { return (string)base[&amp;quot;forbidden&amp;quot;]; }
        set { base[&amp;quot;forbidden&amp;quot;] = value; }
    }
} 
&lt;/pre&gt; &lt;br /&gt;The configuration file would then contain a rule definition such as the following:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;ForbiddenWordsRule&amp;quot; type=&amp;quot;CustomRules.ForbiddenWordsRule, CustomRules&amp;quot;&amp;gt;
  &amp;lt;words forbidden=&amp;quot;hack;crack;dummy&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Writing Custom Formatters
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Create a class that derives from &lt;span class="codeInline"&gt;JelleDruyts.BuildCop.Formatters.BaseFormatter&lt;/span&gt;.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Re-implement the base class constructor (simply pass through to the base class constructor).&lt;/li&gt;&lt;li&gt;Override the &lt;span class="codeInline"&gt;WriteReport&lt;/span&gt; method to write the given report in whatever way you want.&lt;/li&gt;&lt;li&gt;If your formatter has configuration information, retrieve the strongly typed configuration instance using the generic &lt;span class="codeInline"&gt;GetTypedConfiguration&lt;/span&gt; method.&lt;/li&gt;&lt;li&gt;To retrieve the log entries to write (taking the minimum log level into account), call the &lt;span class="codeInline"&gt;FindLogEntries&lt;/span&gt; method of the given &lt;span class="codeInline"&gt;BuildCopReport&lt;/span&gt; instance.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;If your formatter requires configuration:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Create a root configuration element that inherits from &lt;span class="codeInline"&gt;JelleDruyts.BuildCop.Configuration.FormatterConfigurationElement&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Re-implement the two base class constructors (simply pass through to the base class constructors).&lt;/li&gt;&lt;li&gt;Inside the class, use the standard .NET 2.0 Configuration infrastructure (i.e. &lt;span class="codeInline"&gt; ConfigurationElement&lt;/span&gt; and &lt;span class="codeInline"&gt;ConfigurationElementCollection&lt;/span&gt; classes) to define the actual configuration information.&lt;/li&gt;&lt;li&gt;Decorate your custom formatter class with &lt;span class="codeInline"&gt;[BuildCopFormatter(ConfigurationType = typeof(your configuration root type))]&lt;/span&gt; to associate the rule with the configuration type.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Copy the assembly containing your formatter to the BuildCop directory.&lt;/li&gt;&lt;li&gt;Register your formatter in the configuration file using its fully qualified name, and provide the necessary configuration information.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Note that you can build formatter and configuration classes from scratch as shown above, but in the very common case that you want to write to a file, it is also possible to use the existing &lt;span class="codeInline"&gt;FilebasedFormatter&lt;/span&gt; base class with its associated &lt;span class="codeInline"&gt;FilebasedFormatterElement&lt;/span&gt; configuration base class, which already provide you with a file name and the code that launches the file after the report has been written (if so desired by the user). In that case, you only have to worry about writing the actual file as in the example below. Likewise, if you require file-based output that involves an XSLT, you can use the &lt;span class="codeInline"&gt;XsltFilebasedFormatter&lt;/span&gt; and &lt;span class="codeInline"&gt;XsltFilebasedFormatterElement&lt;/span&gt; base classes, which adds a &lt;span class="codeInline"&gt;stylesheet&lt;/span&gt; attribute to the configuration. In both cases, you must now override the &lt;span class="codeInline"&gt;WriteReportCore&lt;/span&gt; method instead of &lt;span class="codeInline"&gt;WriteReport&lt;/span&gt; (to allow the base class to launch the file after it is written).&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;Below is a sample implementation of a custom formatter that writes to a text file.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
[BuildCopFormatter(ConfigurationType = typeof(FilebasedFormatterElement))]
public class TextFileFormatter : FilebasedFormatter
{
    public TextFileFormatter(FormatterConfigurationElement configuration)
        : base(configuration)
    {
    }
 
    protected override void WriteReportCore(BuildCopReport report, LogLevel minimumLogLevel)
    {
        FilebasedFormatterElement configuration = this.GetTypedConfiguration&amp;lt;FilebasedFormatterElement&amp;gt;();
        string fileName = configuration.Output.FileName;
 
        using (FileStream outputStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Read))
        using (StreamWriter writer = new StreamWriter(outputStream))
        {
            foreach (BuildGroupReport groupReport in report.BuildGroupReports)
            {
                foreach (BuildFileReport fileReport in groupReport.BuildFileReports)
                {
                    foreach (LogEntry entry in fileReport.FindLogEntries(minimumLogLevel))
                    {
                        writer.WriteLine(&amp;quot;{0} - {1} - {2} - {3} - {4} - {5} - {6}&amp;quot;,
                            groupReport.BuildGroupName, fileReport.FileName,
                            entry.Level.ToString(), entry.Rule, entry.Code,
                            entry.Message, entry.Detail);
                    }
                }
            }
        }
    }
} 
&lt;/pre&gt; &lt;br /&gt;The configuration file would then contain a formatter definition such as the following:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;formatter name=&amp;quot;Text&amp;quot; type=&amp;quot;CustomFormatters.TextFormatter, CustomFormatters&amp;quot;&amp;gt;
  &amp;lt;output fileName=&amp;quot;out.txt&amp;quot; launch=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/formatter&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 21:11:40 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Customization 20080205091140P</guid></item><item><title>UPDATED WIKI: Built-In Formatters</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In Formatters&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Built-In Formatters
&lt;/h3&gt; &lt;br /&gt;&lt;h2&gt;
Console
&lt;/h2&gt; &lt;br /&gt;Writes the log entries to the console.&lt;br /&gt; &lt;br /&gt;&lt;span class="codeInline"&gt;&amp;lt;formatter name=&amp;quot;Console&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Formatters.Console.ConsoleFormatter&amp;quot; minimumLogLevel=&amp;quot;[...]&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;This formatter has no formatter-specific configuration.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
CSV
&lt;/h2&gt; &lt;br /&gt;Writes the log entries to a comma-separated values (CSV) file.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;formatter name=&amp;quot;Csv&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Formatters.Csv.CsvFormatter&amp;quot; minimumLogLevel=&amp;quot;[...]&amp;quot;&amp;gt;
  &amp;lt;output fileName=&amp;quot;[...]&amp;quot; launch=&amp;quot;[true|false]&amp;quot; /&amp;gt;
&amp;lt;/formatter&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;output&lt;/span&gt;: defines the output settings for this formatter.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;fileName&lt;/span&gt;: the relative path and file name of the file to write.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;launch&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if the file should be launched when the report has been written.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
HTML
&lt;/h2&gt; &lt;br /&gt;Writes the log entries to an HTML file.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;formatter name=&amp;quot;Html&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Formatters.Html.HtmlFormatter&amp;quot; minimumLogLevel=&amp;quot;[...]&amp;quot;&amp;gt;
  &amp;lt;output fileName=&amp;quot;[...]&amp;quot; launch=&amp;quot;[true|false]&amp;quot; stylesheet=&amp;quot;[...]&amp;quot; /&amp;gt;
&amp;lt;/formatter&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;output&lt;/span&gt;: defines the output settings for this formatter.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;fileName&lt;/span&gt;: the relative path and file name of the file to write.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;launch&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if the file should be launched when the report has been written.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;stylesheet&lt;/span&gt; (optional): the relative path to the XSLT stylesheet to use. The HTML formatter reuses the XML formatter to produce an XML document and then transforms this into an HTML document using an XSLT stylesheet. By default, the &amp;quot;BuildCopReport.xslt&amp;quot; file provided with the application is used, but you can provide an alternative XSLT file here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
XML
&lt;/h2&gt; &lt;br /&gt;Writes the log entries to an XML file.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;formatter name=&amp;quot;Xml&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Formatters.Xml.XmlFormatter&amp;quot; minimumLogLevel=&amp;quot;[...]&amp;quot;&amp;gt;
  &amp;lt;output fileName=&amp;quot;[...]&amp;quot; launch=&amp;quot;[true|false]&amp;quot; stylesheet=&amp;quot;[...]&amp;quot; /&amp;gt;
&amp;lt;/formatter&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;output&lt;/span&gt;: defines the output settings for this formatter.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;fileName&lt;/span&gt;: the relative path and file name of the file to write.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;launch&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if the file should be launched when the report has been written.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;stylesheet&lt;/span&gt; (optional): the path to the XSLT stylesheet to reference as a processing instruction inside the XML file. You can use the &amp;quot;BuildCopReport.xslt&amp;quot; file provided with the application (or an alternative XSLT file), so that a web browser displays the XML file in a human-readable way.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 21:07:53 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Built-In Formatters 20080205090753P</guid></item><item><title>UPDATED WIKI: Built-In Rules</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In Rules&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Built-In Rules
&lt;/h1&gt; &lt;br /&gt;&lt;h2&gt;
Assembly References
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;Verifies that assembly references are correct. This rule can be used to make sure all projects use consistent assembly references (e.g. to correct versions of common components).&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;AssemblyReferenceRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.AssemblyReferences.AssemblyReferenceRule&amp;quot;&amp;gt;
  &amp;lt;assemblyLocations&amp;gt;
    &amp;lt;assemblyLocation assemblyName=&amp;quot;[...]&amp;quot;
                      assemblyPath=&amp;quot;[...]&amp;quot; /&amp;gt;
  &amp;lt;/assemblyLocations&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;assemblyLocations&lt;/span&gt;: contains 0 or more &lt;span class="codeInline"&gt;assemblyLocation&lt;/span&gt; nodes.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;assemblyLocation&lt;/span&gt;: defines an expected assembly location.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;assemblyName&lt;/span&gt;: the fully qualified assembly name to verify (or at least the start of it).&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;assemblyPath&lt;/span&gt;: the expected location of the assembly (or at least the start of it).&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example verifies that any assembly whose fully qualified name starts with &amp;quot;EnvDTE, Version=8.0.0.0&amp;quot; is referenced from a path that starts with &amp;quot;R:\References\VisualStudio\8.0&amp;quot; (in other words, that &amp;quot;EnvDTE.dll&amp;quot; is referenced from somewhere under &amp;quot;R:\References\VisualStudio\8.0&amp;quot;):&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;AssemblyReferenceRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.AssemblyReferences.AssemblyReferenceRule&amp;quot;&amp;gt;
  &amp;lt;assemblyLocations&amp;gt;
    &amp;lt;assemblyLocation assemblyName=&amp;quot;EnvDTE, Version=8.0.0.0&amp;quot; assemblyPath=&amp;quot;R:\References\VisualStudio\8.0&amp;quot; /&amp;gt;
  &amp;lt;/assemblyLocations&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Build Properties
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;Verifies that build properties in a project file are correct. This rule can be used to generically check all MSBuild properties, including (but not limited to) the build properties that are defined inside the project's properties in Visual Studio.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;BuildPropertiesRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.BuildProperties.BuildPropertiesRule&amp;quot;&amp;gt;
  &amp;lt;buildProperties&amp;gt;
    &amp;lt;buildProperty name=&amp;quot;[...]&amp;quot;
                   value=&amp;quot;[...]&amp;quot;
                   condition=&amp;quot;[...]&amp;quot;
                   compareOption=&amp;quot;[EqualTo|NotEqualTo|Exists|DoesNotExist|In|NotIn]&amp;quot;
                   stringCompareOption=&amp;quot;[CurrentCulture|CurrentCultureIgnoreCase|InvariantCulture|InvariantCultureIgnoreCase|Ordinal|OrdinalIgnoreCase]&amp;quot; /&amp;gt;
  &amp;lt;/buildProperties&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;buildProperties&lt;/span&gt;: contains 0 or more &lt;span class="codeInline"&gt;buildProperty&lt;/span&gt; nodes.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;buildProperty&lt;/span&gt;: defines an expected build property.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;name&lt;/span&gt;: the name of the build property.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;value&lt;/span&gt; (optional): the expected value of the build property.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;condition&lt;/span&gt; (optional): the condition (or a part of it) that should be present in the build property's condition; typically used to differentiate between &amp;quot;Debug&amp;quot; and &amp;quot;Release&amp;quot; solution configurations, which are represented as MSBuild conditions.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;compareOption&lt;/span&gt; (optional): the comparison option to use when checking build property values.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;EqualTo&lt;/span&gt;: the build property's value must be exactly equal to the given value.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;NotEqualTo&lt;/span&gt;: the build property's value may not be exactly equal to the given value.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;Exists&lt;/span&gt;: the build property must exist (and can have any value).&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;DoesNotExist&lt;/span&gt;: the build property may not exist.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;In&lt;/span&gt;: the build property's value must appear anywhere in the given value.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;NotIn&lt;/span&gt;: the build property's value may not appear anywhere in the given value. The default value is &amp;quot;EqualTo&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class="codeInline"&gt;stringCompareOption&lt;/span&gt; (optional): the comparison option to use when comparing strings; typically used to make the comparison case insensitive. The default value is &amp;quot;Ordinal&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example verifies that warnings are always treated as errors, that the output path is correctly set for both the Debug as the Release solution configuration (i.e. condition), and that the DocumentationFile property exists:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;Build Properties&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.BuildProperties.BuildPropertiesRule&amp;quot;&amp;gt;
  &amp;lt;buildProperties&amp;gt;
    &amp;lt;buildProperty name=&amp;quot;TreatWarningsAsErrors&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;
    &amp;lt;buildProperty name=&amp;quot;OutputPath&amp;quot; value=&amp;quot;bin\Debug\&amp;quot; condition=&amp;quot;Debug&amp;quot; stringCompareOption=&amp;quot;OrdinalIgnoreCase&amp;quot; /&amp;gt;
    &amp;lt;buildProperty name=&amp;quot;OutputPath&amp;quot; value=&amp;quot;bin\Release\&amp;quot; condition=&amp;quot;Release&amp;quot; stringCompareOption=&amp;quot;OrdinalIgnoreCase&amp;quot; /&amp;gt;
    &amp;lt;buildProperty name=&amp;quot;DocumentationFile&amp;quot; compareOption=&amp;quot;Exists&amp;quot; /&amp;gt;
  &amp;lt;/buildProperties&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Documentation File
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;Verifies that an XML documentation file is generated as part of the build, with the correct name (i.e. the name of the assembly with the .xml file extension).&lt;br /&gt; &lt;br /&gt;This rule has no rule-specific configuration.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example verifies that an XML documentation file is generated as part of the build.&lt;br /&gt; &lt;br /&gt;&lt;span class="codeInline"&gt;&amp;lt;rule name=&amp;quot;DocumentationFileRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.DocumentationFile.DocumentationFileRule&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Naming Conventions
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;Verifies that certain naming conventions are respected.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;NamingConventionsRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.NamingConventions.NamingConventionsRule&amp;quot;&amp;gt;
  &amp;lt;prefixes namespacePrefix=&amp;quot;[...]&amp;quot;
            assemblyNamePrefix=&amp;quot;[...]&amp;quot;
            assemblyNameShouldMatchRootNamespace=&amp;quot;[true|false]&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;prefixes&lt;/span&gt;: defines naming conventions for certain prefixes.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;namespacePrefix&lt;/span&gt; (optional): the expected root namespace of the project (or at least the start of it).&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;assemblyNamePrefix&lt;/span&gt; (optional): the expected assembly name of the project (or at least the start of it).&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;assemblyNameShouldMatchRootNamespace&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if the assembly name must be the same as the root namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example verifies that the root namespace and assembly name start with &amp;quot;JelleDruyts&amp;quot; and are exactly the same.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;Naming Conventions&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.NamingConventions.NamingConventionsRule&amp;quot;&amp;gt;
  &amp;lt;prefixes namespacePrefix=&amp;quot;JelleDruyts&amp;quot;
            assemblyNamePrefix=&amp;quot;JelleDruyts&amp;quot; 
            assemblyNameShouldMatchRootNamespace=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Orphaned Projects
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;Verifies that the MSBuild project files being analyzed are part of at least one Visual Studio solution (.sln) file.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;OrphanedProjects&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.OrphanedProjects.OrphanedProjectsRule&amp;quot;&amp;gt;
  &amp;lt;solutions searchPath=&amp;quot;[...]&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;solutions&lt;/span&gt;: defines where to look for Visual Studio solution (.sln) files.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;searchPath&lt;/span&gt;: the root path in which to recursively look for solution files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example verifies that all MSBuild project files are part of solution files somewhere in the &amp;quot;D:\Projects\Source&amp;quot; path.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;OrphanedProjects&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.OrphanedProjects.OrphanedProjectsRule&amp;quot;&amp;gt;
  &amp;lt;solutions searchPath=&amp;quot;D:\Projects\Source&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Strong Naming
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;Verifies the strong naming (key signing) settings of a project file.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;StrongNamingRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.StrongNaming.StrongNamingRule&amp;quot;&amp;gt;
  &amp;lt;strongNaming strongNameRequired=&amp;quot;[true|false]&amp;quot;
                keyPath=&amp;quot;[...]&amp;quot;
                ignoreUnsignedProjects=&amp;quot;[true|false]&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;strongNaming&lt;/span&gt;: defines the expected settings for strong naming assemblies.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;strongNameRequired&lt;/span&gt;: a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if strong naming should be enabled.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;keyPath&lt;/span&gt; (optional): if a strong name is required, determines the path to the key file that should be used to sign the assembly.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;ignoreUnsignedProjects&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if projects that don't have strong naming enabled should be ignored; this can be used to check only that the key being used is valid for projects that do have strong naming enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example verifies that all project files have strong naming enabled and that they all use the key file &amp;quot;D:\Projects\Source\JelleDruyts.snk&amp;quot;.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;rule name=&amp;quot;StrongNamingRule&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.StrongNaming.StrongNamingRule&amp;quot;&amp;gt;
  &amp;lt;strongNaming strongNameRequired=&amp;quot;true&amp;quot; keyPath=&amp;quot;D:\Projects\Source\JelleDruyts.snk&amp;quot; ignoreUnsignedProjects=&amp;quot;false&amp;quot; /&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 21:05:49 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Built-In Rules 20080205090549P</guid></item><item><title>UPDATED WIKI: Configuration</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Configuration&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Configuration
&lt;/h1&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt; &lt;br /&gt;The BuildCop configuration file must always be named &lt;span class="codeInline"&gt;JelleDruyts.BuildCop.Console.exe.config&lt;/span&gt; and be located in the same directory as the executable.&lt;br /&gt; &lt;br /&gt;To assist you in defining the configuration file, an XML Schema Definition (XSD) file is provided that documents the available XML nodes and attributes for most of the file's contents. When using Visual Studio to edit the configuration file, this XSD file is used to provide IntelliSense, so defining the configuration becomes quite easy.&lt;br /&gt; &lt;br /&gt;The configuration file has the following structure:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;buildCopConfiguration&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Configuration.BuildCopConfiguration, JelleDruyts.BuildCop&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
  &amp;lt;buildCopConfiguration xmlns=&amp;quot;http://schemas.jelle.druyts.net/BuildCop&amp;quot;&amp;gt;
    &amp;lt;buildGroups&amp;gt;[...]&amp;lt;/buildGroups&amp;gt;
    &amp;lt;sharedRules&amp;gt;[...]&amp;lt;/sharedRules&amp;gt;
    &amp;lt;formatters&amp;gt;[...]&amp;lt;/formatters&amp;gt;
    &amp;lt;outputTypeMappings&amp;gt;[...]&amp;lt;/outputTypeMappings&amp;gt;
  &amp;lt;/buildCopConfiguration&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/pre&gt; &lt;br /&gt;As you can see, the XML configuration file starts with the declaration of the BuildCop configuration section and then proceeds with the actual configuration inside the &lt;span class="codeInline"&gt;&amp;lt;buildCopConfiguration xmlns=&amp;quot;http://schemas.jelle.druyts.net/BuildCop&amp;quot;&amp;gt;&lt;/span&gt; node.&lt;br /&gt; &lt;br /&gt;Within this &lt;span class="codeInline"&gt;buildCopConfiguration&lt;/span&gt; root tag, there are four main configuration nodes:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;buildGroups&lt;/span&gt;: defines the groups of MSBuild project files that are analyzed according to the same rules; this allows you to create multiple groups with different settings.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;sharedRules&lt;/span&gt; (optional): defines BuildCop rules that can be shared between build groups; this allows you to reuse certain rule definitions across build groups that have overlapping rules.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;formatters&lt;/span&gt;: defines the formatters that will be used to generate the reports; this allows you to define multiple outputs for various purposes (e.g. an HTML output file to publish to a website and an XML output file to access through another tool).&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;outputTypeMappings&lt;/span&gt; (advanced, optional): defines additional mappings of Visual Studio project type GUIDs to friendly names; this allows you to exclude project types from BuildCop rules using &amp;quot;friendly&amp;quot; project type names.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
Build Groups
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;The &lt;span class="codeInline"&gt;buildGroups&lt;/span&gt; configuration node has the following structure:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;buildGroups&amp;gt;
  &amp;lt;buildGroup name=&amp;quot;Default&amp;quot; enabled=&amp;quot;[true|false]&amp;quot;&amp;gt;
    &amp;lt;buildFiles excludedFiles=&amp;quot;[...]&amp;quot;&amp;gt;
      &amp;lt;paths&amp;gt;
        &amp;lt;path rootPath=&amp;quot;[...]&amp;quot; searchPattern=&amp;quot;[...]&amp;quot; excludedFiles=&amp;quot;[...]&amp;quot; /&amp;gt;
      &amp;lt;/paths&amp;gt;
    &amp;lt;/buildFiles&amp;gt;
    &amp;lt;rules&amp;gt;
      &amp;lt;rule name=&amp;quot;[...]&amp;quot; type=&amp;quot;[...]&amp;quot; enabled=&amp;quot;[true|false]&amp;quot; excludedFiles=&amp;quot;[...]&amp;quot; excludedOutputTypes=&amp;quot;[Win|WinExe|Library|Web|...]&amp;quot;&amp;gt;
        [...]
      &amp;lt;/rule&amp;gt;
      &amp;lt;rule name=&amp;quot;[...] /&amp;gt;
    &amp;lt;/rules&amp;gt;
  &amp;lt;/buildGroup&amp;gt;
  &amp;lt;buildGroup name=&amp;quot;Exceptions&amp;quot;&amp;gt;
    &amp;lt;buildFiles&amp;gt;[...]&amp;lt;/buildFiles&amp;gt;
    &amp;lt;rules&amp;gt;[...]&amp;lt;/rules&amp;gt;
  &amp;lt;/buildGroup&amp;gt;
&amp;lt;/buildGroups&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;buildGroups&lt;/span&gt;: contains 1 or more &lt;span class="codeInline"&gt;buildGroup&lt;/span&gt; nodes.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;buildGroup&lt;/span&gt;: defines a build group.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;name&lt;/span&gt;: the name of the build group; must be unique.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;enabled&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if the build group is enabled; this allows you to disable build groups without deleting the configuration from the file.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class="codeInline"&gt;buildFiles&lt;/span&gt;: defines the MSBuild project files in the build group.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;excludedFiles&lt;/span&gt; (optional): a semicolon-separated list of strings to find in the names of files to exclude in any of the paths defined below; this allows you to exclude certain files based on (part of) their full path and file name. For example: &lt;span class="codeInline"&gt;excludedFiles=&amp;quot;TestResults;.Test.csproj&amp;quot;&lt;/span&gt; would exclude all files with &amp;quot;TestResults&amp;quot; or &amp;quot;.Test.csproj&amp;quot; as part of their path.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class="codeInline"&gt;paths&lt;/span&gt;: contains 1 or more &lt;span class="codeInline"&gt;path&lt;/span&gt; nodes that together form the collection of MSBuild project files to analyze.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;path&lt;/span&gt;: defines a path in which to look for MSBuild project files.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;rootPath&lt;/span&gt;: the root path in which to recursively look for build files.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;searchPattern&lt;/span&gt; (optional): the search string to match against the names of files to include in the given root path. For example: &lt;span class="codeInline"&gt;searchPattern=&amp;quot;*.csproj&amp;quot;&lt;/span&gt; would only look for files with the &amp;quot;csproj&amp;quot; extension, meaning that only C# project files are analyzed. By default, the search pattern is &lt;span class="codeInline"&gt;&amp;quot;*.*proj&amp;quot;&lt;/span&gt; to find all files that end in &amp;quot;proj&amp;quot;, with the following file extensions excluded because they are not MSBuild project files: .proj, .vddproj, .vdproj, .csdproj.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;excludedFiles&lt;/span&gt; (optional): see above; when defined here, only applies to this &lt;span class="codeInline"&gt;path&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class="codeInline"&gt;rules&lt;/span&gt;: defines 1 or more rules to run on the MSBuild project files in this build group.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;rule&lt;/span&gt;: defines a rule to run on the MSBuild project files in this build group.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;name&lt;/span&gt;: the name of the rule; must be unique.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;type&lt;/span&gt;: the fully qualified type name of the rule class to use. The rules that are available out of the box and their configuration details are described below. For example: &lt;span class="codeInline"&gt;type=&amp;quot;JelleDruyts.BuildCop.Rules.BuildProperties.BuildPropertiesRule, JelleDruyts.BuildCop&amp;quot;&lt;/span&gt; would load the built-in &amp;quot;Build Properties&amp;quot; rule. If the type is omitted, no other configuration may be defined here but instead the shared rule with the given name is used from the &lt;span class="codeInline"&gt;sharedRules&lt;/span&gt; configuration node.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;enabled&lt;/span&gt; (optional): a value of &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot; that determines if the rule is enabled; this allows you to disable rules without deleting the configuration from the file.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;excludedFiles&lt;/span&gt; (optional): see above; when defined here, only applies to this &lt;span class="codeInline"&gt;rule&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;excludedOutputTypes&lt;/span&gt; (optional): a semicolon-separated list of output types for MSBuild project files to exclude from this rule; this allows you to exclude certain files based on their output type. The available output types are &amp;quot;Win&amp;quot; (for Console applications), &amp;quot;WinExe&amp;quot; (for Windows applications), &amp;quot;Library&amp;quot; (for dll's) and &amp;quot;Web&amp;quot; (for Web applications). For example: &lt;span class="codeInline"&gt;excludedOutputTypes=&amp;quot;Exe;WinExe;Web&amp;quot;&lt;/span&gt; would exclude the rule for Console applications, Windows applications and Web applications - basically only running the rule for Library projects (dll's). Additional output type mappings based on project type GUIDs can be defined in the &lt;span class="codeInline"&gt;outputTypeMappings&lt;/span&gt; configuration node.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Rule-specific configuration: inside the &lt;span class="codeInline"&gt;rule&lt;/span&gt;-node, a rule-specific XML node is often needed to define the configuration required for that particular rule. The rules that are available out of the box and their configuration details are described below. Unfortunately, since these configuration nodes depend on the specific rule type, no XSD or IntelliSense information is available for them.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example analyzes all MSBuild project files and verifies that certain build properties are always set (e.g. for debugging and error levels), that the output path is properly set for non-Web projects (note the &lt;span class="codeInline"&gt;excludedOutputTypes&lt;/span&gt;), and that all Library-type projects (dll's) have enabled an XML documentation file to be generated:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;buildGroup name=&amp;quot;Default&amp;quot;&amp;gt;
  &amp;lt;buildFiles&amp;gt;
    &amp;lt;paths&amp;gt;
      &amp;lt;path rootPath=&amp;quot;D:\Projects\Source&amp;quot; /&amp;gt;
    &amp;lt;/paths&amp;gt;
  &amp;lt;/buildFiles&amp;gt;
  &amp;lt;rules&amp;gt;
    &amp;lt;rule name=&amp;quot;Build Properties&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.BuildProperties.BuildPropertiesRule&amp;quot;&amp;gt;
      &amp;lt;buildProperties&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;DebugSymbols&amp;quot; value=&amp;quot;true&amp;quot; condition=&amp;quot;Debug&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;DebugType&amp;quot; value=&amp;quot;full&amp;quot; condition=&amp;quot;Debug&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;Optimize&amp;quot; value=&amp;quot;false&amp;quot; condition=&amp;quot;Debug&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;DefineConstants&amp;quot; value=&amp;quot;DEBUG;TRACE&amp;quot; condition=&amp;quot;Debug&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;DebugType&amp;quot; value=&amp;quot;pdbonly&amp;quot; condition=&amp;quot;Release&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;Optimize&amp;quot; value=&amp;quot;true&amp;quot; condition=&amp;quot;Release&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;DefineConstants&amp;quot; value=&amp;quot;TRACE&amp;quot; condition=&amp;quot;Release&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;ErrorReport&amp;quot; value=&amp;quot;prompt&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;TreatWarningsAsErrors&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;WarningLevel&amp;quot; value=&amp;quot;4&amp;quot; /&amp;gt;
      &amp;lt;/buildProperties&amp;gt;
    &amp;lt;/rule&amp;gt;
    &amp;lt;rule name=&amp;quot;Build Properties (Non-Web)&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.BuildProperties.BuildPropertiesRule&amp;quot;
          excludedOutputTypes=&amp;quot;Web&amp;quot;&amp;gt;
      &amp;lt;buildProperties&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;OutputPath&amp;quot; value=&amp;quot;bin\Debug\&amp;quot; condition=&amp;quot;Debug&amp;quot; /&amp;gt;
        &amp;lt;buildProperty name=&amp;quot;OutputPath&amp;quot; value=&amp;quot;bin\Release\&amp;quot; condition=&amp;quot;Release&amp;quot; /&amp;gt;
      &amp;lt;/buildProperties&amp;gt;
    &amp;lt;/rule&amp;gt;
    &amp;lt;rule name=&amp;quot;Documentation File&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.DocumentationFile.DocumentationFileRule&amp;quot;
          excludedOutputTypes=&amp;quot;Exe;WinExe;Web&amp;quot; /&amp;gt;
  &amp;lt;/rules&amp;gt;
&amp;lt;/buildGroup&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Shared Rules
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;The &lt;span class="codeInline"&gt;sharedRules&lt;/span&gt; configuration node contains 0 or more rules as defined above inside the &lt;span class="codeInline"&gt;rules&lt;/span&gt; node of a &lt;span class="codeInline"&gt;buildGroup&lt;/span&gt; definition. The rules defined here must be fully configured, i.e. have at least their &lt;span class="codeInline"&gt;type&lt;/span&gt; attribute and any required rule-specific configuration element set. Rules defined inside build groups can then just refer to these shared rules by defining only their name.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example defines a shared &amp;quot;Documentation File&amp;quot; rule that is used from inside a build group:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;buildCopConfiguration xmlns=&amp;quot;http://schemas.jelle.druyts.net/BuildCop&amp;quot;&amp;gt;
  &amp;lt;buildGroup name=&amp;quot;Default&amp;quot;&amp;gt;
    &amp;lt;buildFiles&amp;gt;
      &amp;lt;paths&amp;gt;
        &amp;lt;path rootPath=&amp;quot;D:\Projects\Source&amp;quot; /&amp;gt;
      &amp;lt;/paths&amp;gt;
    &amp;lt;/buildFiles&amp;gt;
    &amp;lt;rules&amp;gt;
      &amp;lt;rule name=&amp;quot;Documentation File&amp;quot;/&amp;gt;
    &amp;lt;/rules&amp;gt;
  &amp;lt;/buildGroup&amp;gt;
  &amp;lt;sharedRules&amp;gt;
    &amp;lt;rule name=&amp;quot;Documentation File&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Rules.DocumentationFile.DocumentationFileRule&amp;quot;
          excludedOutputTypes=&amp;quot;Exe;WinExe;Web&amp;quot; /&amp;gt;
  &amp;lt;/sharedRules&amp;gt;
&amp;lt;/buildCopConfiguration&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Formatters
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;The &lt;span class="codeInline"&gt;formatters&lt;/span&gt; configuration node has the following structure:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;formatters&amp;gt;
  &amp;lt;formatter name=&amp;quot;[...]&amp;quot; type=&amp;quot;[...]&amp;quot; minimumLogLevel=&amp;quot;[Information|Warning|Error|Exception]&amp;quot;&amp;gt;
    [...]
  &amp;lt;/formatter&amp;gt;
  &amp;lt;formatter ...&amp;gt;[...]&amp;lt;/formatter&amp;gt;
&amp;lt;/formatters&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;formatters&lt;/span&gt;: contains 0 or more &lt;span class="codeInline"&gt;formatter&lt;/span&gt; nodes.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;formatter&lt;/span&gt;: defines a formatter.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;name&lt;/span&gt;: the name of the formatter; must be unique.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;type&lt;/span&gt;: the fully qualified type name of the formatter class to use. The formatters that are available out of the box and their configuration details are described below. For example: &lt;span class="codeInline"&gt;type=&amp;quot;JelleDruyts.BuildCop.Formatters.Html.HtmlFormatter, JelleDruyts.BuildCop&amp;quot;&lt;/span&gt; would load the built-in HTML formatter.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;minimumLogLevel&lt;/span&gt; (optional): the minimum log level the formatter should display or output. By default, all entries are output.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Formatter-specific configuration: inside the &lt;span class="codeInline"&gt;formatter&lt;/span&gt;-node, a formatter-specific XML node is often needed to define the configuration required for that particular formatter. The formatters that are available out of the box and their configuration details are described below. Unfortunately, since these configuration nodes depend on the specific formatter type, no XSD or IntelliSense information is available for them.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example defines that entries of log level Warning or above should be written to the console output, and that all log entries should be written to a &amp;quot;BuildCopReport.html&amp;quot; HTML file, that should also be launched in the default web browser after the tool has completed.&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;formatters&amp;gt;
  &amp;lt;formatter name=&amp;quot;Console&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Formatters.Console.ConsoleFormatter&amp;quot; minimumLogLevel=&amp;quot;Warning&amp;quot; /&amp;gt;
  &amp;lt;formatter name=&amp;quot;Html&amp;quot; type=&amp;quot;JelleDruyts.BuildCop.Formatters.Html.HtmlFormatter&amp;quot; minimumLogLevel=&amp;quot;Information&amp;quot;&amp;gt;
    &amp;lt;output fileName=&amp;quot;BuildCopReport.html&amp;quot; launch=&amp;quot;true&amp;quot; /&amp;gt;
  &amp;lt;/formatter&amp;gt;
&amp;lt;/formatters&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;h2&gt;
Output Type Mappings
&lt;/h2&gt; &lt;br /&gt;&lt;h3&gt;
Definition
&lt;/h3&gt; &lt;br /&gt;As mentioned before, you can use the &lt;span class="codeInline"&gt;excludedOutputTypes&lt;/span&gt; attribute of a &lt;span class="codeInline"&gt;rule&lt;/span&gt; element to define output types for which the rule is not applicable. By default, BuildCop supports &amp;quot;Win&amp;quot; (for Console applications), &amp;quot;WinExe&amp;quot; (for Windows applications), &amp;quot;Library&amp;quot; (for dll's) and &amp;quot;Web&amp;quot; (for Web applications) as output types.&lt;br /&gt; &lt;br /&gt;If you have other project types that have no built-in equivalent, you can provide an output type mapping that maps a &amp;quot;friendly&amp;quot; alias to the project type GUID used by Visual Studio.&lt;br /&gt; &lt;br /&gt;The &lt;span class="codeInline"&gt;outputTypeMappings&lt;/span&gt; configuration node has the following structure:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;outputTypeMappings&amp;gt;
  &amp;lt;outputType alias=&amp;quot;[...]&amp;quot; projectTypeGuid=&amp;quot;[...]&amp;quot; /&amp;gt;
&amp;lt;/outputTypeMappings&amp;gt;
&lt;/pre&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;outputTypeMappings&lt;/span&gt;: contains 0 or more &lt;span class="codeInline"&gt;outputType&lt;/span&gt; nodes.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;outputType&lt;/span&gt;: defines an output type mapping.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;&lt;span class="codeInline"&gt;alias&lt;/span&gt;: the &amp;quot;friendly&amp;quot; name of the output type as used in the rule's &lt;span class="codeInline"&gt;excludedOutputTypes&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span class="codeInline"&gt;projectTypeGuid&lt;/span&gt;: the project type GUID used by Visual Studio to identify the project type.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Example
&lt;/h3&gt; &lt;br /&gt;The following example would be the equivalent of the built-in &amp;quot;Web&amp;quot; project type (but note that it is already predefined so there is no need to redefine it inside the configuration file):&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
&amp;lt;outputTypeMappings&amp;gt;
  &amp;lt;outputType alias=&amp;quot;Web&amp;quot; projectTypeGuid=&amp;quot;{349c5851-65df-11da-9384-00065b846f21}&amp;quot; /&amp;gt;
&amp;lt;/outputTypeMappings&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 21:01:14 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Configuration 20080205090114P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Home&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Introduction
&lt;/h1&gt; &lt;br /&gt;BuildCop is a tool that analyzes MSBuild project files (interactively or during e.g. a daily build) according to a customizable set of rules and generates reports - e.g. is strong naming enabled, are certain project properties set correctly, is XML documentation being generated, are assembly references correct, are naming conventions respected, ...&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Getting Started
&lt;/h1&gt; &lt;br /&gt;BuildCop consists of a command-line tool and an XML configuration file. When the application is run, it will read the configuration file to figure out which files to analyze, which rules to run, and which reports to generate.&lt;br /&gt; &lt;br /&gt;Basic usage looks as follows:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Define the configuration file&lt;/b&gt;: this XML file determines the actions that BuildCop takes; see below for the details of the configuration file. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Run the tool&lt;/b&gt;: this can be done interactively on the command-line or in an automated way, e.g. during a daily build. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Open the report(s)&lt;/b&gt;: the generated reports contain the results of the analysis and allow you to take appropriate actions to correct issues in MSBuild files; various reporting options (to the console, or to a XML, HTML or CSV file) are provided out of the box. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Create additional rules and/or formatters&lt;/b&gt;: BuildCop is created with extensibility in mind, so if you would like to extend BuildCop to run additional rules or provide additional reporting formats, it's quite easy to provide custom rules and formatters. &lt;/li&gt;
&lt;/ol&gt;In the future, an additional GUI application could be foreseen to run the rules interactively in a rich Windows application, and to edit configuration files, but those are currently not implemented yet. Of course, feel free to contact me if you want to contribute to the project!&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Documentation
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Configuration&amp;amp;referringTitle=Home"&gt;Configuration&lt;/a&gt;: Provides details on how to configure the application&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Rules&amp;amp;referringTitle=Home"&gt;Built-In Rules&lt;/a&gt;: Lists the built-in rules and explains how to configure them&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Formatters&amp;amp;referringTitle=Home"&gt;Built-In Formatters&lt;/a&gt;: Lists the built-in formatters and explains how to configure them&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Customization&amp;amp;referringTitle=Home"&gt;Customization&lt;/a&gt;: Provides details on how to add custom rules and formatters&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 20:43:57 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080205084357P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Home&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Introduction
&lt;/h1&gt; &lt;br /&gt;BuildCop is a tool that analyzes MSBuild project files (interactively or during e.g. a daily build) according to a customizable set of rules and generates reports - e.g. is strong naming enabled, are certain project properties set correctly, is XML documentation being generated, are assembly references correct, are naming conventions respected, ...&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Getting Started
&lt;/h1&gt; &lt;br /&gt;BuildCop consists of a command-line tool and an XML configuration file. When the application is run, it will read the configuration file to figure out which files to analyze, which rules to run, and which reports to generate.&lt;br /&gt; &lt;br /&gt;Basic usage looks as follows:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Define the configuration file&lt;/b&gt;: this XML file determines the actions that BuildCop takes; see below for the details of the configuration file. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Run the tool&lt;/b&gt;: this can be done interactively on the command-line or in an automated way, e.g. during a daily build. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Open the report(s)&lt;/b&gt;: the generated reports contain the results of the analysis and allow you to take appropriate actions to correct issues in MSBuild files; various reporting options (to the console, or to a XML, HTML or CSV file) are provided out of the box. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Create additional rules and/or formatters&lt;/b&gt;: BuildCop is created with extensibility in mind, so if you would like to extend BuildCop to run additional rules or provide additional reporting formats, it's quite easy to provide custom rules and formatters. &lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;In the future, an additional GUI application could be foreseen to run the rules interactively in a rich Windows application, and to edit configuration files, but those are currently not implemented yet. Of course, feel free to contact me if you want to contribute to the project!&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Documentation
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Configuration&amp;amp;referringTitle=Home"&gt;Configuration&lt;/a&gt;: Provides details on how to configure the application&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Rules&amp;amp;referringTitle=Home"&gt;Built-In Rules&lt;/a&gt;: Lists the built-in rules and explains how to configure them&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Built-In%20Formatters&amp;amp;referringTitle=Home"&gt;Built-In Formatters&lt;/a&gt;: Lists the built-in formatters and explains how to configure them&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/BuildCop/Wiki/View.aspx?title=Customization&amp;amp;referringTitle=Home"&gt;Customization&lt;/a&gt;: Provides details on how to add custom rules and formatters&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>jelled</author><pubDate>Tue, 05 Feb 2008 20:43:33 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080205084333P</guid></item></channel></rss>