BPAEngine Wiki & Documentation Rss Feedhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=HomeBPAEngine Wiki Rss DescriptionUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=9<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
[image:BPATool1.jpg]<br/>
</p>
<p>
[image:BPATool2.jpg]<br/>
</p>
<p>
<h3>Current Project Status</h3>
</p>
<p>
Version 1.0 has been released, and can be downloaded <a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine&ReleaseId=817"> here</a>.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the Best Practices Analyzer<br/>
</p>
<p>
<h3>Download the Final 1.0 Release</h3>
</p>
<p>
The final 1.0 release of the Microsoft Best Practices Analyzer, which includes an automatic updater for rules and plugins, is now available to download!&nbsp;&nbsp;<a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine&ReleaseId=817">Download it</a> and <a href="http://www.codeplex.com/Project/ListForums.aspx?ProjectName=BPAEngine">let us know what you think</a>!<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
In addition, the source code for the ASP.NET 2.0 configuration analyzer plug-in that was released with the Microsoft Best Practices Analyzer is available for download to help you get started writing your own plug-ins.&nbsp;&nbsp;<a href="http://www.codeplex.com/SourceControl/DownloadSourceCode.aspx?ProjectName=BPAEngine&amp;changeSetId=8612">Download it here</a>!<br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about the Microsoft Best Practices Analyzer</li>
<li><a href="http://www.codeplex.com/Project/ListForums.aspx?ProjectName=BPAEngine">Ask and answer questions on the Discussion boards</a></li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelWed, 18 Oct 2006 21:12:59 GMTUPDATED WIKI: Home 20061018091259PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=8<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
<h3>Current Project Status</h3>
</p>
<p>
Version 1.0 has been released, and can be downloaded <a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine&ReleaseId=817"> here</a>.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the Best Practices Analyzer<br/>
</p>
<p>
<h3>Download the Final 1.0 Release</h3>
</p>
<p>
The final 1.0 release of the Microsoft Best Practices Analyzer, which includes an automatic updater for rules and plugins, is now available to download!&nbsp;&nbsp;<a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine&ReleaseId=817">Download it</a> and <a href="http://www.codeplex.com/Project/ListForums.aspx?ProjectName=BPAEngine">let us know what you think</a>!<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
In addition, the source code for the ASP.NET 2.0 configuration analyzer plug-in that was released with the Microsoft Best Practices Analyzer is available for download to help you get started writing your own plug-ins.&nbsp;&nbsp;<a href="http://www.codeplex.com/SourceControl/DownloadSourceCode.aspx?ProjectName=BPAEngine&amp;changeSetId=8612">Download it here</a>!<br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelWed, 18 Oct 2006 21:00:13 GMTUPDATED WIKI: Home 20061018090013PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=7<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
<h3>Current Status</h3>
</p>
<p>
Version 1.0 has been released, and can be downloaded <a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine&ReleaseId=817"> here</a>.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the Best Practices Analyzer<br/>
</p>
<p>
<h3>Download the Final 1.0 Release</h3>
</p>
<p>
The final 1.0 release of the Microsoft Best Practices Analyzer, which includes an automatic updater for rules and plugins, is now available to download!&nbsp;&nbsp;<a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine&ReleaseId=817">Download it</a> and <a href="http://www.codeplex.com/Project/ListForums.aspx?ProjectName=BPAEngine">let us know what you think</a>!<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelWed, 18 Oct 2006 20:57:21 GMTUPDATED WIKI: Home 20061018085721PUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Plugin for the Best Practices Analyzer&version=4<p>
<h3>How to Write a Plug-in For the Best Practices Analyzer</h3>
<i>Version: Beta 1</i><br/>
<i>Date: September 11, 2006</i><br/>
</p>
<p>
<h4>Introduction</h4>
</p>
<p>
The best practices analyzer (BPA) code base supports a plug-in architecture that allows users to add a new analyzer as a plug-in using the existing broader framework for similar BPA tools.&nbsp;&nbsp;In this document we will walk you through the creation of a new ASP.NET analyzer plug-in.<br/>
</p>
<p>
<b>Note:</b>&nbsp;&nbsp;To create a plug-in for the Best Practices Analyzer (BPA), you must have a version of Visual Studio 2005 installed on your machine.&nbsp;&nbsp;If you do not have Visual Studio 2005, you can <a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/">download a free version of Visual C&#35; Express from Microsoft</a>.<br/>
</p>
<p>
<h4>How to add a new analyzer plug-in</h4>
<h6>Add a new analyzer project </h6>
First step creating a new project that references the correct assemblies from the BPA engine. You should create a new project in the language of your choice (we will be using C# in all example code in this document.)&nbsp;&nbsp;Once the project has been created, you'll need to add reference to the following framework projects that we will depend on:<br/>
</p>
<p>
Microsoft.VSPowerToys.BestPracticesAnalyzer.Common;<br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface;<br/>
System.Windows.Forms<br/>
</p>
<p>
<h6>Add a new analyzer class</h6>
</p>
<p>
Add a new class for your analyzer (YourNewAnalyzer) by inheriting from the Analyzer class in <br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface namespace:<br/>
</p>
<p>
class MyAnalyzer : Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface.Analyzer<br/>
</p>
<p>
<h6>Setup your new analyzer properties</h6>
</p>
<p>
In the constructor of your new Analyzer class set the configurationFileName (this XML file defines the rules and other parameters specific to your new analyzer.)&nbsp;&nbsp;The name of the file can be anything, just remember what it is. Specify the name of your tool by setting the following field names:<br/>
</p>
<p>
Tool<i>ShortName = YourNewAnalyzerLoc.Tool</i>FullName;<br/>
Tool<i>LongNameStart = YourNewAnalyzerLoc.Tool</i>LongNameStart;<br/>
Tool<i>LongNameEnd = YourNewAnalyzerLoc.Tool</i>LongNameEnd;<br/>
Label<i>WDesc = YourNewAnalyzerLoc.Label</i>WDesc;<br/>
Button<i>StartScan = YourNewAnalyzerLoc.Button</i>StartScan;<br/>
</p>
<p>
where "YourNewAnalyzerLoc" is a resource file where you will be storing the strings necessary for your plug-in.<br/>
</p>
<p>
<h6>Methods that need to be overridden.</h6>
</p>
<p>
Fill in the run time options for the scan by setting the scanInfo.Options properties.&nbsp;&nbsp;For example:<br/>
</p>
<p>
protected override void GetBPAScanInfo(BPAScanInfo scanInfo, string[] argsIn)<br/>
{<br/>
scanInfo.Options.Restrictions.DisableAll();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string option in scanOptions.RestrictionOptions)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanInfo.Options.Restrictions.Enable(option);<br/>
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanInfo.Options.Substitutions.Clear();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int s = 0; s &lt; scanOptions.Substitutions.Count; s++)<br/>
scanInfo.Options.Substitutions.Add(scanOptions.Substitutions.GetKey(s), scanOptions.Substitutions.GetByIndex(s));<br/>
}<br/>
</p>
<p>
public override void InitializeAnalyzerCustomizations()<br/>
{<br/>
customizations = new BPACustomizations("BPA", new BPACustomizations.GetBPAScanInfoCallback(GetBPAScanInfo));<br/>
customizations.RegistrySettings = new BPARegistrySettings();<br/>
…..<br/>
scanOptions = new ScanOptions(this);<br/>
…..<br/>
}<br/>
</p>
<p>
Then, implement any additional configuration necessary:<br/>
</p>
<p>
protected override void ProcessConfiguration(Document doc)<br/>
{<br/>
if (scanOptions != null &amp;&amp; mainGUI != null)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanOptions.Initialize(mainGUI);<br/>
}<br/>
</p>
<p>
public override string ToString()<br/>
{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return LongNameStart + " " + LongNameEnd;<br/>
}<br/>
<br/>
</p>
joemorelMon, 16 Oct 2006 21:02:34 GMTUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzer 20061016090234PUPDATED WIKI: How to Write a Rule for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Rule for the Best Practices Analyzer&version=3<p>
<h3>How to Add a Rule to a Best Practice Analyzer Rules File</h3>
<i>Version: 1.0</i><br/>
<i>Date: October 20, 2006</i><br/>
</p>
<p>
<h4>Introduction</h4>
The Microsoft Best Practice Analyzer Engine (MSBPA) is a general-purpose framework that enables the programmatic scanning of particular values inside of objects (e.g., the Windows Registry, XML Files, etc.) and evaluates those values against predefined rules.&nbsp;&nbsp;If a given rule is evaluated as “true”, engine will display a warning and text as defined in the rules file, notifying the user of the violation of that particular rule.<br/>
The one of the biggest strengths of the MSBPA is the ability to quickly and easily add additional rules to a given rule document.&nbsp;&nbsp;A rule is described in a simple XML file that can be located in the “\plugins” directory under the BPA engine directory.&nbsp;&nbsp;The name of the file will be in the format “&lt;name of analysis plugin&gt;.config.xml”.&nbsp;&nbsp;In the document below, the process for adding a new rule to a preexisting rules document will be described.<br/>
</p>
<p>
<h4>Understanding the Rules File Structure</h4>
Before we start writing a new rule, it is useful to familiarize yourself with the structure of an XML rules file.&nbsp;&nbsp;To view an example rules file, please download and install the Best Practices Analyzer tool, and open the AspDotNetAnalyzer.config.xml file, which will be found in the \plugins folder of the main installation directory for the BPA tool (usually %Program Files%\Power Toys for Visual Studio\Best Practices Analyzer\)<br/>
</p>
<p>
<h4>Configuration</h4>
The first section in the XML that you will encounter is the configuration section.&nbsp;&nbsp;In the configuration section, the main properties about the rules file are defined, such as what kinds of files or data the analyzer needs to be able to read, the different restrictions that will be available in the UI, and the definition of all of the inputs that the user must submit to run a scan.&nbsp;&nbsp;For the purpose of just adding a new rule, it is unlikely that you will need to make any changes to this section.<br/>
</p>
<p>
<h4>Substitution Rules – What Property are you Trying to Read?</h4>
Below the configuration section, a list of substitutions can be defined.&nbsp;&nbsp;The easiest way to think of a substitution is like a variable—you’re defining a shorter, convenient name for something so you can reference it later.&nbsp;&nbsp;Below is an example of a substitution for a given node in an XML document:<br/>
</p>
<p>
&lt;Setting Key1="XmlProp" Key2="configuration/system.web/pages/@autoEventWireup" Substitution="auto" &gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Rule Name="sWebConfigAutoEventWireup" Query="$." /&gt;<br/>
&lt;/Setting&gt;<br/>
</p>
<p>
Let’s step through the elements in the substitution above step-by-step.&nbsp;&nbsp;A “Setting” node shows that you want to define a substitution.&nbsp;&nbsp;“Key1” and “Key2” elements’ meanings are defined by the object processor associated with the parent “object” of the substitutions.&nbsp;&nbsp;There are several different object processors, but quite likely the easiest way to determine how to add a new substitution is to look at the rules around it and emulate their style.&nbsp;&nbsp;The “substitution” element defines the name of your substitution—basically, how do you want to reference this setting later on in the rules file?&nbsp;&nbsp;Finally, the “Rule Name” defines both a name for the substitution rule (all substitution rule names must start with a lower-case “s”) and an XPath “query” that will be evaluated against the data defined earlier in the substitution.&nbsp;&nbsp;In the example above, the query “$.” will return the value of the property in the XML at the path “configuration/system.web/pages/@autoEventWireup”.<br/>
</p>
<p>
<h4>Rules – What Value Should Trigger a Warning?</h4>
Now that we have defined a substitution, we need to create an actual BPA rule that will trigger when a scan occurs.&nbsp;&nbsp;To do this, we need to define another rule.&nbsp;&nbsp;Once again, the best way to add an additional rule to the rules document is to emulate a preexisting rule that exists to evaluate a similar element.&nbsp;&nbsp;Below is a rule that uses the substitution defined above:<br/>
</p>
<p>
&lt;Rule Name="fWebConfigAutoEventWireup" Query="matches('true',lower-case('%auto%'))" Error="Warning" Title="Auto Event Wireup is enabled" Text="It is suggested that Auto Event Wireup be disabled to enhance performance and increase security."/&gt;<br/>
</p>
<p>
The rule name corresponds with the substitution rule above, but instead of an “s” rule, you can see that we are defining an “f” rule.&nbsp;&nbsp;The most important part of a rule is the query.&nbsp;&nbsp;The query is an XPath expression.&nbsp;&nbsp;Whenever the evaluation of the query returns a Boolean value of “true”, the rule will be triggered.&nbsp;&nbsp;The “error” property defines the severity of your rule—it can be an “error”, a “warning”, or a “best practice”.&nbsp;&nbsp;The “title” is the heading that will be displayed in the error message in the BPA tool, along with the “text” that describes what the error is and why the rule was triggered.<br/>
</p>
<p>
<h4>Save and Contribute!</h4>
Once you have made your changes, go ahead and save the XML rules file, run the BPA tool, and see if your changes worked.&nbsp;&nbsp;It is suggested that you save the original XML rules file in a safe location first, in case you need to revert to it in the future.&nbsp;&nbsp;If your rule isn’t working, the first thing to check is to go back into the XML that you wrote and study both the form (make sure you have all of your carrots and quotation marks closed) and the XPath function that you are using.&nbsp;&nbsp;Does it evaluate to true?&nbsp;&nbsp;If not, you shouldn’t see the rule.<br/>
If you successfully made the change, and you think that your rule is a good one, share it back to the community and have everybody check out and benefit from your work.&nbsp;&nbsp;Currently, while the application is in beta, the best place to share your new rules is on the CodePlex discussions for the Best Practices Analyzer (just click on the Discussions tab above and go to the "New Rule Suggestions" discussion board.)<br/>
</p>
<p>
<h4>More Resources</h4>
Want to know more?&nbsp;&nbsp;Read up on these more advanced documents, which will give you more detailed guidance on writing rules for the Best Practices Analyzer:<br/>
</p>
<p>
<a href="http://www.codeplex.com/Project/FileDownload.aspx?ProjectName=BPAEngine&amp;DownloadId=2153">BPA Rules XML Schema and Reference Help File</a><br/>
<a href="http://www.codeplex.com/Project/FileDownload.aspx?ProjectName=BPAEngine&amp;DownloadId=2152">BPA Advanced Rules Tutorial</a><br/>
<br/>
</p>
joemorelMon, 16 Oct 2006 18:37:27 GMTUPDATED WIKI: How to Write a Rule for the Best Practices Analyzer 20061016063727PUPDATED WIKI: TestDocshttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs&version=2<p>
Placeholder page for files.<br/>
<br/>
</p>
joemorelFri, 13 Oct 2006 18:30:47 GMTUPDATED WIKI: TestDocs 20061013063047PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=6<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
The BPA tool is currently in public beta.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the Best Practices Analyzer<br/>
</p>
<p>
<h3>Download the Preview Release</h3>
</p>
<p>
The preview release of the Best Practices Analyzer, which includes an automatic updater for rules and plugins, is now available!&nbsp;&nbsp;<a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine">Download it</a> and <a href="http://www.codeplex.com/Project/ListForums.aspx?ProjectName=BPAEngine">let us know what you think</a>!<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelTue, 19 Sep 2006 20:07:47 GMTUPDATED WIKI: Home 20060919080747PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=5<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
The BPA tool is currently in public beta.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the TFS Admin Tool<br/>
</p>
<p>
<h3>Download the Preview Release</h3>
</p>
<p>
The preview release of the Best Practices Analyzer, which includes an automatic updater for rules and plugins, is now available!&nbsp;&nbsp;<a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BPAEngine">Download it</a> and <a href="http://www.codeplex.com/Project/ListForums.aspx?ProjectName=BPAEngine">let us know what you think</a>!<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelTue, 19 Sep 2006 18:54:09 GMTUPDATED WIKI: Home 20060919065409PUPDATED WIKI: TestDocshttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs&version=1<p>
Placeholder page for files.<br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 21:30:26 GMTUPDATED WIKI: TestDocs 20060911093026PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=4<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
The BPA tool is currently in public beta.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the TFS Admin Tool<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 21:29:38 GMTUPDATED WIKI: Home 20060911092938PUPDATED WIKI: How to Write a Rule for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Rule for the Best Practices Analyzer&version=2<p>
<h3>How to Add a Rule to a Best Practice Analyzer Rules File</h3>
<i>Version: Beta 1</i><br/>
<i>Date: September 11, 2006</i><br/>
</p>
<p>
<h4>Introduction</h4>
The Microsoft Best Practice Analyzer Engine (MSBPA) is a general-purpose framework that enables the programmatic scanning of particular values inside of objects (e.g., the Windows Registry, XML Files, etc.) and evaluates those values against predefined rules.&nbsp;&nbsp;If a given rule is evaluated as “true”, engine will display a warning and text as defined in the rules file, notifying the user of the violation of that particular rule.<br/>
The one of the biggest strengths of the MSBPA is the ability to quickly and easily add additional rules to a given rule document.&nbsp;&nbsp;A rule is described in a simple XML file that can be located in the “\plugins” directory under the BPA engine directory.&nbsp;&nbsp;The name of the file will be in the format “&lt;name of analysis plugin&gt;.config.xml”.&nbsp;&nbsp;In the document below, the process for adding a new rule to a preexisting rules document will be described.<br/>
</p>
<p>
<h4>Understanding the Rules File Structure</h4>
Before we start writing a new rule, it is useful to familiarize yourself with the structure of an XML rules file.&nbsp;&nbsp;To view an example rules file, please download and install the Best Practices Analyzer tool, and open the AspDotNetAnalyzer.config.xml file, which will be found in the \plugins folder of the main installation directory for the BPA tool (usually %Program Files%\Power Toys for Visual Studio\Best Practices Analyzer\)<br/>
</p>
<p>
<h4>Configuration</h4>
The first section in the XML that you will encounter is the configuration section.&nbsp;&nbsp;In the configuration section, the main properties about the rules file are defined, such as what kinds of files or data the analyzer needs to be able to read, the different restrictions that will be available in the UI, and the definition of all of the inputs that the user must submit to run a scan.&nbsp;&nbsp;For the purpose of just adding a new rule, it is unlikely that you will need to make any changes to this section.<br/>
</p>
<p>
<h4>Substitution Rules – What Property are you Trying to Read?</h4>
Below the configuration section, a list of substitutions can be defined.&nbsp;&nbsp;The easiest way to think of a substitution is like a variable—you’re defining a shorter, convenient name for something so you can reference it later.&nbsp;&nbsp;Below is an example of a substitution for a given node in an XML document:<br/>
</p>
<p>
&lt;Setting Key1="XmlProp" Key2="configuration/system.web/pages/@autoEventWireup" Substitution="auto" &gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Rule Name="sWebConfigAutoEventWireup" Query="$." /&gt;<br/>
&lt;/Setting&gt;<br/>
</p>
<p>
Let’s step through the elements in the substitution above step-by-step.&nbsp;&nbsp;A “Setting” node shows that you want to define a substitution.&nbsp;&nbsp;“Key1” and “Key2” elements’ meanings are defined by the object processor associated with the parent “object” of the substitutions.&nbsp;&nbsp;There are several different object processors, but quite likely the easiest way to determine how to add a new substitution is to look at the rules around it and emulate their style.&nbsp;&nbsp;The “substitution” element defines the name of your substitution—basically, how do you want to reference this setting later on in the rules file?&nbsp;&nbsp;Finally, the “Rule Name” defines both a name for the substitution rule (all substitution rule names must start with a lower-case “s”) and an XPath “query” that will be evaluated against the data defined earlier in the substitution.&nbsp;&nbsp;In the example above, the query “$.” will return the value of the property in the XML at the path “configuration/system.web/pages/@autoEventWireup”.<br/>
</p>
<p>
<h4>Rules – What Value Should Trigger a Warning?</h4>
Now that we have defined a substitution, we need to create an actual BPA rule that will trigger when a scan occurs.&nbsp;&nbsp;To do this, we need to define another rule.&nbsp;&nbsp;Once again, the best way to add an additional rule to the rules document is to emulate a preexisting rule that exists to evaluate a similar element.&nbsp;&nbsp;Below is a rule that uses the substitution defined above:<br/>
</p>
<p>
&lt;Rule Name="fWebConfigAutoEventWireup" Query="matches('true',lower-case('%auto%'))" Error="Warning" Title="Auto Event Wireup is enabled" Text="It is suggested that Auto Event Wireup be disabled to enhance performance and increase security."/&gt;<br/>
</p>
<p>
The rule name corresponds with the substitution rule above, but instead of an “s” rule, you can see that we are defining an “f” rule.&nbsp;&nbsp;The most important part of a rule is the query.&nbsp;&nbsp;The query is an XPath expression.&nbsp;&nbsp;Whenever the evaluation of the query returns a Boolean value of “true”, the rule will be triggered.&nbsp;&nbsp;The “error” property defines the severity of your rule—it can be an “error”, a “warning”, or a “best practice”.&nbsp;&nbsp;The “title” is the heading that will be displayed in the error message in the BPA tool, along with the “text” that describes what the error is and why the rule was triggered.<br/>
</p>
<p>
<h4>Save and Contribute!</h4>
Once you have made your changes, go ahead and save the XML rules file, run the BPA tool, and see if your changes worked.&nbsp;&nbsp;It is suggested that you save the original XML rules file in a safe location first, in case you need to revert to it in the future.&nbsp;&nbsp;If your rule isn’t working, the first thing to check is to go back into the XML that you wrote and study both the form (make sure you have all of your carrots and quotation marks closed) and the XPath function that you are using.&nbsp;&nbsp;Does it evaluate to true?&nbsp;&nbsp;If not, you shouldn’t see the rule.<br/>
If you successfully made the change, and you think that your rule is a good one, share it back to the community and have everybody check out and benefit from your work.&nbsp;&nbsp;Currently, while the application is in beta, the best place to share your new rules is on the CodePlex discussions for the Best Practices Analyzer (just click on the Discussions tab above and go to the "New Rule Suggestions" discussion board.)<br/>
</p>
<p>
<h4>More Resources</h4>
Want to know more?&nbsp;&nbsp;Read up on these more advanced documents, which will give you more detailed guidance on writing rules for the Best Practices Analyzer:<br/>
</p>
<p>
<a href="http://www.codeplex.com/Project/FileDownload.aspx?ProjectName=BPAEngine&amp;DownloadId=2153">BPA Rules XML Schema and Reference Help File</a><br/>
<a href="http://www.codeplex.com/Project/FileDownload.aspx?ProjectName=BPAEngine&amp;DownloadId=2152">BPA Advanced Rules Tutorial</a><br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 21:04:54 GMTUPDATED WIKI: How to Write a Rule for the Best Practices Analyzer 20060911090454PUPDATED WIKI: How to Write a Rule for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Rule for the Best Practices Analyzer&version=1<p>
<h3>How to Add a Rule to a Best Practice Analyzer Rules File</h3>
<i>Version: Beta 1</i><br/>
<i>Date: September 11, 2006</i><br/>
</p>
<p>
!!!!Introduction<br/>
The Microsoft Best Practice Analyzer Engine (MSBPA) is a general-purpose framework that enables the programmatic scanning of particular values inside of <br/>
</p>
<p>
objects (e.g., the Windows Registry, XML Files, etc.) and evaluates those values against predefined rules.&nbsp;&nbsp;If a given rule is evaluated as “true”, engine <br/>
</p>
<p>
will display a warning and text as defined in the rules file, notifying the user of the violation of that particular rule.<br/>
The one of the biggest strengths of the MSBPA is the ability to quickly and easily add additional rules to a given rule document.&nbsp;&nbsp;A rule is described in a <br/>
</p>
<p>
simple XML file that can be located in the “\plugins” directory under the BPA engine directory.&nbsp;&nbsp;The name of the file will be in the format “&lt;name of <br/>
</p>
<p>
analysis plugin&gt;.config.xml”.&nbsp;&nbsp;In the document below, the process for adding a new rule to a preexisting rules document will be described.<br/>
</p>
<p>
!!!!Understanding the Rules File Structure<br/>
Before we start writing a new rule, it is useful to familiarize yourself with the structure of an XML rules file.&nbsp;&nbsp;To view an example rules file, please <br/>
</p>
<p>
download and install the Best Practices Analyzer tool, and open the AspDotNetAnalyzer.config.xml file, which will be found in the \plugins folder of the main <br/>
</p>
<p>
installation directory for the BPA tool (usually %Program Files%\Power Toys for Visual Studio\Best Practices Analyzer\)<br/>
</p>
<p>
!!!!Configuration<br/>
The first section in the XML that you will encounter is the configuration section.&nbsp;&nbsp;In the configuration section, the main properties about the rules file <br/>
</p>
<p>
are defined, such as what kinds of files or data the analyzer needs to be able to read, the different restrictions that will be available in the UI, and the <br/>
</p>
<p>
definition of all of the inputs that the user must submit to run a scan.&nbsp;&nbsp;For the purpose of just adding a new rule, it is unlikely that you will need to <br/>
</p>
<p>
make any changes to this section.<br/>
</p>
<p>
!!!!Substitution Rules – What Property are you Trying to Read?<br/>
Below the configuration section, a list of substitutions can be defined.&nbsp;&nbsp;The easiest way to think of a substitution is like a variable—you’re defining a <br/>
</p>
<p>
shorter, convenient name for something so you can reference it later.&nbsp;&nbsp;Below is an example of a substitution for a given node in an XML document:<br/>
</p>
<p>
&lt;Setting Key1="XmlProp" Key2="configuration/system.web/pages/@autoEventWireup" Substitution="auto" &gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Rule Name="sWebConfigAutoEventWireup" Query="$." /&gt;<br/>
&lt;/Setting&gt;<br/>
</p>
<p>
Let’s step through the elements in the substitution above step-by-step.&nbsp;&nbsp;A “Setting” node shows that you want to define a substitution.&nbsp;&nbsp;“Key1” and “Key2” <br/>
</p>
<p>
elements’ meanings are defined by the object processor associated with the parent “object” of the substitutions.&nbsp;&nbsp;There are several different object <br/>
</p>
<p>
processors, but quite likely the easiest way to determine how to add a new substitution is to look at the rules around it and emulate their style.&nbsp;&nbsp;The <br/>
</p>
<p>
“substitution” element defines the name of your substitution—basically, how do you want to reference this setting later on in the rules file?&nbsp;&nbsp;Finally, the <br/>
</p>
<p>
“Rule Name” defines both a name for the substitution rule (all substitution rule names must start with a lower-case “s”) and an XPath “query” that will be <br/>
</p>
<p>
evaluated against the data defined earlier in the substitution.&nbsp;&nbsp;In the example above, the query “$.” will return the value of the property in the XML at the <br/>
</p>
<p>
path “configuration/system.web/pages/@autoEventWireup”.<br/>
</p>
<p>
!!!!Rules – What Value Should Trigger a Warning?<br/>
Now that we have defined a substitution, we need to create an actual BPA rule that will trigger when a scan occurs.&nbsp;&nbsp;To do this, we need to define another <br/>
</p>
<p>
rule.&nbsp;&nbsp;Once again, the best way to add an additional rule to the rules document is to emulate a preexisting rule that exists to evaluate a similar element.&nbsp;&nbsp;<br/>
</p>
<p>
Below is a rule that uses the substitution defined above:<br/>
</p>
<p>
&lt;Rule Name="fWebConfigAutoEventWireup" Query="matches('true',lower-case('%auto%'))" Error="Warning" Title="Auto Event Wireup is enabled" Text="It is <br/>
</p>
<p>
suggested that Auto Event Wireup be disabled to enhance performance and increase security."/&gt;<br/>
</p>
<p>
The rule name corresponds with the substitution rule above, but instead of an “s” rule, you can see that we are defining an “f” rule.&nbsp;&nbsp;The most important <br/>
</p>
<p>
part of a rule is the query.&nbsp;&nbsp;The query is an XPath expression.&nbsp;&nbsp;Whenever the evaluation of the query returns a Boolean value of “true”, the rule will be <br/>
</p>
<p>
triggered.&nbsp;&nbsp;The “error” property defines the severity of your rule—it can be an “error”, a “warning”, or a “best practice”.&nbsp;&nbsp;The “title” is the heading that <br/>
</p>
<p>
will be displayed in the error message in the BPA tool, along with the “text” that describes what the error is and why the rule was triggered.<br/>
</p>
<p>
!!!!Save and Contribute!<br/>
Once you have made your changes, go ahead and save the XML rules file, run the BPA tool, and see if your changes worked.&nbsp;&nbsp;It is suggested that you save the <br/>
</p>
<p>
original XML rules file in a safe location first, in case you need to revert to it in the future.&nbsp;&nbsp;If your rule isn’t working, the first thing to check is to <br/>
</p>
<p>
go back into the XML that you wrote and study both the form (make sure you have all of your carrots and quotation marks closed) and the XPath function that <br/>
</p>
<p>
you are using.&nbsp;&nbsp;Does it evaluate to true?&nbsp;&nbsp;If not, you shouldn’t see the rule.<br/>
If you successfully made the change, and you think that your rule is a good one, share it back to the community and have everybody check out and benefit from <br/>
</p>
<p>
your work.&nbsp;&nbsp;Currently, while the application is in beta, the best place to share your new rules is on the CodePlex discussions for the Best Practices <br/>
</p>
<p>
Analyzer (just click on the Discussions tab above and go to the "New Rule Suggestions" discussion board.)<br/>
</p>
<p>
!!!!More Resources<br/>
Want to know more?&nbsp;&nbsp;Read up on these more advanced documents, which will give you more detailed guidance on writing rules for the Best Practices Analyzer:<br/>
</p>
<p>
<a href="http://www.microsoft.com">BPA Rules XML Schema and Reference Help File</a><br/>
<a href="http://www.microsoft.com">BPA Advanced Rules Tutorial</a><br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 21:03:09 GMTUPDATED WIKI: How to Write a Rule for the Best Practices Analyzer 20060911090309PUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Plugin for the Best Practices Analyzer&version=3<p>
<h3>How to Write a Plug-in For the Best Practices Analyzer</h3>
<i>Version: Beta 1</i><br/>
<i>Date: September 11, 2006</i><br/>
</p>
<p>
<h4>Introduction</h4>
</p>
<p>
The best practices analyzer (BPA) code base supports a plug-in architecture that allows users to add a new analyzer as a plug-in using the existing broader framework for similar BPA tools.&nbsp;&nbsp;In this document we will walk you through the creation of a new ASP.NET analyzer plug-in.<br/>
</p>
<p>
<b>Note:</b>&nbsp;&nbsp;To create a plug-in for the Best Practices Analyzer (BPA), you must have a version of Visual Studio 2005 installed on your machine.&nbsp;&nbsp;If you do not have Visual Studio 2005, you can <a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/">download a free version of Visual C&#35; Express from Microsoft</a>.<br/>
</p>
<p>
<h4>How to add a new analyzer plug-in</h4>
<h6>Add a new analyzer project </h6>
First step creating a new project that references the correct assemblies from the BPA engine. You should create a new project in the language of your choice (we will be using C# in all example code in this document.)&nbsp;&nbsp;Once the project has been create, you'll need to add reference to the following framework projects that we will depend on:<br/>
</p>
<p>
Microsoft.VSPowerToys.BestPracticesAnalyzer.Common;<br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface;<br/>
</p>
<p>
<h6>Add a new analyzer class</h6>
</p>
<p>
Add a new class for your analyzer (YourNewAnalyzer) by inheriting from the Analyzer class in <br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface namespace:<br/>
</p>
<p>
class MyAnalyzer : Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface.Analyzer<br/>
</p>
<p>
<h6>Setup your new analyzer properties</h6>
</p>
<p>
In the constructor of your new Analyzer class set the configurationFileName (this XML file defines the rules and other parameters specific to your new analyzer.)&nbsp;&nbsp;The name of the file can be anything, just remember what it is. Specify the name of your tool by setting the following field names:<br/>
</p>
<p>
Tool<i>ShortName = YourNewAnalyzerLoc.Tool</i>FullName;<br/>
Tool<i>LongNameStart = YourNewAnalyzerLoc.Tool</i>LongNameStart;<br/>
Tool<i>LongNameEnd = YourNewAnalyzerLoc.Tool</i>LongNameEnd;<br/>
Label<i>WDesc = YourNewAnalyzerLoc.Label</i>WDesc;<br/>
Button<i>StartScan = YourNewAnalyzerLoc.Button</i>StartScan;<br/>
</p>
<p>
where "YourNewAnalyzerLoc" is a resource file where you will be storing the strings necessary for your plug-in.<br/>
</p>
<p>
<h6>Methods that need to be overridden.</h6>
</p>
<p>
Fill in the run time options for the scan by setting the scanInfo.Options properties.&nbsp;&nbsp;For example:<br/>
</p>
<p>
protected override void GetBPAScanInfo(BPAScanInfo scanInfo, string[] argsIn)<br/>
{<br/>
scanInfo.Options.Restrictions.DisableAll();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string option in scanOptions.RestrictionOptions)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanInfo.Options.Restrictions.Enable(option);<br/>
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanInfo.Options.Substitutions.Clear();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int s = 0; s &lt; scanOptions.Substitutions.Count; s++)<br/>
scanInfo.Options.Substitutions.Add(scanOptions.Substitutions.GetKey(s), scanOptions.Substitutions.GetByIndex(s));<br/>
}<br/>
</p>
<p>
public override void InitializeAnalyzerCustomizations()<br/>
{<br/>
customizations = new BPACustomizations("BPA", new BPACustomizations.GetBPAScanInfoCallback(GetBPAScanInfo));<br/>
customizations.RegistrySettings = new BPARegistrySettings();<br/>
…..<br/>
scanOptions = new ScanOptions(this);<br/>
…..<br/>
}<br/>
</p>
<p>
Then, implement any additional configuration necessary:<br/>
</p>
<p>
protected override void ProcessConfiguration(Document doc)<br/>
{<br/>
if (scanOptions != null &amp;&amp; mainGUI != null)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanOptions.Initialize(mainGUI);<br/>
}<br/>
</p>
<p>
public override string ToString()<br/>
{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return LongNameStart + " " + LongNameEnd;<br/>
}<br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 20:42:04 GMTUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzer 20060911084204PUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Plugin for the Best Practices Analyzer&version=2<p>
<h3>How to Write a Plug-in For the Best Practices Analyzer</h3>
<i>Version: Beta 1</i><br/>
_Date: September 11, 2006<br/>
</p>
<p>
<h4>Introduction</h4>
</p>
<p>
The best practices analyzer (BPA) code base supports a plug-in architecture that allows users to add a new analyzer as a plug-in using the existing broader framework for similar BPA tools.&nbsp;&nbsp;In this document we will walk you through the creation of a new ASP.NET analyzer plug-in.<br/>
</p>
<p>
<b>Note:</b>&nbsp;&nbsp;To create a plug-in for the Best Practices Analyzer (BPA), you must have a version of Visual Studio 2005 installed on your machine.&nbsp;&nbsp;If you do not have Visual Studio 2005, you can <a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/">download a free version of Visual C&#35; Express from Microsoft</a>.<br/>
</p>
<p>
<h4>How to add a new analyzer plug-in</h4>
<h6>Add a new analyzer project </h6>
First step creating a new project that references the correct assemblies from the BPA engine. You should create a new project in the language of your choice (we will be using C# in all example code in this document.)&nbsp;&nbsp;Once the project has been create, you'll need to add reference to the following framework projects that we will depend on:<br/>
</p>
<p>
Microsoft.VSPowerToys.BestPracticesAnalyzer.Common;<br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface;<br/>
</p>
<p>
<h6>Add a new analyzer class</h6>
</p>
<p>
Add a new class for your analyzer (YourNewAnalyzer) by inheriting from the Analyzer class in <br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface namespace:<br/>
</p>
<p>
class MyAnalyzer : Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface.Analyzer<br/>
</p>
<p>
<h6>Setup your new analyzer properties</h6>
</p>
<p>
In the constructor of your new Analyzer class set the configurationFileName (this XML file defines the rules and other parameters specific to your new analyzer.)&nbsp;&nbsp;The name of the file can be anything, just remember what it is. Specify the name of your tool by setting the following field names:<br/>
</p>
<p>
Tool<i>ShortName = YourNewAnalyzerLoc.Tool</i>FullName;<br/>
Tool<i>LongNameStart = YourNewAnalyzerLoc.Tool</i>LongNameStart;<br/>
Tool<i>LongNameEnd = YourNewAnalyzerLoc.Tool</i>LongNameEnd;<br/>
Label<i>WDesc = YourNewAnalyzerLoc.Label</i>WDesc;<br/>
Button<i>StartScan = YourNewAnalyzerLoc.Button</i>StartScan;<br/>
</p>
<p>
where "YourNewAnalyzerLoc" is a resource file where you will be storing the strings necessary for your plug-in.<br/>
</p>
<p>
<h6>Methods that need to be overridden.</h6>
</p>
<p>
Fill in the run time options for the scan by setting the scanInfo.Options properties.&nbsp;&nbsp;For example:<br/>
</p>
<p>
protected override void GetBPAScanInfo(BPAScanInfo scanInfo, string[] argsIn)<br/>
{<br/>
scanInfo.Options.Restrictions.DisableAll();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string option in scanOptions.RestrictionOptions)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanInfo.Options.Restrictions.Enable(option);<br/>
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanInfo.Options.Substitutions.Clear();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int s = 0; s &lt; scanOptions.Substitutions.Count; s++)<br/>
scanInfo.Options.Substitutions.Add(scanOptions.Substitutions.GetKey(s), scanOptions.Substitutions.GetByIndex(s));<br/>
}<br/>
</p>
<p>
public override void InitializeAnalyzerCustomizations()<br/>
{<br/>
customizations = new BPACustomizations("BPA", new BPACustomizations.GetBPAScanInfoCallback(GetBPAScanInfo));<br/>
customizations.RegistrySettings = new BPARegistrySettings();<br/>
…..<br/>
scanOptions = new ScanOptions(this);<br/>
…..<br/>
}<br/>
</p>
<p>
Then, implement any additional configuration necessary:<br/>
</p>
<p>
protected override void ProcessConfiguration(Document doc)<br/>
{<br/>
if (scanOptions != null &amp;&amp; mainGUI != null)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanOptions.Initialize(mainGUI);<br/>
}<br/>
</p>
<p>
public override string ToString()<br/>
{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return LongNameStart + " " + LongNameEnd;<br/>
}<br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 20:41:44 GMTUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzer 20060911084144PUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzerhttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How to Write a Plugin for the Best Practices Analyzer&version=1<p>
<h3>How to Write a Plug-in For the Best Practices Analyzer</h3>
<i>Version: Beta 1</i><br/>
_Date: September 11, 2006<br/>
</p>
<p>
<ol><li>Introduction</li>
</ol></p>
<p>
The best practices analyzer (BPA) code base supports a plug-in architecture that allows users to add a new analyzer as a plug-in using the existing broader framework for similar BPA tools.&nbsp;&nbsp;In this document we will walk you through the creation of a new ASP.NET analyzer plug-in.<br/>
</p>
<p>
<b>Note:</b>&nbsp;&nbsp;To create a plug-in for the Best Practices Analyzer (BPA), you must have a version of Visual Studio 2005 installed on your machine.&nbsp;&nbsp;If you do not have Visual Studio 2005, you can <a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/">download a free version of Visual C&#35; Express from Microsoft</a>.<br/>
</p>
<p>
<ol><li>How to add a new analyzer plug-in</li>
<ol><li>Add a new analyzer project </li>
</ol></ol>First step creating a new project that references the correct assemblies from the BPA engine. You should create a new project in the language of your choice (we will be using C# in all example code in this document.)&nbsp;&nbsp;Once the project has been create, you'll need to add reference to the following framework projects that we will depend on:<br/>
</p>
<p>
Microsoft.VSPowerToys.BestPracticesAnalyzer.Common;<br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface;<br/>
</p>
<p>
<ol><ol><li>Add a new analyzer class</li>
</ol></ol></p>
<p>
Add a new class for your analyzer (YourNewAnalyzer) by inheriting from the Analyzer class in <br/>
Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface namespace:<br/>
</p>
<p>
class MyAnalyzer : Microsoft.VSPowerToys.BestPracticesAnalyzer.UserInterface.Analyzer<br/>
</p>
<p>
<ol><ol><li>Setup your new analyzer properties</li>
</ol></ol></p>
<p>
In the constructor of your new Analyzer class set the configurationFileName (this XML file defines the rules and other parameters specific to your new analyzer.)&nbsp;&nbsp;The name of the file can be anything, just remember what it is. Specify the name of your tool by setting the following field names:<br/>
</p>
<p>
Tool<i>ShortName = YourNewAnalyzerLoc.Tool</i>FullName;<br/>
Tool<i>LongNameStart = YourNewAnalyzerLoc.Tool</i>LongNameStart;<br/>
Tool<i>LongNameEnd = YourNewAnalyzerLoc.Tool</i>LongNameEnd;<br/>
Label<i>WDesc = YourNewAnalyzerLoc.Label</i>WDesc;<br/>
Button<i>StartScan = YourNewAnalyzerLoc.Button</i>StartScan;<br/>
</p>
<p>
where "YourNewAnalyzerLoc" is a resource file where you will be storing the strings necessary for your plug-in.<br/>
</p>
<p>
<ol><ol><li>Methods that need to be overridden.</li>
</ol></ol></p>
<p>
Fill in the run time options for the scan by setting the scanInfo.Options properties.&nbsp;&nbsp;For example:<br/>
</p>
<p>
protected override void GetBPAScanInfo(BPAScanInfo scanInfo, string[] argsIn)<br/>
{<br/>
scanInfo.Options.Restrictions.DisableAll();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string option in scanOptions.RestrictionOptions)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanInfo.Options.Restrictions.Enable(option);<br/>
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanInfo.Options.Substitutions.Clear();<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int s = 0; s &lt; scanOptions.Substitutions.Count; s++)<br/>
scanInfo.Options.Substitutions.Add(scanOptions.Substitutions.GetKey(s), scanOptions.Substitutions.GetByIndex(s));<br/>
}<br/>
</p>
<p>
public override void InitializeAnalyzerCustomizations()<br/>
{<br/>
customizations = new BPACustomizations("BPA", new BPACustomizations.GetBPAScanInfoCallback(GetBPAScanInfo));<br/>
customizations.RegistrySettings = new BPARegistrySettings();<br/>
…..<br/>
scanOptions = new ScanOptions(this);<br/>
…..<br/>
}<br/>
</p>
<p>
Then, implement any additional configuration necessary:<br/>
</p>
<p>
protected override void ProcessConfiguration(Document doc)<br/>
{<br/>
if (scanOptions != null &amp;&amp; mainGUI != null)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanOptions.Initialize(mainGUI);<br/>
}<br/>
</p>
<p>
public override string ToString()<br/>
{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return LongNameStart + " " + LongNameEnd;<br/>
}<br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 20:41:11 GMTUPDATED WIKI: How to Write a Plugin for the Best Practices Analyzer 20060911084111PCREATED WIKI: http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=joemorelMon, 11 Sep 2006 20:41:11 GMTCREATED WIKI: 20060911084111PUPDATED WIKI: Requirementshttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements&version=2<p>
<h3>Requirements to Run the Best Practices Analyzer</h3>
<i>Version: Beta 1</i><br/>
<i>Date: September 11, 2006</i><br/>
</p>
<p>
To run the Best Practices Analyzer, the following requirements must be fulfilled:<br/>
</p>
<p>
<ul><li>Windows XP or 2003 (Windows 2000 or Vista may work, but have not been tested)</li>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=0&amp;p=4&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%0a%09%09%09%09%09%2fdownloads%2fdetails.aspx%3fFamilyID%3d0856eacb-4362-4b0d-8edd-aab15c5e04f5%26displaylang%3den">Microsoft .NET Framework 2.0</a></li>
<li>Administrator privileges on your machine</li>
</ul></p>
<p>
To run the ASP.NET 2.0 configuration analyzer, you additionally will need access to:<br/>
</p>
<p>
<ul><li>Machine.config file of your server</li>
<li>System-wide web.config file of your server</li>
<li>Site-specific web.config file of your web application you wish to scan</li>
</ul><br/>
</p>
joemorelMon, 11 Sep 2006 20:18:11 GMTUPDATED WIKI: Requirements 20060911081811PUPDATED WIKI: Requirementshttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements&version=1<p>
<h3>Requirements to Run the Best Practices Analyzer</h3>
<i>Version: Beta 1</i><br/>
<i>Date: September 11, 2006</i><br/>
</p>
<p>
To run the Best Practices Analyzer, the following requirements must be fulfilled:<br/>
</p>
<p>
<ul><li>Windows XP or 2003 (Windows 2000 or Vista may work, but have not been tested)</li>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=0&amp;p=4&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%0a%09%09%09%09%09%2fdownloads%2fdetails.aspx%3fFamilyID%3d0856eacb-4362-4b0d-8edd-aab15c5e04f5%26displaylang%3den">Microsoft .NET Framework 2.0</a></li>
<li>Administrator privileges on your machine</li>
</ul></p>
<p>
To run the ASP.NET 2.0 configuration analyzer, you additionally will need access to:<br/>
</p>
<p>
<ul><li>Machine.config file of your server</li>
<li>System-wide web.config file of your server</li>
<li>Site-specific web.config file of your web application you wish to scan</li>
</ul><br/>
</p>
joemorelMon, 11 Sep 2006 20:12:23 GMTUPDATED WIKI: Requirements 20060911081223PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=3<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that extends the tool.<br/>
</p>
<p>
The BPA tool is currently in public beta.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the TFS Admin Tool<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the <a href="http://www.codeplex.com/Legal/terms.aspx">CodePlex TOU</a><br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 18:59:37 GMTUPDATED WIKI: Home 20060911065937PUPDATED WIKI: Homehttp://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Home&version=2<p>
<h3>Welcome to the Microsoft Best Practices Analyzer Home Page!</h3>
</p>
<p>
The Microsoft Best Practices Analyzer is an general-purpose engine that allows for a user to analyze settings in <br/>
</p>
<p>
their systems to quickly identify problematic or sub-optimal configurations.&nbsp;&nbsp;The Best Practices Analyzer (BPA) <br/>
</p>
<p>
uses a plug-in architecture that allows users to easily install and extend the functionality of the tool by <br/>
</p>
<p>
downloading a best practices analyzer "plug-in" and accompanying "rules" document.<br/>
</p>
<p>
The BPA tool comes preinstalled with an example plug-in for analyzes an ASP.Net 2.0 server and website's system.web <br/>
</p>
<p>
configuration settings for problematic configurations.&nbsp;&nbsp;The source code for this analyzer plugin will be avaiable <br/>
</p>
<p>
as a Shared Source project, and can serve as an example of how you could write your own best practices plug-in that <br/>
</p>
<p>
extends the tool.<br/>
</p>
<p>
The BPA tool is currently in public beta.<br/>
</p>
<p>
View the <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=Requirements">Requirements</a> for running the TFS Admin Tool<br/>
</p>
<p>
<h3>Join the Development Team</h3>
</p>
<p>
<b>Contributing to the Best Practices Analyzer</b><br/>
</p>
<p>
The best way to contribute to this community project is to contribute more rules for released analyzers (especially <br/>
</p>
<p>
ASP.Net 2.0 configuration rules), or to try your hand at writing a best practices plug-in of your own.&nbsp;&nbsp;Please <br/>
</p>
<p>
submit your suggestions for new rules in the Discussion boards for this project.<br/>
</p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Rule%20for%20the%20Best%20Practices%20Analyzer">How to Write a Rule for the Best Practices Analyzer</a><br/>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=How%20to%20Write%20a%20Plugin%20for%20the%20Best%20Practices%20Analyzer">How to Write a Plugin for the Best Practices Analyzer</a><br/>
</p>
<p>
Note that by posting your submission to the Issue Tracker, you agree to do so under the [url:CodePlex <br/>
</p>
<p>
TOU|http://www.codeplex.com/Legal/terms.aspx]<br/>
</p>
<p>
<b>Join the Community</b><br/>
</p>
<p>
There are numerous ways you can participate in the TFS Admin Tool community<br/>
</p>
<p>
<ul><li>Blog about Best Practices Analyzer</li>
<li>Ask and answer questions on the Discussion boards</li>
<li><a href="http://www.codeplex.com/WorkItem/List.aspx?ProjectName=BPAEngine">Submit issues or feature suggestions</a></li>
</ul></p>
<p>
<a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=BPAEngine&title=TestDocs">TestDocs</a><br/>
<br/>
</p>
joemorelMon, 11 Sep 2006 18:59:11 GMTUPDATED WIKI: Home 20060911065911P