<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Conscious Development &#187; .NET</title>
	<atom:link href="http://samipoimala.com/it/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://samipoimala.com/it</link>
	<description>Curious perversions from software development</description>
	<lastBuildDate>Tue, 30 Nov 2010 12:21:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Unobtrusive client validation in ASP.NET MVC 3</title>
		<link>http://samipoimala.com/it/2010/11/29/unobtrusive-client-validation-in-asp-net-mvc-3/</link>
		<comments>http://samipoimala.com/it/2010/11/29/unobtrusive-client-validation-in-asp-net-mvc-3/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 11:24:24 +0000</pubDate>
		<dc:creator>Sami Poimala</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://samipoimala.com/it/?p=121</guid>
		<description><![CDATA[Recently I walked through the pains of setting up flexible client-side validation on ASP.NET MVC 3 project. After all the hassle, the solution is actually pretty easy and elegant. All the information is available on the internet already but the One And Only blog post that explains it everything seems to be missing. So here [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I walked through the pains of setting up flexible client-side validation on ASP.NET MVC 3 project. After all the hassle, the solution is actually pretty easy and elegant. All the information is available on the internet already but the One And Only blog post that explains it everything seems to be missing. So here it is.</p>
<p>  <span id="more-121"></span> What we want to achieve:
<ul>
<li>We do not want to duplicate validation rules into many places </li>
<li>We want to have as much as possible validated on the client </li>
<li>We do not want to have tons of boilerplate custom javascript </li>
</ul>
<p>And the solution consists of the following elements:</p>
<ul>
<li>ValidationAttributes (<em>System.ComponentModel.DataAnnotations</em>) </li>
<li><a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jQuery Validate</a> </li>
<li>Unobtrusive extension to jQuery Validate </li>
</ul>
<h2>The basics of attribute-based validation</h2>
<p>Namespace <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx">System.ComponentModel.DataAnnotations</a> contains many attributes that you can use to validate user input. Specifically, you have <em>DataTypeAttribute</em>, <em>RangeAttribute</em>, <em>RegularExpressionAttribute</em>, <em>RequiredAttribute </em>and <em>StringLengthAttribute</em>. I guess the names are pretty self-explanatory.</p>
<p>In addition, System.Web.Mvc namespace contains <em>CompareAttribute </em>which allows you to define that the values of two different fields must be the same (for example, password and passwordConfirmation) and <em>RemoteAttribute </em>which allows you to have complex validation rules executed on the client. In practice, you can define a controller and action which is executed by an AJAX call.</p>
<p>ScottGu explains the basics pretty well: <a title="http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx" href="http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx">http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx</a>.</p>
<h2>Unobtrusive client validation</h2>
<p>ScottGu’s example uses Microsoft’s own validation framework (MicrosoftMvcValidation.js) but in ASP.NET MVC 3 Microsoft allows us to use jQuery Validate and has implemented a nice addition on top of that. Brad Wilson posted a nice article about enabling unobtrusive validation: <a title="http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html" href="http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html">http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html</a>.</p>
<h2>Extending the validation</h2>
<p>It’s likely that sooner or later you find yourself having a custom validation rule that is not available in the previously mentioned framework. Most probably you’ll be missing the attribute on server side as jQuery Validate plugin actually contains a lot more validation methods than .NET Framework’s attributes represent, for example email validation for which the support is implemented below. You can find the list of all supported validation rules on the <a href="http://docs.jquery.com/Plugins/Validation#List_of_built-in_Validation_methods">jQuery Validate’s documentation</a>.</p>
<h3>Custom attribute</h3>
<p>It turns out that implementing a custom attribute is really an easy task. You implement your own class that inherits <em>System.ComponentModel.DataAnnotations.ValidationAttribute</em> and implements <em>System.Web.Mvc.IClientValidatable</em>. So you need to do three things.</p>
<p>1) Override <em>public bool IsValid(object value)</em>    <br />This method will be run when the validation is done on the server (for example, if the client does not have javascript enabled). This is all you need to do if you don’t need client validation.</p>
<p>2) Create a class that inherits from <em>ModelClientValidationRule</em>. This is usually very simple. Here’s an example how to enable email validation on the client:<span class="kwrd"> </span></p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> ModelClientValidationEmailRule : ModelClientValidationRule
{
    <span class="kwrd">public</span> ModelClientValidationEmailRule(<span class="kwrd">string</span> errorMessage)
    {
        <span class="kwrd">base</span>.ErrorMessage = errorMessage;
        <span class="kwrd">base</span>.ValidationType = <span class="str">&quot;email&quot;</span>;
    }
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->3) Implement <em>public IEnumerable&lt;ModelClientValidationRule&gt; GetClientValidationRules(ModelMetadata metadata, ControllerContext context)</em></p>
<p>This is also usually very easy to implement, here’s the example on email validation:</p>
<pre class="csharpcode"><span class="kwrd">public</span> IEnumerable&lt;ModelClientValidationRule&gt; GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
    <span class="kwrd">yield</span> <span class="kwrd">return</span> <span class="kwrd">new</span> ModelClientValidationEmailRule(FormatErrorMessage(metadata.GetDisplayName()));
}</pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->This is all you need do to write your own attribute to enable validation using the readymade validation rules on jQuery Validate plugin. But there will be times when you invent new ways to do validation on client so you’ll need to write your own validation method for jQuery Validate.</p>
<h3>Custom client validator</h3>
<p>As you can guess, custom validators are not that hard to implement either. In the simple case (your validator doesn’t have any parameters) here’s all you need:</p>
<pre class="csharpcode">(<span class="kwrd">function</span> ($) {
    $.validator.addMethod(
        <span class="str">&quot;your-method-name&quot;</span>,
        <span class="kwrd">function</span> (value, element) {
            <span class="kwrd">return</span> (!value &amp;&amp; <span class="kwrd">this</span>.optional(element)) || <span class="rem">/*place your validation logic here*/</span>;
        },
        <span class="str">&quot;your own error message&quot;</span>);
    $.validator.unobtrusive.adapters.addBool(<span class="str">&quot;your-method-name&quot;</span>);
} (jQuery));</pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->And to use this, you need to write your own custom attribute (and when implementing the <em>ModelClientValidationRule</em>, you need to set <em>base.ValidationType = “your-method-name”</em>).</p>
<p>NOTE: Usually it is good practice to first check whether the input is empty and whether the element is not marked as required. Otherwise using your own validator would also make the field required which is unexpected. The same applies to implementing server-side attribute’s <em>IsValid</em> method.</p>
<h2>Conclusion and FAQ</h2>
<p>This way we have a single solution for performing validation both on the client and on the server, and the usage of HTML 5 (yay!!!) data attributes for this kind of tasks is simply beautiful.</p>
<p>Q1: I have everything set up, but I still don’t get the validation happening on the client, it still goes to the server everytime.<br />
  <br />A1.1: You do not have client validation enabled. Check that you have the following values on your web.config:</p>
