<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeremy Kuhne's Blog : .NET</title><link>http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx</link><description>Tags: .NET</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Creating a SSCLI C# Template for Visual Studio</title><link>http://blogs.msdn.com/jeremykuhne/archive/2008/02/23/creating-a-sscli-c-template-for-visual-studio.aspx</link><pubDate>Sat, 23 Feb 2008 08:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7855077</guid><dc:creator>jkuhne</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/7855077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=7855077</wfw:commentRss><description>&lt;P&gt;In my last post (&lt;A class="" href="http://blogs.msdn.com/jeremykuhne/archive/2008/02/20/msbuild-your-sscli-c-projects.aspx" mce_href="http://blogs.msdn.com/jeremykuhne/archive/2008/02/20/msbuild-your-sscli-c-projects.aspx"&gt;MSBuild your SSCLI C# projects&lt;/A&gt;) I&amp;nbsp;demonstrated how to create an MSBuild targets file for the SSCLI (Rotor).&amp;nbsp;&amp;nbsp; In this post I'll show you how to make it easier to use Visual Studio to develop SSCLI C# projects.&lt;/P&gt;
&lt;P&gt;To build successfully in VS you need to do a few things, notably:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Override assembly resolution so the SSCLI assemblies are targeted (the &lt;A class="" href="http://blogs.msdn.com/jeremykuhne/archive/2008/02/20/msbuild-your-sscli-c-projects.aspx" mce_href="http://blogs.msdn.com/jeremykuhne/archive/2008/02/20/msbuild-your-sscli-c-projects.aspx"&gt;last post&lt;/A&gt; shows you how to do this)&lt;/LI&gt;
&lt;LI&gt;Change the startup action for the project to "Start external program" (in the Debug property page for the project)&lt;/LI&gt;
&lt;LI&gt;Enter&amp;nbsp;the path for clix.exe as the startup program&lt;/LI&gt;
&lt;LI&gt;Put the output binary for you application in as the "Command line arguments"&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;It's a little tedious to set all of this up by hand.&amp;nbsp; Thankfully it ends up it's pretty easy to make a &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/6db0hwky.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/6db0hwky.aspx"&gt;template &lt;/A&gt;to do most of the dirty work.&amp;nbsp;&amp;nbsp;With a small additional change to the targets file it makes it completely painless.&amp;nbsp;&amp;nbsp; (Well, with the one major caveat that you can't debug managed SSCLI code with VS.)&lt;/P&gt;
&lt;P&gt;The existing templates are in the VS folder under "Common7\IDE\ProjectTemplates".&amp;nbsp; Each of the templates are stored in&amp;nbsp;a zip file- perusing a few of these in addition to looking at the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/6db0hwky.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/6db0hwky.aspx"&gt;documentation&lt;/A&gt; will get you up to speed in no time.&amp;nbsp;&amp;nbsp;As such I'm not going to give a tutorial here, I'm just going to talk briefly about what I did to create my template and share it with you.&lt;/P&gt;
&lt;P&gt;I started with the "CSharp\Windows\1033\ConsoleApplication.zip" because I wanted the equivalent of that for SSCLI.&amp;nbsp; I had to make most&amp;nbsp;of the changes to the&amp;nbsp;.vstemplate file&amp;nbsp;and a few changes to the .csproj file to link in&amp;nbsp;my targets. &amp;nbsp;Here is what my .vstemplate file looks like:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;xml&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;version&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;"&lt;SPAN style="COLOR: blue"&gt;1.0&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;encoding&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;utf-8&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;?&amp;gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;VSTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Version&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;"&lt;SPAN style="COLOR: blue"&gt;3.0.0&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Project&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;http://schemas.microsoft.com/developer/vstemplate/2005&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;TemplateData&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;SSCLI Console Application&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Console Application for the SSCLI (Rotor) Framework&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;SSCLIConsole.ico&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;TemplateID&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;SSCLI.CSharp.ConsoleApplication&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;TemplateID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;ProjectType&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;CSharp&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProjectType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;RequiredFrameworkVersion&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;2.0&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;RequiredFrameworkVersion&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;MaxFrameworkVersion&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;2.0&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;MaxFrameworkVersion&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;CreateNewFolder&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;true&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;CreateNewFolder&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;DefaultName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;SSCLIConsoleApplication&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;DefaultName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;ProvideDefaultName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;true&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProvideDefaultName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;TemplateData&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;TemplateContent&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Project&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;File&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;"&lt;SPAN style="COLOR: blue"&gt;ConsoleApplication.csproj&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ReplaceParameters&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;ProjectItem&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;ReplaceParameters&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;TargetFileName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Properties\AssemblyInfo.cs&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;AssemblyInfo.cs&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProjectItem&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;ProjectItem&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;ReplaceParameters&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;OpenInEditor&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Program.cs&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProjectItem&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Project&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;TemplateContent&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;VSTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; LINE-HEIGHT: 115%"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Not too hard to wrap your head around.&amp;nbsp; In the .csproj I changed the import to &lt;B&gt;&lt;FONT size=2&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;Import Project="$(MSBuildToolsPath)\SSCLI.CSharp.targets" /&amp;gt;&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;Zipped up with a custom icon (had to try it) I dumped it in my "Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#" folder, created a few projects off the template to tweak it out and I was almost done.&lt;/P&gt;
&lt;P&gt;The other bit that I've already mentioned was setting the project properties to run "clix".&amp;nbsp; Figuring this bit out isn't&amp;nbsp;too terribly&amp;nbsp;straightforward.&amp;nbsp;&amp;nbsp;VS project settings that &lt;STRONG&gt;don't&lt;/STRONG&gt; go into the .csproj go into&amp;nbsp;a ".csproj.user" file that is created alongside your .csproj whenever you change the defaults.&amp;nbsp; Change the defaults to create said file&amp;nbsp;and you'll quickly discover what you need to set in your .targets file to establish your &lt;STRONG&gt;own&lt;/STRONG&gt; defaults.&amp;nbsp; (Note that these properties are listed in the Microsoft.Build.Commontypes.xsd, found in the MSBuild directory in your relevant framework directory.&amp;nbsp; Also note that it doesn't contain valid values for the VS properties.)&lt;/P&gt;
&lt;P&gt;Here is what I added to SSCLI.CSharp.targets (which should live in your MSBuild directory):&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;lt;!--&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; VS Specific Properties &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;PropertyGroup&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; Set these so VS runs the host exe &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;StartAction&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;Program&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;StartAction&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;StartProgram&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;$(SSCLI_FrameworkPath)\clix.exe&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;StartProgram&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;StartArguments&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;$(TargetFileName)&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;StartArguments&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt; Might as well turn this on as it is currently the only kind of debugging you can do in VS &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;EnableUnmanagedDebugging&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;true&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;EnableUnmanagedDebugging&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;PropertyGroup&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; LINE-HEIGHT: 115%"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;That's pretty much it.&amp;nbsp; Now you can relatively easily create SSCLI projects.&amp;nbsp;&amp;nbsp; You don't get managed debugging, as mentioned.&amp;nbsp; You &lt;STRONG&gt;do&lt;/STRONG&gt; get the rest of the development enviroment benefits however (intellisense, etc.).&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;The complete &lt;A class="" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504" mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504"&gt;SSCLI.CSharp.targets&lt;/A&gt; file can be found &lt;A class="" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504" mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504"&gt;here&lt;/A&gt;.&amp;nbsp; The template can be found &lt;A class="" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=505" mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=505"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7855077" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/SSCLI/default.aspx">SSCLI</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Rotor/default.aspx">Rotor</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/MSBuild/default.aspx">MSBuild</category></item><item><title>MSBuild your SSCLI C# projects</title><link>http://blogs.msdn.com/jeremykuhne/archive/2008/02/20/msbuild-your-sscli-c-projects.aspx</link><pubDate>Wed, 20 Feb 2008 09:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7812639</guid><dc:creator>jkuhne</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/7812639.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=7812639</wfw:commentRss><description>&lt;P&gt;[&amp;nbsp;Edit 22 Feb 2008:&amp;nbsp;The complete &lt;A class="" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504" mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504"&gt;SSCLI.CSharp.targets&lt;/A&gt; file can be found &lt;A class="" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504" mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ssclimsbuild&amp;amp;ReleaseId=504"&gt;here&lt;/A&gt;.&amp;nbsp;]&lt;/P&gt;
&lt;P&gt;In my last post I&amp;nbsp;got SSCLI compiling with the&amp;nbsp;2008 C++ compiler&amp;nbsp;(&lt;A class="" href="http://blogs.msdn.com/jeremykuhne/archive/2008/02/19/sscli-2-0-and-visual-studio-2008.aspx" target=_blank mce_href="http://blogs.msdn.com/jeremykuhne/archive/2008/02/19/sscli-2-0-and-visual-studio-2008.aspx"&gt;SSCLI 2.0 and Visual Studio 2008&lt;/A&gt;).&amp;nbsp; (A side note: since&amp;nbsp;it is clearly possible to build SSCLI with the compiler there is no reason you&amp;nbsp;shouldn't be able to&amp;nbsp;get a VS Solution up and running that would build the SSCLI- just a &lt;STRONG&gt;lot&lt;/STRONG&gt; of work.)&amp;nbsp; Having done that I thought it would be interesting to see how plausible actually working in VS with SSCLI projects would be.&lt;/P&gt;
&lt;P&gt;As a first step, it ends up that there is relatively little you have to do to get a&amp;nbsp;.csproj that will work with&amp;nbsp;SSCLI through MSBuild.&amp;nbsp; The key items are:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Set the Csc.exe path.&lt;/LI&gt;
&lt;LI&gt;Make sure the TargetFrameworkDirectory gets set to the SSCLI output directory.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The way to figure this&amp;nbsp;out is to work backwards from the compiler (csc.exe).&amp;nbsp; Look at what csc's arguments are and look for where arguments get generated for&amp;nbsp;it in the build targets.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Microsoft.CSharp.targets is the file to start looking in.&amp;nbsp;&amp;nbsp;It is included at the end of a .csproj so this is a pretty logical place to start looking.&amp;nbsp; Thankfully the file is short, so it is relatively easy to digest.&amp;nbsp; (The target files are in the Windows\Microsoft.Net\Framework\v0.0 directories.&amp;nbsp; I used 3.5 for this article- the last set of MSBuild targets before this version are in 2.0.50727.)&lt;/P&gt;
&lt;P&gt;The &amp;lt;Csc&amp;gt; task in Microsoft.CSharp.Targets has a "ToolPath" argument that takes $(CscToolPath).&amp;nbsp; There is #1!&amp;nbsp; Finding #2 begins with "References" which is set to @(ReferencePath).&amp;nbsp; You won't find&amp;nbsp;much in Microsoft.CSharp.Targets so you need to look to the included Microsoft.Common.Targets.&lt;/P&gt;
&lt;P&gt;You can figure out #2 by looking at the generation of @(ReferencePaths).&amp;nbsp; Doing a search will drop you in the ResolveAssemblyReferences target- it's in the comments as an [OUT] -- bingo.&amp;nbsp;&amp;nbsp;In&amp;nbsp;a csproj referenced .NET assemblies are listed under (logically)&amp;nbsp;&amp;lt;Reference&amp;gt; items.&amp;nbsp; These&amp;nbsp;are listed here as an [IN] in the comments - see the connection?&amp;nbsp; (Note: the quick way to look for usage of items is to search for '@(ItemName' -- don't use the closing parenthesis as you'll miss transforms.)&lt;/P&gt;
&lt;P&gt;In&amp;nbsp;this target&amp;nbsp;the simple "System" &amp;lt;Reference&amp;gt; is turned into a full @(ReferencePaths) item.&amp;nbsp; If you look at the &amp;lt;ResolveAssemblyReference&amp;gt; task within this target you'll see some promising parameters-- the most promising being SearchPaths="$(AssemblySearchPaths)".&amp;nbsp;&amp;nbsp; Look for the source of&amp;nbsp;$(AsemblySearchPaths) and you'll find a nice detailed comment&amp;nbsp; at the top of Common.Targets:&lt;/P&gt;
&lt;P class=CodeCxSpFirst style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&amp;lt;!--&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The SearchPaths property is set to find assemblies in the following order:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(1) Files from current project - indicated by {CandidateAssemblyFiles}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(2) $(ReferencePath) - the reference path property, which comes from the .USER file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(3) The hintpath from the referenced item itself, indicated by {HintPathFromItem}.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(4) The directory of MSBuild's "target" runtime from GetFrameworkPath.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The "target" runtime folder is the folder of the runtime that MSBuild is a part of.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(5) Registered assembly folders, indicated by {Registry:*,*,*}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(6) Legacy registered assembly folders, indicated by {AssemblyFolders}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(7) Look in the application's output folder (like bin\debug)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(8) Resolve to the GAC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(9) Treat the reference's Include as if it were a real file name.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;AssemblySearchPaths&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Condition&lt;/SPAN&gt;=" '$(AssemblySearchPaths)' == '' "&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{CandidateAssemblyFiles};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;$(ReferencePath);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{HintPathFromItem};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{TargetFrameworkDirectory};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{AssemblyFolders};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{GAC};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{RawFileName};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;$(OutDir)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpLast style="MARGIN: 0in 0in 12pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;AssemblySearchPaths&lt;/SPAN&gt;&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;{TargetFrameworkDirectory} is key here.&amp;nbsp; If you search for "TargetFrameworkDirectory" you'll find&amp;nbsp;the property shows up in the GetFrameworkPaths and GetReferenceAssemblyPaths&amp;nbsp;targets.&amp;nbsp; It is the one we want. &amp;nbsp;It gets replaced by $(TargetFrameworkDirectory) inside of the &amp;lt;ResolveAssemblyReference&amp;gt; task.&amp;nbsp; You can see this if you use Reflector to look at the task-- but you can probably make that leap without digging further.&lt;/P&gt;
&lt;P&gt;That gives us everything we need.&amp;nbsp; We know where all of our framework (SSCLI) assemblies are so we just need to override Common.targets' path building completely for this and inject our overrides into the regular targets.&amp;nbsp; You can do this by creating a &lt;STRONG&gt;new&lt;/STRONG&gt; target file that includes the Microsoft.CSharp.targets and use this new file &lt;STRONG&gt;instead&lt;/STRONG&gt; in your .csproj.&amp;nbsp;&amp;nbsp; Here's the answer:&lt;/P&gt;
&lt;P class=CodeCxSpFirst style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Project&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;InitialTargets&lt;/SPAN&gt;="SSCLI_InitialChecks" &lt;SPAN style="COLOR: red"&gt;xmlns&lt;/SPAN&gt;="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;SPAN style="COLOR: green"&gt; Put this first as this file contains overrides for the standard targets &lt;/SPAN&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Import&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Project&lt;/SPAN&gt;="Microsoft.CSharp.targets" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;PropertyGroup&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;SPAN style="COLOR: green"&gt; Assuming x86 debug build of the framework &lt;/SPAN&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;SSCLI_FrameworkPath&lt;/SPAN&gt;&amp;gt;$(ROTOR_DIR)\binaries.x86chk.rotor&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;SSCLI_FrameworkPath&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;CscToolPath&lt;/SPAN&gt;&amp;gt;$(SSCLI_FrameworkPath)&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;CscToolPath&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;TargetFrameworkDirectory&lt;/SPAN&gt;&amp;gt;$(SSCLI_FrameworkPath)&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;TargetFrameworkDirectory&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;SPAN style="COLOR: green"&gt; This one isn't supported by the sscli csc.exe &lt;/SPAN&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;ErrorReport&lt;/SPAN&gt;&amp;gt;&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;ErrorReport&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;PropertyGroup&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Target&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;="SSCLI_InitialChecks"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Error&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Condition&lt;/SPAN&gt;=" '$(ROTOR_DIR)' == '' "&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;="ROTOR_DIR is not set.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Please set an environment variable or property to the SSCLI directory.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Note that running 'env' in your SSCLI directory will set this."/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Error&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Condition&lt;/SPAN&gt;="!Exists('$(SSCLI_FrameworkPath)')"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;="SSCLI not found at expected path: '$(SSCLI_FrameworkPath)'&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Please build SSCLI if necessary." /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;Target&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Override Microsoft.Common.targets GetFrameworkPaths&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Target&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;="GetFrameworkPaths"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;DependsOnTargets&lt;/SPAN&gt;="$(GetFrameworkPathsDependsOn)" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Override Microsoft.Common.targets GetFrameworkPaths&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: #a31515"&gt;Target&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;="GetReferenceAssemblyPaths"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpMiddle style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;DependsOnTargets&lt;/SPAN&gt;="$(GetReferenceAssemblyPathsDependsOn)" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=CodeCxSpLast style="MARGIN: 0in 0in 12pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;&lt;FONT face=Consolas&gt;&amp;lt;/&lt;SPAN style="COLOR: #a31515"&gt;Project&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Dump&amp;nbsp;the xml above into a file (say, called "SSCLI.CSharp.targets"), drop it&amp;nbsp;in the same directory as the other target files, and (as already stated) include this file in your csproj instead of Microsoft.CSharp.targets.&lt;/P&gt;
&lt;P&gt;Now you can 'msbuild myNiftySscliApp.csproj'.&amp;nbsp;&amp;nbsp; And &lt;STRONG&gt;yes, &lt;/STRONG&gt;you can even open said csproj in Visual Studio and do some developin'.&amp;nbsp; (With the sad lack of managed debugging, but, hey-- you get Intellisense and all of the other goodies of the IDE.)&amp;nbsp; In my next posts I'll show you how to grease the wheels as much as you can with the IDE, starting with how to build and run easily, then moving on to making an SSCLI project template.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7812639" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/SSCLI/default.aspx">SSCLI</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Rotor/default.aspx">Rotor</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/MSBuild/default.aspx">MSBuild</category></item><item><title>Tools for Digging Deeper Into .NET</title><link>http://blogs.msdn.com/jeremykuhne/archive/2008/02/18/tools-for-digging-deeper-into-net.aspx</link><pubDate>Mon, 18 Feb 2008 06:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7764203</guid><dc:creator>jkuhne</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/7764203.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=7764203</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;As I’ve been preparing more things to talk about I realized that it would be beneficial to have a list of tools to refer back to in my posts.&amp;nbsp; So here you go--a list of tools I find essential to development in .NET.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The most important tool is Lutz Roeder’s &lt;STRONG&gt;.NET Reflector&lt;/STRONG&gt; (&lt;/FONT&gt;&lt;A href="http://www.aisto.com/roeder/dotnet/" mce_href="http://www.aisto.com/roeder/dotnet/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.aisto.com/roeder/dotnet/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This powerful tool makes analyzing .NET assemblies easy.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you aren’t using this already you need to start yesterday.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Some of the &lt;STRONG&gt;.NET sources&lt;/STRONG&gt; have been released and as such you can now directly debug into .NET. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;You do need VS 2008 (non-express) for this to work. &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx" mce_href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The &lt;STRONG&gt;Shared Source Common Language Infrastructure&lt;/STRONG&gt; (SSCLI) is your friend.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can learn an awful lot about the internals of the CLR by looking at this shared source version. &lt;/FONT&gt;&lt;A href="http://research.microsoft.com/sscli/" mce_href="http://research.microsoft.com/sscli/"&gt;&lt;FONT face=Calibri size=3&gt;http://research.microsoft.com/sscli/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;If you’re running up against a wall debugging in VS, &lt;STRONG&gt;WinDbg&lt;/STRONG&gt; can come to your rescue.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The Debugging Tools for Windows install quickly and are extremely powerful. &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx" mce_href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;&lt;FONT face=Calibri size=3&gt;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;STRONG&gt;SOS (Son of Strike)&lt;/STRONG&gt; is a .NET debugging extension that is usable in both VS and WinDbg.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This comes with the Framework so you’re already good to go.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;However, there is a cool extension to the extension available (SOSEX):&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.stevestechspot.com/SOSEXANewDebuggingExtensionForManagedCode.aspx" mce_href="http://www.stevestechspot.com/SOSEXANewDebuggingExtensionForManagedCode.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://www.stevestechspot.com/SOSEXANewDebuggingExtensionForManagedCode.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;STRONG&gt;Process Explorer&lt;/STRONG&gt; isn’t specifically .NET related, but it is an essential tool for figuring out what the heck has file/directory X open. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Use it to replace Task Manager and find happiness again. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx" mce_href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;STRONG&gt;.NET Profiler&lt;/STRONG&gt; lets you take a look at the pressure your application is putting on the managed heap.&amp;nbsp; It can be downloaded here: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&amp;amp;DisplayLang=en&lt;/A&gt;&amp;nbsp; Details on usage can be found here: &lt;A href="http://msdn2.microsoft.com/en-us/library/ms979205.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms979205.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7764203" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Generic Collections IV</title><link>http://blogs.msdn.com/jeremykuhne/archive/2005/07/24/generic-collections-iv.aspx</link><pubDate>Mon, 25 Jul 2005 00:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:442801</guid><dc:creator>jkuhne</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/442801.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=442801</wfw:commentRss><description>&lt;P&gt;Back again, and as promised...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT face=Arial size=4&gt;Subclassing Generic Collections&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The framework provides three basic&amp;nbsp;collections that are intended for derivation.&amp;nbsp; They are located in&amp;nbsp;&lt;CODE&gt;System.Collections.ObjectModel:&lt;/CODE&gt;&lt;/P&gt;&lt;CODE&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/library/ms132397(en-us,vs.80).aspx"&gt;Collection&amp;lt;T&amp;gt;&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/library/ms132438(en-us,vs.80).aspx"&gt;KeyedCollection&amp;lt;TKey, TItem&amp;gt;&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/library/ms132474(en-us,vs.80).aspx"&gt;ReadOnlyCollection&amp;lt;T&amp;gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/CODE&gt;
&lt;P&gt;They are all intended to provide base implementations of the following interfaces:&lt;/P&gt;&lt;CODE&gt;
&lt;UL&gt;
&lt;LI&gt;IList, IList&amp;lt;T&amp;gt;&lt;/LI&gt;
&lt;LI&gt;ICollection, ICollection&amp;lt;T&amp;gt;&lt;/LI&gt;
&lt;LI&gt;IEnumerable, IEnumerable&amp;lt;T&amp;gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/CODE&gt;
&lt;P&gt;&lt;CODE&gt;Collection&amp;lt;T&amp;gt;&lt;/CODE&gt;&amp;nbsp;stores it's data internally as &lt;CODE&gt;IList&amp;lt;T&amp;gt;&lt;/CODE&gt; (and also takes &lt;CODE&gt;IList&amp;lt;T&amp;gt;&lt;/CODE&gt; in one of the constructors).&amp;nbsp; The methods that actually modify the internal &lt;CODE&gt;IList&amp;lt;T&amp;gt;&lt;/CODE&gt; are virtual (and protected):&lt;/P&gt;&lt;CODE&gt;
&lt;UL&gt;
&lt;LI&gt;ClearItems()&lt;/LI&gt;
&lt;LI&gt;InsertItem()&lt;/LI&gt;
&lt;LI&gt;RemoveItem()&lt;/LI&gt;
&lt;LI&gt;SetItem()&lt;/LI&gt;&lt;/UL&gt;&lt;/CODE&gt;
&lt;P&gt;This class is intended for when you wish to handle all modifications done&amp;nbsp;to the collection.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;KeyedCollection&amp;lt;TKey, TItem&amp;gt;&lt;/CODE&gt; is an abstract class that derives from &lt;CODE&gt;Collection&amp;lt;T&amp;gt;&lt;/CODE&gt;.&amp;nbsp; It is meant to store values where the key is imbedded within the value.&amp;nbsp; It overrides the virtual methods from &lt;CODE&gt;Collection&amp;lt;T&amp;gt;&lt;/CODE&gt; and adds an abstract &lt;CODE&gt;GetKeyForItem().&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;ReadOnlyCollection&amp;lt;T&amp;gt;&lt;/CODE&gt;&amp;nbsp;supports the same interfaces as&amp;nbsp;&lt;CODE&gt;Collection&amp;lt;T&amp;gt;&lt;/CODE&gt; and also stores it's data as an &lt;CODE&gt;IList&amp;lt;T&amp;gt;.&amp;nbsp;&lt;/CODE&gt; There are no virtual methods and all of the iterface method&amp;nbsp;implementations that would normally modify the stored &lt;CODE&gt;IList&amp;lt;T&amp;gt;&lt;/CODE&gt; are private and throw if called.&amp;nbsp; (&lt;CODE&gt;Add()&lt;/CODE&gt;, &lt;CODE&gt;Clear()&lt;/CODE&gt;, &lt;CODE&gt;Remove()&lt;/CODE&gt;, etc.)&amp;nbsp; The only time the collection is modified is when it is constructed.&amp;nbsp; (i.e., you pass in an existing&amp;nbsp;&lt;CODE&gt;IList&amp;lt;T&amp;gt;&lt;/CODE&gt;)&lt;/P&gt;
&lt;P&gt;Now all of the other collections are not sealed, so you can derive from any of them.&amp;nbsp; They do not, however, have any methods marked as virtual (other than &lt;CODE&gt;GetObjectData()&lt;/CODE&gt; and &lt;CODE&gt;OnSerialization()&lt;/CODE&gt;).&amp;nbsp;&amp;nbsp;Why would you want to override them if you cannot change/intercept their behavior?&amp;nbsp; There are two reasons I've come up with so far:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Attaching utility methods.&lt;/LI&gt;
&lt;LI&gt;Readability.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Lets say you had a path with a number of points.&amp;nbsp; You could create a &lt;CODE&gt;List&amp;lt;Point&amp;gt;&lt;/CODE&gt; to represent said path.&amp;nbsp; This works, but say you want to create a list of your paths?&amp;nbsp; This turns into &lt;CODE&gt;List&amp;lt;List&amp;lt;Point&amp;gt;&amp;gt;.&amp;nbsp;&lt;/CODE&gt; Hmm.&amp;nbsp; Not nice.&amp;nbsp; In some cases you might even end up with &lt;CODE&gt;List&amp;lt;List&amp;lt;List&amp;lt;Point&amp;gt;&amp;gt;&amp;gt;&lt;/CODE&gt;.&amp;nbsp;&amp;nbsp; Ugh.&amp;nbsp; Since &lt;CODE&gt;List&amp;lt;Point&amp;gt;&lt;/CODE&gt; represents a specific object we could subclass &lt;CODE&gt;List&amp;lt;T&amp;gt;&lt;/CODE&gt; as follows:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;public class&lt;/FONT&gt; Path : &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;Point&amp;gt;
{
&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Need a constructor (and you'd likely want one that takes IEnumerable&amp;lt;T&amp;gt;):
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;INT&gt; Path() : &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;() {};
}&lt;/PRE&gt;
&lt;P&gt;Now we can say &lt;CODE&gt;List&amp;lt;Path&amp;gt;&lt;/CODE&gt;.&amp;nbsp; Much clearer- the sort of code you'd want to read/maintain.&amp;nbsp; In addition we can add useful utility methods to our new &lt;CODE&gt;Path&lt;/CODE&gt; class such as &lt;CODE&gt;IsClosed()&lt;/CODE&gt; or &lt;CODE&gt;IsValid()&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;That's about it for subclassing for now.&amp;nbsp; Lets take a look at something I hinted at earlier...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT face=Arial size=4&gt;System.Array&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Ends up that most of the useful methods in List&amp;lt;T&amp;gt; have static equivalents in System.Array.&amp;nbsp; Very useful.&amp;nbsp; Looking at a previous example we could have had:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; SumUpMeaningDemo()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;[] magicNumbers = { 7, 13, 1000, 42, 9 };
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; total = 0;

&lt;FONT color=#008000&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008080&gt;Array&lt;/FONT&gt;.ForEach&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;/FONT&gt;&lt;FONT color=#000000&gt;newNumbers, &lt;FONT color=#0000ff&gt;delegate&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; number) { total += number; });
&lt;/FONT&gt;&lt;/FONT&gt;}&lt;/PRE&gt;
&lt;P&gt;Since these are static methods you need to specifiy the type of the array and which array you're working on.&amp;nbsp; Other than that things work pretty much the same.&amp;nbsp; Happy days that the framework team added this support.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT face=Arial size=4&gt;Wait a Minute...&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Those that read ahead may have noticed that &lt;EM&gt;only&lt;/EM&gt; &lt;CODE&gt;List&amp;lt;T&amp;gt;&lt;/CODE&gt; and &lt;CODE&gt;Array&lt;/CODE&gt; have methods that utilize the system delegate types.&amp;nbsp; It's true.&amp;nbsp; Before you get too depressed about this, in a future post I'll discuss a project that gives you loads of functionality for all of the generic interface types (&lt;CODE&gt;IList&amp;lt;T&amp;gt;&lt;/CODE&gt;, &lt;CODE&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/CODE&gt;, &lt;CODE&gt;ICollection&amp;lt;T&amp;gt;&lt;/CODE&gt;).&amp;nbsp; It is an amazingly useful package called &lt;A href="http://www.wintellect.com/powercollections/"&gt;PowerCollections&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Till then...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=442801" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Managed+C_2B002B00_/default.aspx">Managed C++</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/General+Coding/default.aspx">General Coding</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Generic Collections III</title><link>http://blogs.msdn.com/jeremykuhne/archive/2005/07/24/generic-collections-iii.aspx</link><pubDate>Sun, 24 Jul 2005 05:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:442602</guid><dc:creator>jkuhne</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/442602.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=442602</wfw:commentRss><description>&lt;P&gt;So far I've gone over the basics of&amp;nbsp;generic collections and moved on to looking at&amp;nbsp;List&amp;lt;T&amp;gt; and Predicate&amp;lt;T&amp;gt;.&amp;nbsp; As mentioned yesterday, this post will deal with subclassing and the other System delegate types.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT face=Arial size=4&gt;The "Other" System.Delegates&amp;nbsp;&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We've already looked at &lt;CODE&gt;System.Predicate&amp;lt;T&amp;gt;.&amp;nbsp;&lt;/CODE&gt; Now we can turn our attention to the rest of the &lt;CODE&gt;System&lt;/CODE&gt; deleagte types:&lt;/P&gt;&lt;CODE&gt;
&lt;UL&gt;
&lt;LI&gt;Action&amp;lt;T&amp;gt;&lt;/LI&gt;
&lt;LI&gt;Comparison&amp;lt;T&amp;gt;&lt;/LI&gt;
&lt;LI&gt;Converter&amp;lt;TInput, TOutput&amp;gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/CODE&gt;
&lt;P&gt;As a reminder, here's the signature of &lt;CODE&gt;Predicate&amp;lt;T&amp;gt;&lt;/CODE&gt;:&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public delegate bool&lt;/FONT&gt; Predicate&amp;lt;T&amp;gt;(T obj);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;Now here's &lt;CODE&gt;Action&amp;lt;T&amp;gt;&lt;/CODE&gt;:&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public delegate void&lt;/FONT&gt; Action&amp;lt;T&amp;gt;(T obj);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;The only difference from &lt;CODE&gt;Predicate&amp;lt;T&amp;gt;&lt;/CODE&gt; is that &lt;CODE&gt;Action&amp;lt;T&amp;gt;&lt;/CODE&gt; returns a &lt;CODE&gt;void&lt;/CODE&gt; (nothing).&amp;nbsp; One way to think of this is "just do this".&amp;nbsp; The only place it's used (currently) is with &lt;CODE&gt;List&amp;lt;T&amp;gt;.ForEach().&amp;nbsp;&lt;/CODE&gt; (Well, one other place, but that comes later.)&amp;nbsp; For each?&amp;nbsp; Yes, it's pretty much the same.&amp;nbsp; Let's say you have a &lt;CODE&gt;List&amp;lt;int&amp;gt;&lt;/CODE&gt; that you want to sum up:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; SumUpMeaningDemo()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; magicNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[] { 7, 13, 1000, 42, 9 });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; total = 0;

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// The traditional way:
&amp;nbsp;&amp;nbsp;&amp;nbsp;// foreach (int number in magicNumbers)
&amp;nbsp;&amp;nbsp;&amp;nbsp;// {
&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;total += number;
&amp;nbsp;&amp;nbsp;&amp;nbsp;// }&lt;/FONT&gt;

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// A new way:&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;magicNumbers.ForEach(&lt;FONT color=#0000ff&gt;delegate&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; number){ total += number; });
}&lt;/PRE&gt;
&lt;P&gt;The syntax is a little different, but not much visible difference.&amp;nbsp; So what to use then?&amp;nbsp; What's the not-so-visible difference, if any?&amp;nbsp; Well this surprised me, but the &lt;CODE&gt;List&amp;lt;T&amp;gt;.ForEach()&lt;/CODE&gt; is &lt;EM&gt;twice&lt;/EM&gt; as fast (in this example, done a million times) as using &lt;CODE&gt;foreach&lt;/CODE&gt; on the &lt;CODE&gt;List&amp;lt;T&amp;gt;.&amp;nbsp;&lt;/CODE&gt; Why is that?&amp;nbsp; I'm not terribly great at IL (Intermediate Language)&amp;nbsp;so I can't give you the final word on this, but when you do a &lt;CODE&gt;foreach&lt;/CODE&gt; in code you actually end up with the equivalent of:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#008000&gt;// For reference, this is the code in Enumerator&amp;lt;int&amp;gt;.MoveNext():&lt;/FONT&gt;
&lt;FONT color=#0000ff&gt;public bool&lt;/FONT&gt;&lt;FONT color=#000000&gt; MoveNext(&lt;/FONT&gt;&lt;FONT color=#000000&gt;)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#000000&gt; (this.version != &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;FONT color=#000000&gt;.list._version)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&lt;/FONT&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// throw;&lt;/FONT&gt;
&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#000000&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;FONT color=#000000&gt;.index &amp;lt; this.list._size&lt;/FONT&gt;&lt;FONT color=#000000&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;FONT color=#000000&gt;.current = &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.list._items[&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.index];)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;FONT color=#000000&gt;.index++;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return true&lt;/FONT&gt;&lt;FONT color=#000000&gt;;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;FONT color=#000000&gt;.index = &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.list._size + 1;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;FONT color=#000000&gt;.current = &lt;FONT color=#0000ff&gt;default&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;);
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return false&lt;/FONT&gt;&lt;FONT color=#000000&gt;;
&lt;/FONT&gt;}
&lt;/FONT&gt;
public void&lt;/FONT&gt; SumUpMeaningDemo()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; magicNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[] { 7, 13, 1000, 42, 9 });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; total = 0;

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// What you write:
&amp;nbsp;&amp;nbsp;&amp;nbsp;// foreach (int number in magicNumbers)
&amp;nbsp;&amp;nbsp;&amp;nbsp;// {
&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;total += number;
&amp;nbsp;&amp;nbsp;&amp;nbsp;// }&lt;/FONT&gt;

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// What you get:&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt;.Enumerator enumerator = (&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt;.Enumerator)magicNumbers.&lt;STRONG&gt;GetEnumerator()&lt;/STRONG&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;try&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;while&lt;/FONT&gt;(enumerator.&lt;STRONG&gt;MoveNext()&lt;/STRONG&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; temp = enumerator.&lt;STRONG&gt;Current&lt;/STRONG&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;total += temp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;finally&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enumerator.&lt;STRONG&gt;Dispose()&lt;/STRONG&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/PRE&gt;
&lt;P&gt;There are four different calls in the above code that are marked in bold.&amp;nbsp; Here's the equivalent of what you end up with if you use the &lt;CODE&gt;List&amp;lt;T&amp;gt;.ForEach()&lt;/CODE&gt;:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;private void&lt;/FONT&gt; CompilerGeneratedAnonymousDelegateClass()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public int&lt;/FONT&gt; total;