<p><span class="kwrd"></span></p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">appSettings</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">key</span><span class="kwrd">=&quot;ClientValidationEnabled&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;true&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">key</span><span class="kwrd">=&quot;UnobtrusiveJavaScriptEnabled&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;true&quot;</span> <span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">appSettings</span><span class="kwrd">&gt;</span></pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->A1.2: You do not have the required javascript libraries loaded. You need to have jquery, jquery.validate and jquery.validate.unobtrusive included on your page.</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">=&quot;/Scripts/jquery-1.4.3.min.js&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;text/javascript&quot;</span> <span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">=&quot;/Scripts/jquery.validate.min.js&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;text/javascript&quot;</span><span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">=&quot;/Scripts/jquery.validate.unobtrusive.min.js&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;text/javascript&quot;</span><span class="kwrd">/&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: Consolas,"Courier New",Courier,Monospace; background-color: rgb(255, 255, 255); }.csharpcode pre { margin: 0em; }.csharpcode .rem { color: rgb(0, 128, 0); }.csharpcode .kwrd { color: rgb(0, 0, 255); }.csharpcode .str { color: rgb(0, 96, 128); }.csharpcode .op { color: rgb(0, 0, 192); }.csharpcode .preproc { color: rgb(204, 102, 51); }.csharpcode .asp { background-color: rgb(255, 255, 0); }.csharpcode .html { color: rgb(128, 0, 0); }.csharpcode .attr { color: rgb(255, 0, 0); }.csharpcode .alt { background-color: rgb(244, 244, 244); width: 100%; margin: 0em; }.csharpcode .lnum { color: rgb(96, 96, 96); } --></p>
<p>Q2: I have validation rules that I cannot express by static attributes. How to use more complex validation rules?<br />
  <br />A2: On your action method you can have arbitrary validation logic. To put the error messages into the same output system, use <em>ModelState.AddModelError(&quot;&lt;fieldname&gt;&quot;, &quot;ErrorMessage&quot;);</em></p>
]]></content:encoded>
			<wfw:commentRss>http://samipoimala.com/it/2010/11/29/unobtrusive-client-validation-in-asp-net-mvc-3/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Blocked file madness in Windows 7</title>
		<link>http://samipoimala.com/it/2010/10/25/blocked-file-madness-in-windows-7/</link>
		<comments>http://samipoimala.com/it/2010/10/25/blocked-file-madness-in-windows-7/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 12:15:20 +0000</pubDate>
		<dc:creator>Sami Poimala</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[reflector]]></category>
		<category><![CDATA[unblock file]]></category>

		<guid isPermaLink="false">http://samipoimala.com/it/?p=118</guid>
		<description><![CDATA[Some time ago Rytmis wrote about Windows Vista&#8217;s annoying security feature. I had similar-looking problem with blocked files, but the solution was a bit different. Specifically, I was trying to use .NET Reflector Pro&#8217;s Visual Studio add-in. I enabled Visual Studio integration from Reflector (Tools-&#62;Integration Options -&#62; Visual Studio 2010) and all was good. However, [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago <a href="http://blog.rytmis.net/">Rytmis</a> wrote about <a href="http://blog.rytmis.net/2009/01/putty-vista-and-annoying-security.html">Windows Vista&#8217;s annoying security feature</a>. I had similar-looking problem with blocked files, but the solution was a bit different. Specifically, I was trying to use <a href="http://www.red-gate.com/products/reflector/">.NET Reflector</a> Pro&#8217;s Visual Studio add-in. I enabled Visual Studio integration from Reflector (Tools-&gt;Integration Options -&gt; Visual Studio 2010) and all was good. However, when restarting Visual Studio I got an error message that .NET Reflector add-in cannot be loaded (of course, without any meaningful error message). It was easy to guess that this has something to do with files downloaded from the internet.<span id="more-118"></span>But I encountered an interesting nuisance: unblocking the addin.dll seemed to work quite right, but when looked another time, the file still seems to be blocked! As per Rytmis&#8217; suggestion, I thought &#8220;yay, I need to unblock the file in it&#8217;s original download location&#8221;. But wait a minute, as you know Reflector comes as a zip file and I can&#8217;t unblock a file inside a zip file, can I? The solution is of course as easy as it is distracting: you need to unblock the whole zip file! After doing this the files are all unblocked no matter where do you extract the archive.</p>
]]></content:encoded>
			<wfw:commentRss>http://samipoimala.com/it/2010/10/25/blocked-file-madness-in-windows-7/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>.NET Framework will be renamed</title>
		<link>http://samipoimala.com/it/2010/04/01/net-framework-will-be-renamed/</link>
		<comments>http://samipoimala.com/it/2010/04/01/net-framework-will-be-renamed/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 21:05:10 +0000</pubDate>
		<dc:creator>Sami Poimala</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://samipoimala.com/it/?p=92</guid>
		<description><![CDATA[Many of Microsoft&#8217;s technologies have been renamed to be consistent with each other and to form uniform product lines. Most of the base technologies are called foundation technologies. A rush at that arena was at the launch of .NET Framework 3.0. Then was released the new user interface technology Windows Presentation Foundation (WPF), formerly known [...]]]></description>
			<content:encoded><![CDATA[<p>Many of Microsoft&#8217;s technologies have been renamed to be consistent with each other and to form uniform product lines. Most of the base technologies are called <em>foundation</em> technologies. A rush at that arena was at the launch of .NET Framework 3.0. Then was released the new user interface technology <em>Windows Presentation Foundation</em> (WPF), formerly known as Avalon; the new model for distributed programming <em>Windows Communication Foundation</em> (WCF), formerly known an Indigo and the underlying technology for all new workflow applications, <em>Workflow Foundation</em> (which was then called WWF, but the official acronym is now WF).</p>
<p>Now, at the release of Sharepoint 2010, the lite version formerly known as Windows Sharepoint Services, will be renamed to Sharepoint Foundation.</p>
<p>Finally, the naming of these fundamental technologies will achieve it&#8217;s closure: The programming framework and paradigm that we originally called <em>Lightning</em>, was released under the name <strong>.NET Framework</strong>. Now, at the release of version 4.0 the framework will also be renamed to conform to this naming convention and as expected, the new name will be <strong>Windows Technology Foundation</strong>. To celebrate this remarkable milestone, Microsoft has acquired the <a href="http://www.thedailywtf.com">well known site </a>and will continue to bring daily news about all WTF technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://samipoimala.com/it/2010/04/01/net-framework-will-be-renamed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 editions</title>
		<link>http://samipoimala.com/it/2009/10/20/visual-studio-2010-editions/</link>
		<comments>http://samipoimala.com/it/2009/10/20/visual-studio-2010-editions/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 11:12:50 +0000</pubDate>
		<dc:creator>Sami Poimala</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://samipoimala.com/it/?p=63</guid>
		<description><![CDATA[Now that Visual Studio 2010 beta 2 is out, some new information about the packaging of the product is also revealed. Gone is the old jumble of nearly dozen different flavors. Now everything comes in three different products: Visual Studio Professional, Visual Studio Premium and Visual Studio Ultimate. The professional has similar concept than before [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Visual Studio 2010 beta 2 is out, some new information about the packaging of the product is also revealed. Gone is the old jumble of nearly dozen different flavors. Now everything comes in three different products: Visual Studio Professional, Visual Studio Premium and Visual Studio Ultimate. <span id="more-63"></span>The professional has similar concept than before &#8211; cheapest edition for professional developer, with the most important basic stuff to developing code. New is that now it comes with support to Sharepoint and cloud development.</p>
<p>Premium edition is like a boosted Team Edition for Developers. It has all the advanced features from previous Developer and Database editions and some features from the tester edition.</p>
<p>Ultimate is the  &#8211; should I say &#8211; ultimate version with everything you can imagine. Like Team Suite was at 2005-2008 timeframe. Af course there are some new features, like IntelliTrace &#8211; a new historical debugger which enables debugging events that ran previously on your machine. It also has the Test case management and lab manger tools built-in &#8211; in addition to new architectere and UML (yes, UML) modeling tools.</p>
<p>One notable benefit is that all these versions come with some Azure computing time.</p>
<p><strong>VSTS exists no more?</strong></p>
<p>The brand name<a href="http://elegantcode.com/2009/10/19/goodbye-team-system-we-hardly-knew-ye/"> Team System seems to be removed from the universe</a>. It is not in any product name anymore. TFS accessibility (and team work) is considered an entry-level feature today, so it&#8217;s bundled with all editions of VS.</p>
<p>There is even a light version of TFS coming out, <a href="http://blogs.msdn.com/bharry/archive/2009/10/01/tfs-2010-for-sourcesafe-users.aspx">TFS Basic</a> which aims to finally kill VSS.</p>
<p><strong>Visual Studio 2010 SKUs</strong></p>
<p>Visual Studio 2010 Ultimate<br />
- Visual Studio IDE<br />
- Test and Lab Manager</p>
<p>Visual Studio 2010 Premium<br />
- Visual Studio IDE</p>
<p>Visual Studio 2010 Professional<br />
- Visual Studio IDE</p>
<p>Visual Studio Test Elements 2010<br />
- Test and Lab Manager</p>
<p>Visual Studio Team Foundation Server 2010<br />
- Server/CAL licensing</p>
<p>Visual Studio Team Lab Management 2010<br />
- Server/per processor licensing<br />
- Requires Test Elements or Ultimate</p>
<p>Visual Studio Load Test Virtual User Pack 2010<br />
- 1,000 virtual users</p>
<p>And finally, there are also the free Express editions for C#, VB, C++ and web development.</p>
<p><img src="/Users/poimala/AppData/Local/Temp/moz-screenshot.png" alt="" /><img src="/Users/poimala/AppData/Local/Temp/moz-screenshot-1.png" alt="" /></p>
<p><em>Oh, in case you didn&#8217;t know already, official launch of VS 2010 will be <strong>22.3.2010</strong>. </em>More information available at: <a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx">http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx</a></p>
<p><strong>And finally, some information in more detail for those interested:</strong></p>
<p><!-- tr 	{mso-height-source:auto;} col 	{mso-width-source:auto;} td 	{padding-top:1.0px; 	padding-right:1.0px; 	padding-left:1.0px; 	mso-ignore:padding; 	color:windowtext; 	font-size:18.0pt; 	font-weight:400; 	font-style:normal; 	text-decoration:none; 	font-family:Arial; 	mso-generic-font-family:auto; 	mso-font-charset:0; 	text-align:general; 	vertical-align:bottom; 	border:none; 	mso-background-source:auto; 	mso-pattern:auto;} .oa1 	{border-top:1.0pt solid white; 	border-right:1.0pt solid white; 	border-bottom:3.0pt solid white; 	border-left:1.0pt solid white; 	background:#681888; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa2 	{border-top:3.0pt solid white; 	border-right:1.0pt solid white; 	border-bottom:1.0pt solid white; 	border-left:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa3 	{border-top:3.0pt solid white; 	border-right:1.0pt solid white; 	border-bottom:1.0pt solid white; 	border-left:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	text-align:center; 	vertical-align:middle; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa4 	{border:1.0pt solid white; 	background:#E7F0F3; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa5 	{border:1.0pt solid white; 	background:#E7F0F3; 	mso-pattern:auto none; 	text-align:center; 	vertical-align:middle; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa6 	{border:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa7 	{border:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	text-align:center; 	vertical-align:middle; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} --></p>
<table style="border-collapse: collapse;width: 648pt" border="0" cellspacing="0" cellpadding="0" width="864">
<col style="width: 174pt" width="232"></col>
<col style="width: 102pt" width="136"></col>
<col style="width: 108pt" width="144"></col>
<col style="width: 120pt" width="160"></col>
<col style="width: 144pt" width="192"></col>
<tbody>
<tr style="height: 32.14pt">
<td style="height: 32.14pt;width: 174pt" width="232" height="43">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Ultimate with MSDN</span><span> </span></strong></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Premium<span> </span>with MSDN</span></strong></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Professional with</span><span> MSDN</span><span> </span></strong></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio Test Elements 2010 with MSDN</span></strong></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>IntelliTrace</span><span>™</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><span>Architecture   Explorer</span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><span>UML   Modeling</span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><span>Layer   Diagraming</span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 28.57pt">
<td style="height: 28.57pt;width: 174pt" width="232" height="38">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><span>Read-only   Architecture Diagrams</span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><span>Web   &amp; Load Testing</span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Test   Case Management</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Manual   Test Record &amp; Playback</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Static   Code Analysis</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Code   Metrics</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Performance   Profiling</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Database   Change</span><span> Management</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Test   Data Generation</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>UI</span><span> Test   Automation</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 28.57pt">
<td style="height: 28.57pt;width: 174pt" width="232" height="38">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Test</span><span> Impact   Analysis &amp; Code Coverage</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Unit   Testing</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>SharePoint   Development</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Office   Development</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Web   Development</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 18.64pt">
<td style="height: 18.64pt;width: 174pt" width="232" height="25">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Windows   Development</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 108pt" width="144">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 120pt" width="160">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 144pt" width="192">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr">
</td>
</tr>
</tbody>
</table>
<p><!-- tr 	{mso-height-source:auto;} col 	{mso-width-source:auto;} td 	{padding-top:1.0px; 	padding-right:1.0px; 	padding-left:1.0px; 	mso-ignore:padding; 	color:windowtext; 	font-size:18.0pt; 	font-weight:400; 	font-style:normal; 	text-decoration:none; 	font-family:Arial; 	mso-generic-font-family:auto; 	mso-font-charset:0; 	text-align:general; 	vertical-align:bottom; 	border:none; 	mso-background-source:auto; 	mso-pattern:auto;} .oa1 	{border-top:1.0pt solid white; 	border-right:1.0pt solid white; 	border-bottom:3.0pt solid white; 	border-left:1.0pt solid white; 	background:#681888; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa2 	{border-top:3.0pt solid white; 	border-right:1.0pt solid white; 	border-bottom:1.0pt solid white; 	border-left:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa3 	{border-top:3.0pt solid white; 	border-right:1.0pt solid white; 	border-bottom:1.0pt solid white; 	border-left:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	text-align:center; 	vertical-align:middle; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa4 	{border:1.0pt solid white; 	background:#E7F0F3; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa5 	{border:1.0pt solid white; 	background:#E7F0F3; 	mso-pattern:auto none; 	text-align:center; 	vertical-align:middle; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa6 	{border:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa7 	{border:1.0pt solid white; 	background:#CCE0E6; 	mso-pattern:auto none; 	text-align:center; 	vertical-align:middle; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} .oa8 	{border:1.0pt solid white; 	background:#681888; 	mso-pattern:auto none; 	vertical-align:top; 	padding-bottom:4.0pt; 	padding-left:7.2pt; 	padding-top:4.0pt; 	padding-right:7.2pt;} --></p>
<table style="border-collapse: collapse;width: 648pt" border="0" cellspacing="0" cellpadding="0" width="864">
<col style="width: 198pt" width="264"></col>
<col style="width: 96pt" width="128"></col>
<col style="width: 102pt" width="136"></col>
<col style="width: 114pt" width="152"></col>
<col style="width: 138pt" width="184"></col>
<tbody>
<tr style="height: 28.17pt">
<td style="height: 28.17pt;width: 198pt" width="264" height="38">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Software   for Production</span><span> Use</span><span> </span></strong></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Ultimate with MSDN</span><span> </span></strong></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Premium with MSDN</span></strong></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Professional with</span><span> MSDN</span><span> </span></strong></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio Test Elements 2010 with MSDN</span></strong></p>
</td>
</tr>
<tr style="height: 28.17pt">
<td style="height: 28.17pt;width: 198pt" width="264" height="38">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Visual   Studio® Team Foundation Server 2010</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 28.17pt">
<td style="height: 28.17pt;width: 198pt" width="264" height="38">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Visual   Studio® Team Foundation Server 2010 CAL</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>1</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>1</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>1</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>1</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Microsoft</span><span>® </span><span>Expression Studio 3</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 48.83pt">
<td style="height: 48.83pt;width: 198pt" width="264" height="65">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Microsoft®   Office 2007 Ultimate, Communicator 2007, Project 2007 Standard, Visio 2007   Professional, SharePoint Designer 2007</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 29.11pt">
<td style="height: 29.11pt;width: 198pt" width="264" height="39">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Software   for Development and Test</span><span> Use</span><span> </span></strong></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Ultimate with MSDN</span><span> </span></strong></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Premium with MSDN</span></strong></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Professional with</span><span> MSDN</span><span> </span></strong></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio Test Elements 2010 with MSDN</span></strong></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Windows</span><span>®</span><span> Azure</span><span>™</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Windows   (client and server)</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Microsoft</span><span>®</span><span> SQL Server</span><span>®</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 28.17pt">
<td style="height: 28.17pt;width: 198pt" width="264" height="38">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Toolkits,   Software Development Kits, Driver Development Kits</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Microsoft®   Office</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Microsoft   Dynamics</span><span>®</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>All   other servers</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Windows   Embedded operating systems</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>◌</span><span> </span></p>
</td>
</tr>
<tr style="height: 27.23pt">
<td style="height: 27.23pt;width: 198pt" width="264" height="36">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Other   key MSDN Subscription benefits</span><span> </span></strong></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Ultimate with MSDN</span><span> </span></strong></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Premium with MSDN</span></strong></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio 2010 Professional with</span><span> MSDN</span><span> </span></strong></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: left;direction: ltr"><strong><span>Visual   Studio Test Elements 2010 with MSDN</span></strong></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Microsoft</span><span>®</span><span> Learning Collections</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>2</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>2</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>1</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>1</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Online   Concierge</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Technical   support incidents</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>4</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>4</span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>2</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>2</span><span> </span></p>
</td>
</tr>
<tr style="height: 17.84pt">
<td style="height: 17.84pt;width: 198pt" width="264" height="24">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: left;direction: ltr"><span>Priority   support in MSDN Forums</span><span> </span></p>
</td>
<td style="width: 96pt" width="128">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 102pt" width="136">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 114pt" width="152">
<p style="margin-top: 0pt;margin-bottom: 0pt;margin-left: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
<td style="width: 138pt" width="184">
<p style="margin: 0pt 0in;line-height: normal;text-indent: 0in;text-align: center;direction: ltr"><span>●</span><span> </span></p>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://samipoimala.com/it/2009/10/20/visual-studio-2010-editions/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linq to SQL is not dead meat</title>
		<link>http://samipoimala.com/it/2009/07/21/linq-to-sql-is-not-dead-meat/</link>
		<comments>http://samipoimala.com/it/2009/07/21/linq-to-sql-is-not-dead-meat/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 10:44:26 +0000</pubDate>
		<dc:creator>sami poimala</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.samipoimala.com/blog/2009/07/21/linq-to-sql-is-not-dead-meat/</guid>
		<description><![CDATA[My old WP got hacked, and this post got deleted. Basically, all I said can be founf from Jouni&#8217;s post.]]></description>
			<content:encoded><![CDATA[<p>My old WP got hacked, and this post got deleted. Basically, all I said can be founf from <a href="http://www.heikniemi.net/hardcoded/2009/07/linq-to-sql-changes-in-net-4-0/">Jouni&#8217;s post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://samipoimala.com/it/2009/07/21/linq-to-sql-is-not-dead-meat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysterious experiences in the world of reflection using TypeDescriptor</title>
		<link>http://samipoimala.com/it/2009/07/13/mysterious-experiences-in-the-world-of-reflection-using-typedescriptor/</link>
		<comments>http://samipoimala.com/it/2009/07/13/mysterious-experiences-in-the-world-of-reflection-using-typedescriptor/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 09:32:09 +0000</pubDate>
		<dc:creator>sami poimala</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.samipoimala.com/blog/2009/07/13/mysterious-experiences-in-the-world-of-reflection-using-typedescriptor/</guid>
		<description><![CDATA[In the process of implementing server-side validation for an ASP.NETÂ MVC project using great xVal library, I found an interesting..err.. dare I say bug in the .NET framework. I used xVal and dataannotations on Linq2SQL objects, pretty much following the guidance here. Of course, I wanted the error messages localized and luckily, the ValidationAttributes have properties [...]]]></description>
			<content:encoded><![CDATA[<p>In the process of implementing server-side validation for an ASP.NETÂ MVC project using great <a href="http://blog.codeville.net/category/xval/">xVal library</a>, I found an interesting..err.. dare I say bug in the .NET framework. I used xVal and dataannotations on Linq2SQL objects, pretty much following the guidance <a href="http://goneale.com/2009/03/04/using-metadatatype-attribute-with-aspnet-mvc-xval-validation-framework/">here</a>. Of course, I wanted the error messages localized and luckily, the ValidationAttributes have properties called ErrorMessageResourceName and ErrorMessageResourceType so it shouldn&#8217;t be a problem.</p>
<p>Following eXtreme Programming principles, I wanted first to have it work doing the simplest possible solution. Just add a plain required attribute and test. VoilÃ¡, it works! Great, so let&#8217;s add the localization in place. I added the attribute properties and suddenly the validation didn&#8217;t work anymore. Why is that? After close examination with debugger and <a href="http://www.red-gate.com/products/reflector/">Reflector</a> I found that:</p>
<ul>
<li>According to reflector the attributes are there and their properties are correctly set</li>
<li>According to VS debugger<span style="color: #2b91af;font-size: x-small">TypeDescriptor<span style="font-size: x-small">.GetProperties(myModelObject).Cast().ToList()[0].Attributes </span></span>doesn&#8217;t contain the RequiredAttribute!</li>
</ul>
<p>That&#8217;s interesting. No exceptions were raised, no error messages were given. The attribute was plain missing and thus validation didn&#8217;t work.</p>
<p>OK, let&#8217;s try it another way. Inspect the object using ordinary reflection methods using the following code:</p>
<p><span style="color: #2b91af;font-size: x-small"><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">foreach<span style="font-size: x-small"> (</span><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">var</span></span><span style="font-size: x-small"> pi </span><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">in</span></span><span style="font-size: x-small"> instance.GetType().GetProperties())<br />
{<br />
</span><span style="color: #2b91af;font-size: x-small"><span style="color: #2b91af;font-size: x-small">Â Console</span></span><span style="font-size: x-small">.WriteLine(</span><span style="color: #a31515;font-size: x-small"><span style="color: #a31515;font-size: x-small">&#8220;Propertyname: {0}\r\n &#8220;</span></span><span style="font-size: x-small">, pi.Name);<br />
</span><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">Â foreach</span></span><span style="font-size: x-small"> (</span><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">var</span></span><span style="font-size: x-small"> a </span><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">in</span></span><span style="font-size: x-small"> pi.GetCustomAttributes(</span><span style="color: #0000ff;font-size: x-small"><span style="color: #0000ff;font-size: x-small">true</span></span><span style="font-size: x-small">))<br />
{<br />
</span><span style="color: #2b91af;font-size: x-small"><span style="color: #2b91af;font-size: x-small">Â  Console</span></span><span style="font-size: x-small">.WriteLine(</span><span style="color: #a31515;font-size: x-small"><span style="color: #a31515;font-size: x-small">&#8221; &#8220;</span></span><span style="font-size: x-small"> + a.GetType().ToString());<br />
}<br />
}</span></span></span></span></p>
<p>This code raised runtime exception &#8220;Unhandled Exception: System.Reflection.CustomAttributeFormatException: &#8216;ErrorMessageResourceName&#8217; property specified was not found.&#8221; Whaaat!? I just checked that it is there. Reading the stacktrace more closely, I found ystem.InvalidOperationException: The resource type &#8216;MetadataTest.ModelValidationResource&#8217; does not have a publicly visible static property named &#8216;XXX&#8217;.</p>
<p>Ok, so the resource should be public? Indeed, resources are generated as internal by default. Luckily the resource editor allows me to set the access modifier as public. Let&#8217;s retest. Now the new code goes through correctly. How about the code using TypeDescriptor? Now it works too! So, a few things to remember when using localized model validation</p>
<ul>
<li>Remember to set resources as public</li>
<li>Do not trust TypeDescriptor as it silently sucks all exceptions and errors</li>
</ul>
<p>I guess I need to ask Microsoft whether this is by design. Basically this kind of errors should never be ignored.</p>
]]></content:encoded>
			<wfw:commentRss>http://samipoimala.com/it/2009/07/13/mysterious-experiences-in-the-world-of-reflection-using-typedescriptor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