&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private void&lt;/FONT&gt; CompilerGeneratedDelegateMethod(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; number)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.total += number;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}

&lt;FONT color=#008000&gt;// For reference, this is the code in List&amp;lt;int&amp;gt;&lt;T&gt;.ForEach():&lt;/FONT&gt;
&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; ForEach(&lt;FONT color=#008080&gt;Action &lt;/FONT&gt;action)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (action == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// throw;&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;._size; ++i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;action&lt;/STRONG&gt;(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;._items[i];)
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}

&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; SumUpMeaningDemo()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; magicNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[] { 7, 13, 1000, 42, 9 });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; total = 0;

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// What you write:
&amp;nbsp;&amp;nbsp;&amp;nbsp;// int total = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;// magicNumbers.ForEach(delegate(int number){ total += number; });&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;total += number;
&lt;/FONT&gt;
&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// What you get (plus the compiler generated class above):&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;CompilerGeneratedAnonymousDelegateClass tempClass = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; CompilerGeneratedAnonymousDelegateClass();
&amp;nbsp;&amp;nbsp;&amp;nbsp;tempClass.total = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;magicNumbers.&lt;STRONG&gt;ForEach&lt;/STRONG&gt;((&lt;FONT color=#008080&gt;Action&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Action&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(tempClass.CompilerGeneratedDelegateMethod));
}&lt;/PRE&gt;
&lt;P&gt;There are two calls (in bold, again) and two classes being constructed (the action delegate and the compiler generated class).&amp;nbsp; The easiest way to differentiate the two methods is to look at the size of the resulting code.&amp;nbsp; If you tear into the IL you'll see that in the loop for your &lt;CODE&gt;.ForEach&lt;/CODE&gt; you have 53 IL bytes and &lt;EM&gt;one&lt;/EM&gt; call.&amp;nbsp; The standard &lt;CODE&gt;foreach&lt;/CODE&gt;?&amp;nbsp; &lt;EM&gt;174&lt;/EM&gt; IL bytes and &lt;EM&gt;two&lt;/EM&gt; calls.&amp;nbsp; We could go further into it, but that should make it more than clear.&lt;/P&gt;
&lt;P&gt;Ugh, sorry about all that.&amp;nbsp; That took way more 'splaining than I expected at first.&amp;nbsp; But I couldn't leave an open-ended question now, could I? ;)&lt;/P&gt;
&lt;P&gt;Ok, where was I?&amp;nbsp; Oh yes, the last two types.&amp;nbsp; Here is the signature of Comparison&amp;lt;T&amp;gt;:&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public delegate int&lt;/FONT&gt; &lt;CODE&gt;Comparison&amp;lt;T&amp;gt;(T x, T y)&lt;/CODE&gt;;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;Its used (no suprises here) on the &lt;CODE&gt;Sort&amp;lt;T&amp;gt;()&lt;/CODE&gt; call.&amp;nbsp; The one thing you need to know that isn't obvious is that your method must return the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;x &amp;lt; y (return less than zero)&lt;/LI&gt;
&lt;LI&gt;x == y (return zero)&lt;/LI&gt;
&lt;LI&gt;x &amp;gt; y (return greater than zero)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;And now the last delegate type.&amp;nbsp; Here is the signature of &lt;CODE&gt;Converter&amp;lt;T, U&amp;gt;&lt;/CODE&gt;:&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public delegate &lt;/FONT&gt;TOutput Converter&amp;lt;TInput, TOutput&amp;gt;(TInput i);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;Its used with the &lt;CODE&gt;ConvertAll&amp;lt;TOutput&amp;gt;()&lt;/CODE&gt; call.&amp;nbsp; In the case of &lt;/CODE&gt;List&amp;lt;T&amp;gt;&lt;/CODE&gt;, this method returns a new &lt;CODE&gt;List&amp;lt;TOutput&amp;gt;.&amp;nbsp;&lt;/CODE&gt; There is nothing to say that &lt;CODE&gt;TInput&lt;/CODE&gt; and &lt;CODE&gt;TOutput&lt;/CODE&gt; can't be the same type.&amp;nbsp; This could be useful for doing something like uppercasing a &lt;CODE&gt;List&amp;lt;string&amp;gt;.&lt;/CODE&gt; (Why not use &lt;CODE&gt;ForEach&lt;/CODE&gt;?&amp;nbsp; Just like &lt;CODE&gt;foreach&lt;/CODE&gt; you're working on a &lt;EM&gt;copy&lt;/EM&gt;.)&amp;nbsp; Here's&amp;nbsp;the line of code to upper case a&amp;nbsp;&lt;CODE&gt;List&amp;lt;string&amp;gt;&lt;/CODE&gt;:&lt;/P&gt;&lt;PRE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;myStringList = myStringList.ConvertAll&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;delegate&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; item) { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; item.ToUpper(); };&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;That gets us through the &lt;CODE&gt;System&lt;/CODE&gt; delegate types.&amp;nbsp; That leads us to subclassing.&amp;nbsp; And me running out of time (sorry, disassembling the foreach example took longer than I expected).&amp;nbsp; So, until next time...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=442602" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Managed+C_2B002B00_/default.aspx">Managed C++</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/General+Coding/default.aspx">General Coding</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Generic Collections II</title><link>http://blogs.msdn.com/jeremykuhne/archive/2005/07/23/generic-collections-ii.aspx</link><pubDate>Sat, 23 Jul 2005 03:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:442148</guid><dc:creator>jkuhne</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/442148.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=442148</wfw:commentRss><description>&lt;P&gt;In yesterday's &lt;a href="http://blogs.msdn.com/jeremykuhne/archive/2005/07/22/441676.aspx"&gt;post&lt;/A&gt; I went over the very basics of generic collections in the 2.0 .Net framework.&amp;nbsp; Today I pick up where I left off with...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT face=Arial size=4&gt;Predicate&amp;lt;T&amp;gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;&lt;A href="http://msdn2.microsoft.com/library/bfcke1bz(en-us,vs.80).aspx"&gt;System.Predicate&amp;lt;T&amp;gt;&lt;/A&gt;&lt;/CODE&gt; is a generic delegate that is used to specify a search condition method to pass to the generic collections.&amp;nbsp; It simply takes an object of type &amp;lt;T&amp;gt; and returns a &lt;CODE&gt;&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;&lt;/CODE&gt; or &lt;CODE&gt;&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;&lt;/CODE&gt; if that object meets a condition that the method expects.&amp;nbsp; The definition is quite simple:&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;public delegate bool&lt;/FONT&gt; Predicate&amp;lt;T&amp;gt;(T obj);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;Here's another (perhaps easier)&amp;nbsp;way to explain it:&amp;nbsp; When you use the&amp;nbsp;&lt;CODE&gt;List&amp;lt;T&amp;gt;.Find()&lt;/CODE&gt; method, it needs to know what you wish to find.&amp;nbsp; It accomplishes this by taking a &lt;CODE&gt;Predicate&amp;lt;T&amp;gt;&lt;/CODE&gt; parameter that it then calls with each element in the collection to essentially ask "Is this it?&amp;nbsp; No?&amp;nbsp; Is this it? ..."&amp;nbsp; Here's how&amp;nbsp;&lt;CODE&gt;List&amp;lt;T&amp;gt;.Find()&lt;/CODE&gt; actually looks in code:&lt;/P&gt;&lt;PRE&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; T Find(&lt;FONT color=#008080&gt;Predicate&lt;/FONT&gt;&amp;lt;T&amp;gt; match)
{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (match == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// throw here...&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;
&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Iterate through the collection and return the first object that passes the specified predicate.&lt;/FONT&gt;
&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;._size; ++i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (match(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;._items[i]))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return this&lt;/FONT&gt;._items[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// Nothing found, return the default object for this type.&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return default&lt;/FONT&gt;(T);
}
&lt;/PRE&gt;
&lt;P&gt;Pretty simple actually.&amp;nbsp; The one thing you may not have encountered here is &lt;A href="http://msdn2.microsoft.com/library/xwth0h0d(en-us,vs.80).aspx"&gt;&lt;CODE&gt;&lt;STRONG&gt;default(T)&lt;/STRONG&gt;&lt;/CODE&gt;&lt;/A&gt;.&amp;nbsp; This is a new construct with generics that returns &lt;CODE&gt;null&lt;/CODE&gt; for reference types, zero for numeric value types, and structs with their fields initialized appropriately to &lt;CODE&gt;null&lt;/CODE&gt; or zero.&amp;nbsp; The equivalent in C++ is to simply use &lt;CODE&gt;T()&lt;/CODE&gt;.&amp;nbsp; (note: &lt;CODE&gt;null&lt;/CODE&gt; in C++ is &lt;CODE&gt;nullptr&lt;/CODE&gt;)&lt;/P&gt;
&lt;P&gt;Let's take a look at a sample of &lt;CODE&gt;Predicate&amp;lt;T&amp;gt;&lt;/CODE&gt; in action:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#008000&gt;// Our method that we'll use as a predicate.&lt;/FONT&gt;
&lt;FONT color=#0000ff&gt;static public bool&lt;/FONT&gt; IsMeaningOfLife(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; number)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; number == 42;
}

&lt;FONT color=#008000&gt;// Elsewhere …&lt;/FONT&gt;

&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; FindMeaningDemo()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; magicNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[] { 7, 13, 1000, 42, 9 });

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Create the predicate delegate&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;System.&lt;FONT color=#008080&gt;Predicate&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; findMeaning = IsMeaningOfLife;

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Does the meaning of life exist in my magic numbers?&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (magicNumbers.Exists(findMeaning))
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// This will be hit!&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;Console&lt;/FONT&gt;.WriteLine("I've found my purpose!");
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
&lt;/PRE&gt;
&lt;P&gt;&lt;CODE&gt;Exists()&lt;/CODE&gt;, as you may well imagine, simply returns true if the delegate passes on any of the items in the collection.&amp;nbsp; Not too shabby, but this gets even better with...&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=4&gt;&lt;STRONG&gt;&lt;U&gt;Anonymous Delegates&lt;/U&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Anonymous delegates are a C# (sorry C++) &lt;EM&gt;compiler&lt;/EM&gt; feature that allows you to write code blocks in place of a delegate parameter.&amp;nbsp; The compiler will automatically create the proper type of delegate for you.&amp;nbsp; Simply replace the delegate parameter with:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;delegate&amp;nbsp;&lt;/FONT&gt;(&lt;EM&gt;optional arguments&lt;/EM&gt;) { &lt;EM&gt;...code...&lt;/EM&gt; }&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If we redo the previous example using anonymous delegates we get the following:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; AnonymousFindMeaningDemo()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; magicNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[] { 7, 13, 1000, 42, 9 });

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Does the meaning of life exist in my magic numbers?&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (magicNumbers.Exists(&lt;FONT color=#0000ff&gt;delegate&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; number){ &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; number == 42; }))
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// This will be hit!&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;Console&lt;/FONT&gt;.WriteLine("I've found my purpose!");
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/PRE&gt;
&lt;P&gt;This, my friends, is where the generic collections start to really show their power.&amp;nbsp; And it gets even better.&amp;nbsp; (No, really!)&amp;nbsp; Ends up you can transparently create a delegate out of an existing variable instance:&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; AnonymousFindMeaningDemo2(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; meaning)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;&lt;INT&gt; magicNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[] { 7, 13, 1000, 42, 9 });

&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Does the meaning of life exist in my magic numbers?&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (magicNumbers.Exists(meaning.Equals))
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// This will be hit (IF the method was sent one of the numbers in the collection)!&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;Console&lt;/FONT&gt;.WriteLine("I've found my purpose!");
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/PRE&gt;
&lt;P&gt;Ok, this is somewhat contrived to fit the existing example, but you can hopefully see where this could be really useful.&amp;nbsp; (Have I mentioned that I love this stuff?&amp;nbsp; This just rocks.)&lt;/P&gt;
&lt;P&gt;(Links to more details on anonymous delegates can be found&amp;nbsp;in yesterday's &lt;a href="http://blogs.msdn.com/jeremykuhne/archive/2005/07/22/441676.aspx"&gt;post&lt;/A&gt;.)&lt;/P&gt;
&lt;P&gt;Now, sadly, C++ doesn't support anonymous delegates, but I'll share a cool thing that I just haven't been able to do in C# (yet).&amp;nbsp; For your predicate argument you can take advantage of the System::Predicate constructor that takes an object and a method pointer.&amp;nbsp; Try this on:&amp;nbsp; &lt;CODE&gt;(&lt;FONT color=#0000ff&gt;gcnew&lt;/FONT&gt; System::Predicate&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;^&amp;gt;(42, &amp;amp;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;::Equals))&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Hopefully this has been useful so far, but there is more...&amp;nbsp; In my next post I'll discuss subclassing and the other System delegate types.&amp;nbsp; Stay tuned and feel free to send me your feedback...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=442148" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Managed+C_2B002B00_/default.aspx">Managed C++</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/General+Coding/default.aspx">General Coding</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Generic Collections I</title><link>http://blogs.msdn.com/jeremykuhne/archive/2005/07/22/generic-collections-i.aspx</link><pubDate>Fri, 22 Jul 2005 07:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:441676</guid><dc:creator>jkuhne</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/jeremykuhne/comments/441676.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jeremykuhne/commentrss.aspx?PostID=441676</wfw:commentRss><description>&lt;P&gt;In one of my first posts I briefly mentioned that I would discuss a bit about what I've learned about using the new generic collections.&amp;nbsp; I've been putting it off a bit because I knew it would be a bit lengthy, but I really feel this is important so I'm going to push myself to start making the effort. ;)&amp;nbsp; Here's what I plan to cover (in relation to generic collections):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Advantages of generic collections 
&lt;LI&gt;Predicates &amp;amp; other System delegate types 
&lt;LI&gt;Anonymous delegates 
&lt;LI&gt;Subclassing generic collections 
&lt;LI&gt;Other resources (including Power Collections)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I'm &lt;STRONG&gt;not&lt;/STRONG&gt; going to go over generics.&amp;nbsp; If you want details on generics here are a few links:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/dnvs05/html/csharp_generics.asp?frame=true"&gt;An Introduction to C# Generics&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vs2005icons.asp"&gt;Introducing Generics in the CLR&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vs2005icons.asp"&gt;More on Generics in the CLR&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.15seconds.com/issue/031024.htm"&gt;Introducing .NET Generics&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/library/512aeb7t(en-us,vs.80).aspx"&gt;Generics (C# Programmer's Reference)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/library/8z2kbc1y(en-us,vs.80).aspx"&gt;Generics (C++)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I also won't go over anonymous delegates in detail.&amp;nbsp; You can find some useful information here:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/04/05/C20"&gt;C# 2.0: Create Elegant Code with Anonymous Methods, Iterators, and Partial Classes&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/library/0yw3tz5k(en-us,vs.80).aspx"&gt;Anonymous Methods (C# Programmers Reference)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=4&gt;&lt;STRONG&gt;&lt;U&gt;Introduction&lt;/U&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Generic collections are the generic equivalents (I like to think of them as &lt;EM&gt;replacements&lt;/EM&gt;) for the &lt;A href="http://msdn2.microsoft.com/library/k166wx47(en-us,vs.80).aspx"&gt;System.Collections&lt;/A&gt; classes.&amp;nbsp; They are found in the &lt;A href="http://msdn2.microsoft.com/library/0sbxh9x2(en-us,vs.80).aspx"&gt;System.Collections.Generic&lt;/A&gt; space.&lt;/P&gt;
&lt;P&gt;Generic collections have a number of advantages over the old collections.&amp;nbsp; Chief among them are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;They are type safe. 
&lt;LI&gt;Better performance.&amp;nbsp; (no boxing/unboxing!) 
&lt;LI&gt;Richer functionality through System defined delegate types.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;To top it off they are quite compatible with the old collections and methods that use them.&amp;nbsp; Both &lt;A href="http://msdn2.microsoft.com/library/7x4b0a97(en-us,vs.80).aspx"&gt;ArrayList&lt;/A&gt; and &lt;A href="http://msdn2.microsoft.com/library/6sh2ey19(en-us,vs.80).aspx"&gt;List&amp;lt;T&amp;gt;&lt;/A&gt; &amp;nbsp;support IList, ICollection, IEnumerable, and ICloneable for example.&amp;nbsp; If existing methods use the old interfaces for parameters there is nothing extra you have to do to start using the generic collections.&amp;nbsp;&amp;nbsp; (Hey, look! A &lt;EM&gt;great&lt;/EM&gt; reason to take the interface (IList)&amp;nbsp;as a parameter instead of the collection class (ArrayList).)&amp;nbsp; Converting is easy beyond this as the old collections&amp;nbsp;take ICollection or IDictionary&amp;nbsp;as a constructor parameter.&lt;/P&gt;
&lt;P&gt;Here's a quick overview of how the new collections map to old ones (from: &lt;A href="http://msdn2.microsoft.com/library/ac30fak4(en-us,vs.80).aspx"&gt;Generics in the .NET Framework Class Library (C# Programmers Reference)&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #e0dfe3; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #e0dfe3" vAlign=bottom&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Generic Class or Interface&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #e0dfe3; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #e0dfe3" vAlign=bottom&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #e0dfe3; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #e0dfe3" vAlign=bottom&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Corresponding Non-Generic Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Collection&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;ICollection&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Provides the base class for a generic collection.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;CollectionBase&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;ICollection&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Comparer&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IComparer&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IComparable&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Compares two objects of the same generic type for equivalence and for sorting.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Comparer&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IComparer&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IComparable&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Dictionary&amp;lt;K, V&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IDictionary&amp;lt;K,V&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a collection of key/value pairs that are organized based on the key.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Hashtable&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IDictionary&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Dictionary&amp;lt;K, V&amp;gt;.KeyCollection &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents the collection of keys in a Dictionary&amp;lt;K, V&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;None.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Dictionary&amp;lt;K, V&amp;gt;.ValueCollection &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents the collection of values in a Dictionary&amp;lt;K, V&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;None.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 6"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IEnumerator&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a collection that can be iterated using &lt;SPAN class=languagekeyword1&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;foreach&lt;/SPAN&gt;&lt;/SPAN&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IEnumerable&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IEnumerator&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 7"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;KeyedCollection&amp;lt;T, U&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a keyed collection.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;KeyedCollection&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 8"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;LinkedList&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a doubly linked list.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;None.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 9"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;LinkedListNode&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a node in a LinkedList&amp;lt;T&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;None.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 10"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;List&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IList&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Implements the IList&amp;lt;T&amp;gt; interface using an array whose size is dynamically increased as required.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;ArrayList&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;IList&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 11"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Queue&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a first-in, first-out collection of objects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Queue&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 12"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;ReadOnlyCollection&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Provides the base class for a generic read-only collection.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;ReadOnlyCollectionBase&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 13"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;SortedList&amp;lt;K, V&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a collection of key/value pairs that are sorted by key based on the associated IComparer&amp;lt;T&amp;gt; implementation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;SortedList&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 14; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #cccccc 1pt solid; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Stack&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Represents a simple last-in-first-out (LIFO) collection of objects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 3.75pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 3.75pt; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #e0dfe3; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #cccccc 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #CCCCCC .75pt; mso-border-left-alt: solid #CCCCCC .75pt; mso-border-top-alt: solid #CCCCCC .75pt" vAlign=top&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 140%"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 140%; FONT-FAMILY: Arial"&gt;Stack&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT face=Arial size=4&gt;First Look at a Generic Collection Class&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The best place to start is to look at the workhorse of the generic collection family, the generic List class, or List&amp;lt;T&amp;gt;.&amp;nbsp; List&amp;lt;T&amp;gt; is meant to replace the functionality of ArrayList.&amp;nbsp; It is a simple ordered collection of objects of type &amp;lt;T&amp;gt;.&amp;nbsp; You can think of it as a wrapped array because that's precisely what it is--internally data is stored as &lt;CODE&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt; T[] _items&lt;/STRONG&gt;;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;As with any array, appending is usually fast (unless the array is being resized) and insertion gets proportionally slower as the number of elements grows.&amp;nbsp; I've already mentioned that it supports &lt;A href="http://msdn2.microsoft.com/library/30ft6hw7(en-us,vs.80).aspx"&gt;IList&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/library/b1ht6113(en-us,vs.80).aspx"&gt;ICollection&lt;/A&gt;, and &lt;A href="http://msdn2.microsoft.com/library/h1x9x1b1(en-us,vs.80).aspx"&gt;IEnumerable&lt;/A&gt;.&amp;nbsp; It also supports the generic equivalents&amp;nbsp;&lt;A href="http://msdn2.microsoft.com/library/5y536ey6(en-us,vs.80).aspx"&gt;IList&amp;lt;T&amp;gt;&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/library/92t2ye13(en-us,vs.80).aspx"&gt;ICollection&amp;lt;T&amp;gt;&lt;/A&gt;, and &lt;A href="http://msdn2.microsoft.com/library/9eekhta0(en-us,vs.80).aspx"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Lets take a look at some simple usage of List&amp;lt;T&amp;gt;, shall we?&amp;nbsp; (Finally, some code!)&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#008000&gt;// Creating a List&amp;lt;T&amp;gt; (Also has constructors that take a collection or specify the initial size)&lt;/FONT&gt;
&lt;/FONT&gt;&lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt; myNumbers = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; List&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;();&lt;BR&gt;
&lt;FONT color=#008000&gt;// Adding a value&lt;/FONT&gt;
myNumbers.Add(42);&lt;BR&gt;
&lt;FONT color=#008000&gt;// Adding a range of values&lt;/FONT&gt;
myNumbers.AddRange(&lt;FONT color=#0000ff&gt;new int&lt;/FONT&gt;[]{1,2,3});&lt;BR&gt;
&lt;FONT color=#008000&gt;// Inserting a value&lt;/FONT&gt;
myNumbers.Insert(myNumbers.Count - 3, 0);&lt;BR&gt;
&lt;FONT color=#008000&gt;// Iterating&lt;/FONT&gt;
&lt;FONT color=#0000ff&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int &lt;/FONT&gt;number in myNumbers)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// Output is 42, 0, 1, 2, 3&lt;/FONT&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008080&gt;Console&lt;/FONT&gt;.WriteLine(number.ToString());
}&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The code above should be pretty self explanatory.&amp;nbsp; Here is a summary of the functionality that is available to you in List&amp;lt;T&amp;gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Add or insert objects of collections of type T 
&lt;LI&gt;Removal 
&lt;UL&gt;
&lt;LI&gt;Remove, RemoveAt, RemoveRange, RemoveAll&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Sorting 
&lt;UL&gt;
&lt;LI&gt;Sort (&lt;STRONG&gt;Comparison&amp;lt;T&amp;gt;&lt;/STRONG&gt;) 
&lt;LI&gt;Reverse&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Conversion 
&lt;UL&gt;
&lt;LI&gt;ConvertAll (&lt;STRONG&gt;Converter&amp;lt;T,U&amp;gt;&lt;/STRONG&gt;) 
&lt;LI&gt;CopyTo(T[])&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Searching (&lt;STRONG&gt;Predicate&amp;lt;T&amp;gt;&lt;/STRONG&gt;) 
&lt;UL&gt;
&lt;LI&gt;Exists 
&lt;LI&gt;Find, FindAll, FindLast 
&lt;LI&gt;FindIndex, FindLastIndex, IndexOf, LastIndexOf 
&lt;LI&gt;TrueForAll&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Iterating 
&lt;UL&gt;
&lt;LI&gt;ForEach (&lt;STRONG&gt;Action&amp;lt;T&amp;gt;&lt;/STRONG&gt;)&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In bold you will see that I've called out the System delegate types.&amp;nbsp; They are the key to unlocking super rich functionality within these classes.&amp;nbsp; This makes a nice transition to my next blog entry where I'll start by taking a look at Predicate&amp;lt;T&amp;gt; and then this discussion will get &lt;EM&gt;really&lt;/EM&gt; interesting. :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=441676" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/Managed+C_2B002B00_/default.aspx">Managed C++</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/General+Coding/default.aspx">General Coding</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jeremykuhne/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>