<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1071282002093485304</id><updated>2012-02-16T00:55:20.056-08:00</updated><category term='Garbage Collection'/><category term='PrOgramming'/><category term='Share POint'/><category term='General'/><category term='WCF'/><category term='Database'/><category term='Visual Studio 2o1o'/><category term='MicrOsOft'/><title type='text'>S e l v a' s    B l o g</title><subtitle type='html'>All About DOT NET</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-4612176124508280934</id><published>2011-06-22T04:23:00.000-07:00</published><updated>2011-07-21T03:23:52.469-07:00</updated><title type='text'>Google Translater for Indic Web ( Tamil, Telugu, Kannada, Gujarati, Bengali)</title><content type='html'>Google now translates in our mother tongue too.. Sounds familiar but there is a new stuff added to the translater complier. yes, the translater actually tries to get the meaning of a word instead of simply converting a word from one language to other...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-FMowKz6hoW4/TgHZ8GiExrI/AAAAAAAAI0E/VMFpZ0RIY1o/s1600/google_trans.JPG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5621013436504000178" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 169px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/-FMowKz6hoW4/TgHZ8GiExrI/AAAAAAAAI0E/VMFpZ0RIY1o/s400/google_trans.JPG" border="0" target="_blank"/&gt;&lt;/a&gt; For example, If you want to convey "thanks" to a tamilian and you know only english. Now its not a problem. Just use google translater and now it translates and finds the exact tamil word for "thanks" from its tamil dictionary. Sounds interesting right? I tried few words to translate and it works.. but still google still holds this in "alpha" version as it couldn't convert a whole sentense from english to Indic languages. The reason is Indian languages often use &lt;a href="http://en.wikipedia.org/wiki/Subject_Object_Verb" target="_blank"&gt;Subject Object Verb (SOV)&lt;/a&gt; order unlike English, which uses &lt;a href="http://en.wikipedia.org/wiki/Subject_Verb_Object" target="_blank"&gt;Subject Verb Object (SVO)&lt;/a&gt; order. see the picture below&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/-lzObNbdz2oA/TgHU3dVuIQI/AAAAAAAAIz8/0zD-qTPVf_w/s1600/google_translater.PNG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5621007859168715010" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 157px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/-lzObNbdz2oA/TgHU3dVuIQI/AAAAAAAAIz8/0zD-qTPVf_w/s400/google_translater.PNG" border="0"  target="_blank"/&gt;&lt;/a&gt;&lt;br /&gt;More details about Google translator check &lt;a href="http://googleblog.blogspot.com/2011/06/google-translate-welcomes-you-to-indic.html" target="_blank"&gt;Indic Web&lt;/a&gt; and the &lt;a href="http://translate.google.com/#" target="_blank"&gt;URL for you&lt;/a&gt; to test the same.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-SpNHbiMB44s/TgHT5LZNd5I/AAAAAAAAIzs/dinXWSwdess/s1600/google_trans.JPG" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-4612176124508280934?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/4612176124508280934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2011/06/google-translater-for-indic-web-tamil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/4612176124508280934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/4612176124508280934'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2011/06/google-translater-for-indic-web-tamil.html' title='Google Translater for Indic Web ( Tamil, Telugu, Kannada, Gujarati, Bengali)'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-FMowKz6hoW4/TgHZ8GiExrI/AAAAAAAAI0E/VMFpZ0RIY1o/s72-c/google_trans.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-9120436338537648176</id><published>2010-08-10T23:05:00.000-07:00</published><updated>2010-08-10T23:06:19.280-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Architecture</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; color: rgb(68, 68, 68); line-height: 17px; "&gt;&lt;div&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;The following figure illustrates the major components of WCF.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://wcftutorial.net/Images/050000_WCF-Architecture.jpg" title="Wcf Architechture" style="text-align: center; " /&gt;&lt;/div&gt;Figure 1: WCF Architecture&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Contracts&lt;/h3&gt;&lt;/div&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;Contracts layer are next to that of Application layer. Developer will directly use this contract to develop the service. We are also going to do the same now. Let us see briefly what these contracts will do for us and we will also know that WCF is working on message system.&lt;/p&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Service contracts&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- Describe about the operation that service can provide. Example, Service provided to know the temperature of the city based on the zip code, this service we call as Service contract. It will be created using Service and Operational Contract attribute.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Data contract&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- It describes the custom data type which is exposed to the client. This defines the data types, are passed to and from service. Data types like int, string are identified by the client because it is already mention in XML schema definition language document, but custom created class or datatype cannot be identified by the client e.g. Employee data type. By using DataContract we can make client aware that we are using Employee data type for returning or passing parameter to the method.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Message Contract&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- Default SOAP message format is provided by the WCF runtime for communication between Client and service. If it is not meeting your requirements then we can create our own message format. This can be achieved by using Message Contract attribute.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Policies and Binding&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- Specify conditions required to communicate with a service e.g security requirement to communicate with service, protocol and encoding used for binding.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Service Runtime&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- It contains the behaviors that occur during runtime of service.&lt;/p&gt;&lt;ul style="color: rgb(68, 68, 68); "&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Throttling Behavior- Controls how many messages are processed.&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Error Behavior - Specifies what occurs, when internal error occurs on the service.&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Metadata Behavior - Tells how and whether metadata is available to outside world.&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Instance Behavior - Specifies how many instance of the service has to be created while running.&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Transaction Behavior - Enables the rollback of transacted operations if a failure occurs.&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Dispatch Behavior - Controls how a message is processed by the WCF Infrastructure.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Messaging&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- Messaging layer is composed of channels. A channel is a component that processes a message in some way, for example, by authenticating a message. A set of channels is also known as a channel stack. Channels are the core abstraction for sending message to and receiving message from an Endpoint. Broadly we can categories channels as&lt;/p&gt;&lt;ul style="color: rgb(68, 68, 68); "&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Transport Channels&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;Handles sending and receiving message from network. Protocols like HTTP, TCP, name pipes and MSMQ.&lt;/p&gt;&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Protocol Channels&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;Implements SOAP based protocol by processing and possibly modifying message. E.g. WS-Security and WS-Reliability.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="font: normal normal bold 13pt/normal Calibri, Helvetica, sans-serif; color: rgb(55, 92, 142); "&gt;Activation and Hosting&lt;/h3&gt;&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;- Services can be hosted or executed, so that it will be available to everyone accessing from the client. WCF service can be hosted by following mechanism&lt;/p&gt;&lt;ul style="color: rgb(68, 68, 68); "&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;IIS&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;Internet information Service provides number of advantages if a Service uses Http as protocol. It does not require Host code to activate the service, it automatically activates service code.&lt;/p&gt;&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Windows Activation Service&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;(WAS) is the new process activation mechanism that ships with IIS 7.0. In addition to HTTP based communication, WCF can also use WAS to provide message-based activation over other protocols, such as TCP and named pipes.&lt;/p&gt;&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Self-Hosting&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;WCF service can be self hosted as console application, Win Forms or WPF application with graphical UI.&lt;/p&gt;&lt;/li&gt;&lt;li style="color: rgb(68, 68, 68); line-height: 1.5em; font: normal normal normal 11pt/1.3em 'Segoe UI', Arial, sans-serif; "&gt;Windows Service&lt;p style="font: normal normal normal 10pt/1.3em 'Segoe UI', Arial, sans-serif; color: rgb(68, 68, 68); "&gt;WCF can also be hosted as a Windows Service, so that it is under control of the Service Control Manager (SCM).&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-9120436338537648176?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/9120436338537648176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/08/wcf-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/9120436338537648176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/9120436338537648176'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/08/wcf-architecture.html' title='WCF Architecture'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-572841642460640618</id><published>2010-04-27T03:16:00.000-07:00</published><updated>2010-04-27T03:17:40.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Processing Data Queues in SQL Server with READPAST and UPDLOCK</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; "&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;u&gt;&lt;b&gt;Problem&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;One common processing problem that a DBA can encounter is processing rows from a table used as a data queue. Queue processing is functionality where one or more processes INSERTs rows into a database table representing a work queue with each row representing a business action that must be performed. At the same time, one or more processes SELECTs records from the same queue table in order to execute the business action required by the application while later deleting the processed row so it is not processed again. Typically, the reading processes use polling to interrogate the queuing table for any new rows that require execution of a business action. If done incorrectly, processing data queues can produce unexpected results and/or performance issues.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;u&gt;&lt;b&gt;Solution&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;The following examples set up a process queue to be processed by two separate processes reading the same queue.  This can be extended beyond two processes, but for this example we want to show you how two processes can work against one work queue. We’ll start with examples to illustrate issues that can be encountered.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;First, let’s create a sample table and populate it with 10 records to be processed.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="4" width="100%" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;code style="font-size: 12px; "&gt;&lt;span style="color: green; "&gt;-- create an example queue table&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID    &lt;/span&gt;&lt;span style="color: blue; "&gt;INT &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;IDENTITY&lt;/span&gt;&lt;span style="color: gray; "&gt;( &lt;/span&gt;&lt;span style="color: black; "&gt;1  &lt;/span&gt;&lt;span style="color: gray; "&gt;, &lt;/span&gt;&lt;span style="color: black; "&gt;1  &lt;/span&gt;&lt;span style="color: gray; "&gt;) NOT NULL &lt;/span&gt;&lt;span style="color: blue; "&gt;PRIMARY KEY&lt;/span&gt;&lt;span style="color: gray; "&gt;,&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: black; "&gt;SOMEACTION &lt;/span&gt;&lt;span style="color: blue; "&gt;VARCHAR&lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: black; "&gt;100&lt;/span&gt;&lt;span style="color: gray; "&gt;))&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black; "&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green; "&gt;-- seed the queue table with 10 rows&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;DECLARE  &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@counter &lt;/span&gt;&lt;span style="color: blue; "&gt;INT&lt;br /&gt;&lt;br /&gt;SELECT &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@counter &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: black; "&gt;1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WHILE &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@counter &lt;/span&gt;&lt;span style="color: gray; "&gt;&lt;= &lt;/span&gt;&lt;span style="color: black; "&gt;10&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: blue; "&gt;BEGIN&lt;br /&gt;    INSERT INTO &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE&lt;br /&gt;               &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: black; "&gt;SOMEACTION&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT &lt;/span&gt;&lt;span style="color: red; "&gt;'some action ' &lt;/span&gt;&lt;span style="color: gray; "&gt;+ &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); "&gt;CAST&lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@counter &lt;/span&gt;&lt;span style="color: blue; "&gt;AS VARCHAR&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@counter &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@counter &lt;/span&gt;&lt;span style="color: gray; "&gt;+ &lt;/span&gt;&lt;span style="color: black; "&gt;1&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: blue; "&gt;END&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;u&gt;Encountering unexpected results&lt;/u&gt;&lt;br /&gt;Open 2 separate query windows and issue the following statements in each session:&lt;/p&gt;&lt;table cellspacing="0" cellpadding="4" width="100%" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;code style="font-size: 12px; "&gt;&lt;span style="color: blue; "&gt;DECLARE &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;INT&lt;br /&gt;&lt;br /&gt;BEGIN TRAN &lt;/span&gt;&lt;span style="color: black; "&gt;TRAN1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT TOP &lt;/span&gt;&lt;span style="color: black; "&gt;1 &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;PRINT &lt;/span&gt;&lt;span style="color: red; "&gt;'processing queueid # ' &lt;/span&gt;&lt;span style="color: gray; "&gt;+ &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); "&gt;CAST&lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;AS VARCHAR&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green; "&gt;-- account for delay in processing time&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WAITFOR &lt;/span&gt;&lt;span style="color: black; "&gt;DELAY &lt;/span&gt;&lt;span style="color: red; "&gt;'00:00:10'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;DELETE FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WHERE &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;COMMIT&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;As you will see, each session processed the same row! This is obviously unacceptable processing behavior, but what can we do about it?&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;We can eliminate this behavior by adding the UPDLOCK hint to the SELECT statement. The UPDLOCK hint tells the SQL Server query engine “Don’t allow any other reader of this row to acquire an UPDLOCK (“U” lock) because I will be promoting this lock to an exclusive “X” lock later in my processing”. It effectively reserves the row for your processing. However, as you will see, this can cause a new problem to arise.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;u&gt;Encountering blocking&lt;br /&gt;&lt;/u&gt;The SELECT statement has been modified to use the UPDLOCK hint.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;Open 2 separate query windows and issue the following statements again.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="4" width="100%" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;code style="font-size: 12px; "&gt;&lt;span style="color: blue; "&gt;DECLARE &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;INT&lt;br /&gt;&lt;br /&gt;BEGIN TRAN &lt;/span&gt;&lt;span style="color: black; "&gt;TRAN1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT TOP &lt;/span&gt;&lt;span style="color: black; "&gt;1 &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE &lt;/span&gt;&lt;span style="color: blue; "&gt;WITH &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: black; "&gt;updlock&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;PRINT &lt;/span&gt;&lt;span style="color: red; "&gt;'processing queueid # ' &lt;/span&gt;&lt;span style="color: gray; "&gt;+ &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); "&gt;CAST&lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;AS VARCHAR&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green; "&gt;-- account for delay in processing time&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WAITFOR &lt;/span&gt;&lt;span style="color: black; "&gt;DELAY &lt;/span&gt;&lt;span style="color: red; "&gt;'00:00:10'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;DELETE FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WHERE &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;COMMIT&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;As you can see from the modified example, each session now processes separate rows. Good so far. However, the 2nd session took longer to execute than it did in the first example even though it now processes a separate row. Why is this? It’s because an UPDLOCK (“U”) lock has been placed on the row processed by the first session and the 2nd session is forced to wait on this lock to be released before it is allowed to retrieve the next row for processing. This is highly inefficient since multiple consumers of the queue must all wait until any locks are released. So, how do we get around this?&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;To get around the blocking encountered in the previous example, a READPAST hint can be used in conjunction with the UPDLOCK hint. The READPAST hint tells the SQL Server query engine “If you encounter any rows that are locked, just skip them… I want whatever is not currently being processed by anyone”.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;u&gt;Incorporating the READPAST query hint&lt;br /&gt;&lt;/u&gt;The SELECT statement has been modified to use the READPAST hint in addition to the UPDLOCK hint.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;Open 2 separate query windows and issue the following statements again.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="4" width="100%" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;code style="font-size: 12px; "&gt;&lt;span style="color: blue; "&gt;DECLARE &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;INT&lt;br /&gt;&lt;br /&gt;BEGIN TRAN &lt;/span&gt;&lt;span style="color: black; "&gt;TRAN1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT TOP &lt;/span&gt;&lt;span style="color: black; "&gt;1 &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE &lt;/span&gt;&lt;span style="color: blue; "&gt;WITH &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: black; "&gt;updlock&lt;/span&gt;&lt;span style="color: gray; "&gt;, &lt;/span&gt;&lt;span style="color: black; "&gt;readpast&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;PRINT &lt;/span&gt;&lt;span style="color: red; "&gt;'processing queueid # ' &lt;/span&gt;&lt;span style="color: gray; "&gt;+ &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); "&gt;CAST&lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;AS VARCHAR&lt;/span&gt;&lt;span style="color: gray; "&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green; "&gt;-- account for delay in processing time&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WAITFOR &lt;/span&gt;&lt;span style="color: black; "&gt;DELAY &lt;/span&gt;&lt;span style="color: red; "&gt;'00:00:10'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;DELETE FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;WHERE &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid&lt;/span&gt;&lt;/code&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;code style="font-size: 12px; "&gt;&lt;span style="color: blue; "&gt;COMMIT&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;br /&gt;As you can see from this latest example, each session now processes separate rows and the 2nd session is no longer blocked as evidenced by the execution time (both sessions should complete at roughly the same time).&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;Using the UPDLOCK hint in conjunction with the READPAST hint gives the best performance for processing queues while eliminating unexpected results and blocking.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;u&gt;Putting it all together&lt;br /&gt;&lt;/u&gt;Here is an example of the above code that takes it a step further and processes all of the records in the queue.  To run this drop table dbo.queue and then recreate it by running the code in the very first code block above that creates the table and loads the data.&lt;/p&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;Open 2 separate query windows and issue the following statements again.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="4" width="100%" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;code style="font-size: 12px; "&gt;&lt;span style="color: blue; "&gt;SET &lt;/span&gt;&lt;span style="color: black; "&gt;NOCOUNT &lt;/span&gt;&lt;span style="color: blue; "&gt;ON&lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;INT &lt;br /&gt;&lt;br /&gt;WHILE &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); "&gt;COUNT&lt;/span&gt;&lt;span style="color: gray; "&gt;(*) &lt;/span&gt;&lt;span style="color: blue; "&gt;FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE &lt;/span&gt;&lt;span style="color: blue; "&gt;WITH &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: black; "&gt;updlock&lt;/span&gt;&lt;span style="color: gray; "&gt;, &lt;/span&gt;&lt;span style="color: black; "&gt;readpast&lt;/span&gt;&lt;span style="color: gray; "&gt;)) &gt;= &lt;/span&gt;&lt;span style="color: black; "&gt;1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;BEGIN&lt;br /&gt;&lt;br /&gt;   BEGIN TRAN &lt;/span&gt;&lt;span style="color: black; "&gt;TRAN1 &lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;SELECT TOP &lt;/span&gt;&lt;span style="color: black; "&gt;1 &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID &lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE &lt;/span&gt;&lt;span style="color: blue; "&gt;WITH &lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: black; "&gt;updlock&lt;/span&gt;&lt;span style="color: gray; "&gt;, &lt;/span&gt;&lt;span style="color: black; "&gt;readpast&lt;/span&gt;&lt;span style="color: gray; "&gt;) &lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;PRINT &lt;/span&gt;&lt;span style="color: red; "&gt;'processing queueid # ' &lt;/span&gt;&lt;span style="color: gray; "&gt;+ &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); "&gt;CAST&lt;/span&gt;&lt;span style="color: gray; "&gt;(&lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid &lt;/span&gt;&lt;span style="color: blue; "&gt;AS VARCHAR&lt;/span&gt;&lt;span style="color: gray; "&gt;) &lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: green; "&gt;-- account for delay in processing time &lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;WAITFOR &lt;/span&gt;&lt;span style="color: black; "&gt;DELAY &lt;/span&gt;&lt;span style="color: red; "&gt;'00:00:05' &lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;DELETE FROM &lt;/span&gt;&lt;span style="color: black; "&gt;DBO.QUEUE &lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;WHERE &lt;/span&gt;&lt;span style="color: black; "&gt;QUEUEID &lt;/span&gt;&lt;span style="color: blue; "&gt;= &lt;/span&gt;&lt;span style="color: rgb(67, 67, 67); "&gt;@queueid&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue; "&gt;COMMIT&lt;br /&gt;END&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; "&gt;&lt;b&gt;&lt;u&gt;Next Steps&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When processing data queues, use the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms187373.aspx" target="_blank"&gt;UPDLOCK&lt;/a&gt; hint along with the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms187373.aspx" target="_blank"&gt;READPAST&lt;/a&gt; hint to get maximum throughput of your data queues.&lt;/li&gt;&lt;li&gt;Read more information about &lt;a href="http://msdn2.microsoft.com/en-us/library/ms187373.aspx" target="_parent"&gt;UPDLOCK&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/ms187373.aspx" target="_blank"&gt;READPAST&lt;/a&gt; in the SQL Server 2000 and 2005 Books Online under Locking Hints.&lt;/li&gt;&lt;li&gt;Read more about &lt;a href="http://msdn2.microsoft.com/en-us/library/ms186396.aspx" target="_blank"&gt;Lock Compatibility&lt;/a&gt; in the SQL Server 2000 and 2005 Books Online&lt;/li&gt;&lt;li&gt;Thank you to Armando Prato for providing this tip!&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-572841642460640618?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/572841642460640618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/04/processing-data-queues-in-sql-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/572841642460640618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/572841642460640618'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/04/processing-data-queues-in-sql-server.html' title='Processing Data Queues in SQL Server with READPAST and UPDLOCK'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8853981473407953709</id><published>2010-03-24T00:06:00.000-07:00</published><updated>2010-03-24T00:07:18.334-07:00</updated><title type='text'>VS2010 Tutorial: Testing Tutorial (Step 2)</title><content type='html'>&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); line-height: 18px; font-family:arial, helvetica, sans-serif;font-size:12px;"&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Last time I posted the &lt;a href="http://dotneta2z.blogspot.com/2010/03/vs2010-tutorial-build-wpf-app-step-1.html" target="_blank" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;Step 1 tutorial&lt;/a&gt; for creating a WPF application from scratch using Visual Studio 2010.  In this post, I’m going to create a test plan and test case for the application using the new Visual Studio Test and Lab Manager project.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;For this tutorial, I’m using Visual Studio Team Suite 2010 (which includes all of the roles and TFS access).  I’ve already added the demo to TFS so I have full source control.  For the sake of demonstration, I’ve commented out the final fix from the walk through so the label does not update:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb.png" width="525" height="147" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;When I run the application, the label is not updated:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_4.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_1.png" width="537" height="248" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;The Tester&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;To create my test, I’m going to run the Test and Lab Manager tool from the start menu:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_6.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_2.png" width="389" height="498" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The main page has tabs for test plans, tests, and for tracking work items:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_8.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_3.png" width="526" height="374" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;First I need to connect to my TFS server by click Add.  My server is VLM13267036 (auto generated name by our internal Hyper-V testing tools):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_10.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_4.png" width="280" height="249" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ve already got a collection with my code stored in the Projects folder:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_12.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_5.png" width="267" height="166" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Next I’ll select Projects and choose the Connect option. This prompts me to set a context:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_14.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_6.png" width="244" height="122" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ll choose “Set context” which brings up the editor for my new context:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_16.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_7.png" width="244" height="160" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ll select New:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_18.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_8.png" width="244" height="149" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I can now edit all of the properties:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_20.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_9.png" width="501" height="240" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;After all data has been entered, click Save and Close.  The new item is now in our list:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_22.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_10.png" width="501" height="95" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Double clicking the item allows me to add a new test case to this test suite:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_24.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_11.png" width="504" height="206" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Here you can fill out all details for the test case:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_28.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_13.png" width="500" height="433" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Steps can now be added by clicking on the “Click here to add a step”:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_32.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_15.png" width="501" height="89" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ve added a few steps including launching the application, hitting the buttons, etc:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_34.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_16.png" width="504" height="137" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now hit Save and Close to go back to the test case list.  The Plan is now complete.  We can run it any time a new build is produced, for each flavor of build, for different configurations, etc.  To execute the test, change focus to the Test tab:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_36.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_17.png" width="511" height="196" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Our test plan and test case are already in the list.  Right click the test case and select Run:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_38.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_18.png" width="430" height="299" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will launch the test case.  The manual test runner window docks itself to the left side of my desktop so I can see both the steps I want to run and the full Windows desktop:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_40.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_19.png" width="284" height="404" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The “Start test and record” option allows me to not only do the testing steps, but it will also allow recording a WMV of all the steps I do as well as recording my steps to help me author coded UI tests (big helper with automation).  This is really handy if you want someone to see exactly what you did to produce a bug and automate testing in the future. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In this case I will select “Start test”.  Notice the Test Runner now shows the steps I created above:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_42.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_20.png" width="251" height="374" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The first step is to “Launch the PicViewer application” which I’ll do by running the application.  Since that worked, I’ll press the combo box status item behind the step and select ‘Pass’ from the drop down:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_44.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_21.png" width="485" height="345" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The item is now marked as passing:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_46.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_22.png" width="371" height="233" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ll repeat the process for the next two steps, so far so good:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_48.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_23.png" width="374" height="241" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;When I get to my last step, I discover the file path isn’t actually set.  That makes this item a failure.  Select the drop down box and choose ‘Fail’ from the list.  I’m automatically asked for comments on the failure:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_50.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_24.png" width="285" height="497" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Since I didn’t record a video of my steps, I would like to give the developer a screen shot of what went wrong.  Select the camera tool bar button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_52.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_25.png" width="356" height="208" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will bring up a capture tool turning the cursor into a cross hair that allows me to select a region of the screen.  I’ll select the top of the application to demonstrate the busted label:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_54.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_26.png" width="358" height="144" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Notice that the failed test now has a .png file added with the image:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_56.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_27.png" width="365" height="133" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ve got enough supporting data now so I’ll create a new bug using the toolbar:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_58.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_28.png" width="396" height="131" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’m now prompted to create my bug with a description, etc:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_60.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_29.png" width="395" height="289" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Notice the detailed test steps I’ve taken have already been added to the bug:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_62.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_30.png" width="374" height="322" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;As has my screen shot (the .png file):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_64.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_31.png" width="378" height="141" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ll now do a Save and Close which will commit the bug to TFS as a Work Item.  Finally I’ll do End Test then Save and Close the test runner.  This will return us to Test and Lab Manager.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_66.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_32.png" width="305" height="88" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;as a tester, I could now double click the test case and see all of the same data I just saved for the failure:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_68.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_33.png" width="514" height="418" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I can also select My Bugs and see the bug filed for this issue (since I conveniently assigned it to me):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_70.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_34.png" width="517" height="179" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;And just to show how everything is wired together, I can open Visual Studio, Team Explorer and look for bugs assigned to me there as well:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_72.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_35.png" width="530" height="363" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point my job as a tester is now done. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;The Developer&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;As a developer, I can now open the bug and read through the issue.  If I select Other Links I’ll find the .png which I can open to see the issue:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_74.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_36.png" width="528" height="410" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Sure enough, the label is not updated.  If a WMV had been recorded, I could have actually watched the testing steps in action.  Because the bug is quite simple to find and fix (some idiot commented out the update line!) I can simply make my fix and test it.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now that things are fixed, I want to check in the bug fix and resolve the work item at the same time.  Click on the Pending Changes tab in VS and select the correct work item:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_76.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_37.png" width="529" height="120" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now we can Check In the fix:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_78.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_38.png" width="521" height="222" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I can now verify the bug has been Resolved:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_80.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TutorialTestingTutorial_51/image_thumb_39.png" width="520" height="386" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;In Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;A key goal for Visual Studio Team System 2010 was to reduce the number of times a tester and developer wind up in a ‘no-repro’ situation.  There are several things I’ve demonstrated in this tutorial which help:&lt;/p&gt;&lt;ul style="margin-left: 0px; padding-left: 2em; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; "&gt;&lt;li&gt;Test case steps are documented and set up for repeatable execution&lt;/li&gt;&lt;li&gt;Pass/Fail steps are outlined and stored in bugs automatically&lt;/li&gt;&lt;li&gt;Video capture is allowed to see all steps taken, and screen snapshots are easy to acquire and file with a bug&lt;/li&gt;&lt;li&gt;System information including build number, OS, etc are recorded for you (System Info tab)&lt;/li&gt;&lt;li&gt;Although not shown, I could also have collected all of the historical debugging traces from the run as well&lt;/li&gt;&lt;li&gt;All data from test cases, results, work items, and source code are kept in TFS and can be shared by test and dev&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I hope you’ll pick up Beta 1 and try this set of tutorials for yourself.  Let us know how well it works for you and if you have any suggestions.  I should also point out the work item tracking, auto resolve, etc are all part of VS 2008 so a great way to get prepared for the new version is to get TFS deployed today and get your projects into the system.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Enjoy!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8853981473407953709?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8853981473407953709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/vs2010-tutorial-testing-tutorial-step-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8853981473407953709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8853981473407953709'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/vs2010-tutorial-testing-tutorial-step-2.html' title='VS2010 Tutorial: Testing Tutorial (Step 2)'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-7660413242567985768</id><published>2010-03-24T00:05:00.001-07:00</published><updated>2010-03-24T00:05:35.449-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>VS2010 Tutorial: Build a WPF App (Step 1)</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; font-size: 12px; color: rgb(51, 51, 51); line-height: 18px; "&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;For this post I’m going to build a WPF application from scratch using VS2010 Beta 1.  Along the way I’m going to show off a few new features of the product.  I built this demo using the Beta 1 build on Windows 7 RC, but it should work fine on other systems as well.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If you haven’t already downloaded the software, you can find a great walk through of how to do that on &lt;a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-20-Downloading-and-Installing-Visual-Studio-2010-Beta-1/" target="_blank" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;Channel 9 from Brian Keller&lt;/a&gt;.  Brian explains how to install the entire product, including TFS.  TFS is not required for Step 1 (this tutorial), but will be for Step 2.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;First we’ll start off in Visual Studio 2010 and do a File, New Project.  I’m going to select “WPF Application” and call my application PicViewer (this is the new Beta 1 dialog):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_8.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_3.png" width="569" height="407" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will give us the default project template including a Window with a Grid and my default C# project code:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_12.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_5.png" width="575" height="347" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;To start, I’m going to drag the Window out to be larger which you can do by dragging the actual window in the designer or you can edit the XAML Width=”” tag.  I’ll make mine 700:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_14.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_6.png" width="564" height="347" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At the top of the application we want a button to display the Previous and Next pictures in the list.  We also want to display the full path so we’ll need a label.  Step 1 is to add a row to the grid.  In this case I’ll select the &lt;grid&gt; label and move the cursor to where I want the row:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_18.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_8.png" width="561" height="81" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;When I make the row, it also adjusts the XAML for this page as follows:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_20.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_9.png" width="367" height="128" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Let’s adjust the first row Height to “35” instead of “29*” just to make sure my buttons are of reasonable size.  The aesthetics are really up to you.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;We want WPF to do the layout of the buttons and the label.  To do this, create a &lt;stackpanel&gt; bound to Grid.Row=”0”.  The StackPanel by default flows items vertically so let’s change the Orientation to “Horizontal”.  You can do this either by using the XAML editor or by dragging the items from the ToolBox.  Your final markup should look like the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_24.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_11.png" width="367" height="122" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Let’s drag a button onto the Row from the Toolbox:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_26.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_12.png" width="355" height="130" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I want this to be the Previous button.  I’ll do this by editing the settings in the Properties window:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_30.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_14.png" width="304" height="179" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;First change the Name field to “buttonPrev” and then change the Content setting to “Prev”.  Repeat this process by dragging another button to the right of the Prev button and edit that item to Name “buttonNext” and Content “Next”.  You should see the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_64.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_4.png" width="217" height="102" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This is functional, but doesn’t look good.  We can add some white space around the buttons in the StackPanel by setting the margin which defines how much space should be around an item.  Select the Prev button and change this setting:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_34.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_16.png" width="244" height="141" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;which will give the button a Margin of 5 on all sides (you can independently set left|right|top|bottom as well).  Repeat the same for the Next button.  At this point you’ll see the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_36.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_17.png" width="242" height="102" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Finally drag a label to the right of the Next button making the Name “labelPath” and set the Width to “400”.  When you are done, your XAML markup should look as follows (you can edit the text if it isn’t just right):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_38.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_18.png" width="475" height="73" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;To display our pictures, we will need to have an Image control in the bottom.  To do this, drag an Image control from the ToolBox to the bottom of the grid.  This will do the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_40.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_19.png" width="500" height="461" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This is a case where having the Smart Tag feature of Windows Forms would be really handy.  This is on the feature list but not yet in the WPF Designer.  In this case I’m going to edit the XAML itself to remove everything the designer added except the Grid.Row, Margin, and Name settings.  Make your settings look like the following and the image control will now fill the bottom of the grid with a nice white space border:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_42.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_20.png" width="511" height="67" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_44.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_21.png" width="520" height="240" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now the look of the application is coming along and we need to add some code to make it work.  To start, double click on the title bar of the Window to create a load handler:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_48.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_23.png" width="244" height="62" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_46.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_22.png" width="530" height="87" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Repeat this process by double clicking on the Prev and Next buttons.  This will give you the following code outline:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_50.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_24.png" width="544" height="409" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;For this picture viewer, I’m going to get a list of jpg files from my Windows 7 user directory and display those.  What I’d really like to do is write the view code in Window1.xaml.cs in a way that makes sense to me, then go write the underlying logic.  To get started, I’m going to declare a new instance of a class that doesn’t exist yet:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_54.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_26.png" width="407" height="199" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Because the class doesn’t exist yet, I am getting the red squiggles under the type.  That’s ok, we’ll create the class in a minute.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The next step is to stub out all the view code in this file.  We’ll start with the Window_Loaded() method.  Notice that even though the class has not been defined, Intellisense will include the type after the new keyword so you can use it:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_28.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_2.png" width="457" height="297" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;We want to initialize the list and display the first picture when the application starts.  The code is as follows:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_66.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_32.png" width="461" height="132" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Once again I have parse errors for items which don’t exist which is ok.  Move on to the Previous button handler and start typing in that method.  When I get to the DisplayPicture function call, you’ll notice the function doesn’t show up in the IntelliSense window because it doesn’t exist yet. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_60.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_29.png" width="426" height="129" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If you hit &lt;ctrl&gt;+&lt;alt&gt;+Space you’ll change the mode into “consume first” which means I want the editor to give me these names while I’m typing.  Now when I start typing, my new (and undeclared) function shows up in the list so IntelliSense doesn’t auto-complete on items already in the completion list:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_62.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_30.png" width="570" height="115" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;My code then looks like the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_68.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_33.png" width="588" height="412" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’m happy with this basic view logic.  Now I need to actually create the support class that finds my pictures.  Let’s start by placing the cursor on the PictureList class declaration then press the &lt;ctrl&gt; key and the period (&lt;ctrl&gt;+.) at the same time to expand the smart tag.  You’ll get the following pop up:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_70.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_34.png" width="503" height="193" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Select the first menu item, “Generate class for ‘PictureList’”.  This will add a new file, PictureList.cs, to the project and generate the class PictureList in that file.  Now that the class has been defined, the squiggles go away:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_72.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_35.png" width="242" height="38" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You will then notice all the methods you have invoked on the class are showing up as syntax errors.  Put your cursor in the Init() method and press &lt;ctrl&gt;+. to get the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_74.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_36.png" width="514" height="138" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Select the menu item so the code is generated for you.  Repeat this process for the Peek(), Prev(), and Next() methods.  If we then open PictureList.cs file, you will find the following code stubbed out for you:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_76.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_37.png" width="394" height="470" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Notice that because the code we wrote to consume methods like _PicList.Peek() expect a string back, the editor has automatically given the methods a return type of ‘string’.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now I’ll add the logic to retrieve a list of jpg’s from the Windows install and give me the ability to walk through them:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_80.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_39.png" width="549" height="365" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The last step is to write the DisplayPicture method in Window1.xaml.cs.  I can do this once again by selecting the method name and hitting &lt;ctrl&gt;+. and then fill out the code as follows:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_82.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_40.png" width="559" height="143" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This code will take the jpg and convert it into a BitmapImage that can be displayed.  The next line of code sets the Source of our XAML image contorl to this bitmap so it can be displayed on the screen.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The program now builds cleanly.  I will set a breakpoint in the Peek() method as well as the DisplayPicture method.  Do this by placing the cursor on those functions and hitting the F9 button (notice the red breakpoint circle in the margin):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_84.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_41.png" width="439" height="106" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_86.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_42.png" width="442" height="112" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now let’s run the application by hitting the F5 button.  Our first breakpoint in the Peek() method is now hit:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_88.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_43.png" width="640" height="386" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You’ll find your breakpoint marked in yellow where we stopped.  In addition you’ll find the traditional Call Stack view in the lower right.  Because I’m using Visual Studio Team System, I also have the “Debug History” view on by default:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_118.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_58.png" width="332" height="396" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The default settings have captured interesting information about the execution of my program so far including all of the Registry accesses my program has made (either by me or the underlying system) and system events (like breakpoints, exceptions, etc).&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If I hover my cursor over the _PicList variable in the editor, I get a pop up watch window.  If I hover my cursor over the little square at the end and click:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_90.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_44.png" width="441" height="126" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;then you will get a sticky DataTips window in the editor (the arrow is just to demonstrate the result, it isn’t in the editor):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_92.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_45.png" width="590" height="97" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This is a simple example of using the new WPF editor.  The sticky DataTips window is a WPF adornment to the text buffer tied into the debugger.  You can use it like a normal watch window by expanding the array contents, etc.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_94.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_46.png" width="505" height="184" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Let’s hit F5 and continue the program.  My application now works including the Prev and Next buttons:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_96.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_47.png" width="588" height="287" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The only issue is the name of the file is not being updated.  Click the Next button again to our break point in DisplayPicture().  There is no code to update the label in this method:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_98.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_48.png" width="525" height="117" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;To fix this, let’s add a new line of code:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_100.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_49.png" width="379" height="357" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;With the Edit &amp;amp; Continue feature you can make new code changes while the application is running.  Update the code to the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_102.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_50.png" width="385" height="109" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now press F5 to continue and the path is updated:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_104.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_51.png" width="511" height="243" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;There are a couple of fit and finish things I’d like to change.  Let’s stretch the image to fit by adding Stretch=”Fill”:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_106.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_52.png" width="514" height="274" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Next let’s add a rectangle to frame the picture:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_112.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_55.png" width="538" height="57" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You can then select the rectangle and set the Fill property to give it a color.  This brings up the new inline color palate:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_108.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_53.png" width="213" height="244" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I chose a blue/black color and you get the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_114.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_56.png" width="554" height="240" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The final XAML markup then looks like the following:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_116.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010WalkThroughonBeta1_7E6C/image_thumb_57.png" width="574" height="218" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This sample could be improved in a number of ways, including using data bound controls to enumerator classes, adding all the proper try/catch logic, etc.  But my main goal here was to show off some editor / designer features so I’ll leave that as an exercise to the user.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Enjoy!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-7660413242567985768?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/7660413242567985768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/vs2010-tutorial-build-wpf-app-step-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/7660413242567985768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/7660413242567985768'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/vs2010-tutorial-build-wpf-app-step-1.html' title='VS2010 Tutorial: Build a WPF App (Step 1)'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8535043275449206997</id><published>2010-03-24T00:02:00.000-07:00</published><updated>2010-03-24T00:03:24.768-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Tutorial: Getting Started with TFS in VS2010</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; font-size: 12px; color: rgb(51, 51, 51); line-height: 18px; "&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Earlier this month we announced the &lt;a href="http://blogs.msdn.com/jasonz/archive/2009/10/02/announcing-tfs-basic.aspx" mce_href="http://blogs.msdn.com/jasonz/archive/2009/10/02/announcing-tfs-basic.aspx" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;new Basic configuration for TFS&lt;/a&gt;.  This configuration gives you an easy to set up version of TFS that supports source control, work items, and builds.  It is a great place to migrate your Visual Source Safe assets and pick up new features in the process.  Now that we have released the formal Beta 2 bits for VS2010, I wanted to do a walk through on how to get started using the system. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This post will be most helpful for those of you who have not installed or used TFS before.  TFS can support sophisticated environments that include reporting, SharePoint integration, support across multiple domains, distributed databases, etc.  I’m not going to cover any of that here.  Instead my goal is to help you understand “why TFS” and how you can get started using the system.  In a future post I will walk through the process to convert a Visual Source Safe database into TFS in case you are coming from a VSS deployment today.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;First let’s talk about “why TFS?”  The goal of &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/dd408382.aspx" mce_href="http://msdn.microsoft.com/en-us/teamsystem/dd408382.aspx" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;Team Foundation Server&lt;/a&gt; is to create a central repository with a set of tools that make it really easy to collaborate between roles.  You could try to stitch together multiple disparate systems as follows:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image1.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image1.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image1_thumb.png" width="562" height="246" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image1_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In this case each system has its own storage, own set of identity for assets, own commands and tools.  Getting this going is like trying to hook up a set of custom stereo components:  you can pull it off but it’s going to be a lot of work and you are missing out on some stuff.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;What I’d rather have is a system which can integrate these items together and then enable my default work flow through the system:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image10.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image10.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image10_thumb.png" width="358" height="251" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image10_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This integration enables some very common scenarios.  In a typical day I’m going to edit source code, build the product, test it, file bugs, fix them, lather/rinse/repeat.  When the entire work flow is supported with one integrated repository then all items can be related to each other.  As an example when I check in bug fixes I’d really like to see those defects resolved with the change set recorded (see sample below).&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The Basic configuration of TFS allows you to do precisely this which is a big improvement over just having source control.  The full version of TFS then adds new features including automated testing, virtual lab deployment, and architectural validation (to name a few).  This expands your work flow as follows:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image14.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image14.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image14_thumb.png" width="431" height="300" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image14_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You can decide which of these new components you add when you use the Visual Studio Premium and Ultimate SKUs. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;There are many ways to access TFS.  As an engineer your most typical access point will be a version of Visual Studio.  But if you are a tester you can use the new Test and Lab Manager product (no VS install necessary).  If you are a project manager, you can also use the Web interface, Excel, Microsoft Project, or (new for VS2010) MOSS support for dashboards.  More on this later.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In the rest of this post I will give you some step by step instructions on how to get going with TFS using the basic configuration for your first project.&lt;/p&gt;&lt;h2&gt;Getting Started&lt;/h2&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now that you have the conceptual level it’s time to hook things up.  You should start by doing the steps listed in Brian Harry’s TFS post &lt;a href="http://blogs.msdn.com/bharry/archive/2009/10/01/tfs-2010-for-sourcesafe-users.aspx" mce_href="http://blogs.msdn.com/bharry/archive/2009/10/01/tfs-2010-for-sourcesafe-users.aspx" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;here&lt;/a&gt;.  This will get all the required software on your machine with a default collection, creatively enough called DefaultCollection.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point we can connect to the TFS collection from Visual Studio.  The easiest way to accomplish this is to use the Team Menu (you can also use the link from the home page):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb.png" width="412" height="276" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You will be asked to find the Server where TFS lives.  In this case my Windows 7 machine is called JLZB2REL.  Add the server to the list using the Add button, then click Close:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image4.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image4.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image4_thumb.png" width="560" height="432" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image4_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point you can select the server from the combo box and then the DefaultCollection, then click Connect:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image8.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image8.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image8_thumb.png" width="557" height="434" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image8_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The Team Explorer tab will now have your server connection and DefaultCollection, but we don’t yet have a TFS Project to store anything in yet:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image131%5B1%5D.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image131%5B1%5D.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image131%5B1%5D_thumb.png" width="195" height="100" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image131%5B1%5D_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;For this tutorial I have created a new Windows Form project to act as our sample solution (File, New Project, Windows Forms).  If you try to add this new code project to source control, you will get an error.  For example:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image16.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image16.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image16_thumb.png" width="406" height="455" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image16_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;After you select the “Add Solution to Source Control” menu item you get the error “No team project source control folders are available.”:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_12.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_5.png" width="338" height="156" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_5.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The error isn’t that intuitive (especially given the word project is used for both TFS and inside your VS code solution but are different things).  The error means you must create an actual TFS project to contain all of the assets for your work.  In the Team Explorer, right click your collection and choose New Team Project:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_34.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_34.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_16.png" width="491" height="306" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_16.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In this case I’m going to create a TFS project for an Accounts Payable system.  This project will contain all of the solutions, data, etc required for the overall system.  After entering the data, click Next:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image671.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image671.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image671_thumb.png" width="573" height="463" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image671_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The Agile template is the default but you can also select CMMI.  You can find more details on MSDN about the project template types.  If you are using any agile methodologies (like TDD) this is a fine choice.  After making a choice, just click Finish:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image71.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image71.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image71_thumb.png" width="576" height="466" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image71_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You will get various status updates as the project is being created:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image75.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image75.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image75_thumb.png" width="582" height="468" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image75_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;After success, click the Close button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image79.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image79.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image79_thumb.png" width="588" height="478" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image79_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Team Explorer will now have the project ready to hold Work Items, Builds, and Source Control:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_44.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_44.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_21.png" width="268" height="352" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_21.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point you can update the project collection.  Let’s add the new solution to TFS again.  Right click the project in the Solution Explorer and select Add Solution to Source Control:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_46.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_46.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_22.png" width="406" height="455" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_22.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point you could create a new folder in TFS for the solution or just take the default.  When you are happy, click the OK button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image91.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image91.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image91_thumb.png" width="475" height="471" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image91_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Upon success the Solution Explorer will now show the files are under source control (see the ‘+’ symbol in front of the files):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image95.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image95.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image95_thumb.png" width="301" height="190" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image95_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You will also see the list source control actions taken to publish the solution.  Add a comment and then click Check-In:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image104.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image104.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image104_thumb.png" width="671" height="293" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image104_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Confirm the check-in by clicking Yes.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image108.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image108.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image108_thumb.png" width="240" height="139" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image108_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point your new solution is in TFS and ready for Work Items.&lt;/p&gt;&lt;h2&gt;Work Items&lt;/h2&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You can create work items directly inside Visual Studio using the Team Explorer, through the web front end, and the Test and Lab Management tool.  To look at your work items, open the Team Explorer and expand the Work Items, Team Queries item.  You can then double click any query (such as Active Bugs) to see any items available to you:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_58.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_58.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_28.png" width="275" height="284" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_28.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Our TFS project is empty so there are no active bugs in the list:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_60.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_60.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_29.png" width="554" height="174" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_29.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Let’s create a new item just to get us in business.  Select the Team, New Work Item menu.  Here you can create several types of work items to track features, defects, etc.  We’ll select Bug to get going:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_62.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_62.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_30.png" width="484" height="170" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_30.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Enter any data you want for the new bug and click Save Work Item to commit it to the database:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image123.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image123.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image123_thumb.png" width="613" height="386" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image123_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If you now refresh your active bug query list, you will see the new bug:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_66.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_66.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_32.png" width="613" height="532" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_32.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Let’s add a real bug to fix our project.  In my example I just created a default Windows Forms application.  We’ll want to update the title:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_68.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_68.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_33.png" width="603" height="506" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_33.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now we need to fix the bug.  Navigate back to the Solution Explorer, select Form1.cs then choose Check Out for Edit:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_70.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_70.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_34.png" width="363" height="237" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_34.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Click the Check Out button to confirm:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image139.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image139.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image139_thumb.png" width="597" height="378" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image139_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The file will now have a check mark next to it so you know it is open for edit:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_74.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_74.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_36.png" width="244" height="176" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_36.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;As you update the Text property of the main window, VS will automatically check out any dependent files for you:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_76.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_76.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_37.png" width="265" height="544" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_37.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This is a Windows Forms application but it works on all solution/project types.  Now that we are happy with the code change, select the Pending Changes tab in the bottom of VS:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_78.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_78.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_38.png" width="396" height="267" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_38.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In this case we are fixing a bug, so click the Work Items icon button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_80.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_80.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_39.png" width="134" height="204" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_39.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Select bug #2 which tracks our title error.  We are going to resolve it with this check-in:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_82.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_82.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_40.png" width="554" height="155" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_40.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Add any comments you want and click Check-In, then Yes to confirm:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_84.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_84.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_41.png" width="338" height="200" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_41.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image165.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image165.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image165_thumb.png" width="240" height="153" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image165_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If you refresh bug #2, you will now see the status changed to Resolved and the history is updated:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_88.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_88.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_43.png" width="388" height="239" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_43.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Notice the change set (the set of source control changes) have been automatically included in the history.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image176.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image176.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image176_thumb.png" width="401" height="224" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image176_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point you could continue to create and fix bugs as required to ship your solution. &lt;/p&gt;&lt;h2&gt;Other Ways to Explore TFS&lt;/h2&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I mentioned that you don’t have to use VS itself to access the TFS repository.  We’ve done a lot of deep integration with other clients like the Web and Office.  As an example, I can simply pull up my web browser and go right to my server by using the server name (where 8080 is the default port):  &lt;a title="http://jlzb2rel:8080/tfs/" href="http://jlzb2rel:8080/tfs/" mce_href="http://jlzb2rel:8080/tfs/" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;http://jlzb2rel:8080/tfs/&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image18.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image18.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image18_thumb.png" width="571" height="435" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image18_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point I can explore my collections and projects.  If you select the new AccountsPayable project we just created then the Continue button, you get more details.  In this case by navigating to the Work Items tab I can find the bugs in the system including our newly resolved bug:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image22.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image22.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image22_thumb.png" width="575" height="438" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image22_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This is a really easy way to explore your project from any machine with no setup required.  There is similar support for using Excel, Microsoft Project, etc.  This kind of access makes it easy for all people working on your project (engineers and project managers) to work together.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point you have a very useful set of assets you can use to get your job done.  For those of you using VSS today, you might be very happy with just this level of support.  You can put down this tutorial now and come back later if you want to try some advanced features, for example the testing scenario I showed using beta 1 in this &lt;a href="http://blogs.msdn.com/jasonz/archive/2009/05/26/vs2010-tutorial-testing-tutorial-step-2.aspx" mce_href="http://blogs.msdn.com/jasonz/archive/2009/05/26/vs2010-tutorial-testing-tutorial-step-2.aspx" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;tutorial&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Build Support&lt;/h2&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The next typical part of your work flow will be to automate your builds for the product.  Assuming you followed Brian’s installation instructions, you now have local build support on your machine with TFS Basic.  The first step is to navigate to the Team Explorer, right click on Build Definitions, and select New Build Definition:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_102.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_102.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_50.png" width="515" height="387" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_50.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will give us a set of definitions to fill out, just like a code project property page:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_104.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_104.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_51.png" width="312" height="194" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_51.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The Trigger page allows us to decide when builds are kicked off.  You have many options to pick from:&lt;/p&gt;&lt;ul style="margin-left: 0px; padding-left: 2em; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; "&gt;&lt;li&gt;By default this is manual which is the option we will use.  We will have to kick of our own builds with this option.&lt;/li&gt;&lt;li&gt;Continuous Integration is very helpful when you want to have a new build after every check-in.  This allows you to validate new changes right away rather than waiting later when many check-ins get mixed together. &lt;/li&gt;&lt;li&gt;Rolling builds give you a way to batch changes together which is very handy when builds are starting to take a while and you can’t afford to do every one. &lt;/li&gt;&lt;li&gt;Gated Check-ins allow you to ensure all check-ins build before they are committed to TFS.  This makes sure you never expose a build break to other members of your team.&lt;/li&gt;&lt;li&gt;Scheduled builds are useful for getting a daily build out for the entire team to try out.&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You can create and use many different build definitions which allow you to employ different build types for different purposes.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You can explore all the tabs at your leisure (each is fully documented with the product).  But we need to resolve the yellow warning sign on Build Defaults by giving the build a place to store our new build, in this case a public UNC I created on my machine:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_108.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_108.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_53.png" width="550" height="238" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_53.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now you can save the build definition to TFS.  If we go back to the Team Explorer we can queue a build of the project:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_110.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_110.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_54.png" width="434" height="350" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_54.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;We’ll get a confirmation dialog where we can just select the Queue button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image461.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image461.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image461_thumb.png" width="412" height="525" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image461_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will then queue off a build on my machine as shown by the status page:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image511.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image511.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image511_thumb.png" width="541" height="250" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image511_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If you double click the queued build you will get the detailed status of the build:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image551.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image551.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image551_thumb.png" width="543" height="285" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image551_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;From here you can see warnings and errors, view the log file, navigate to the drop, etc.  As an example if you select the “View Log File” link you can see the executed build script (subset):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image591.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image591.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image591_thumb.png" width="537" height="259" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image591_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;If you select the Open Drop Folder link you will be taken to our drop location:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image63.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image63.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image63_thumb.png" width="528" height="299" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image63_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now anyone can pick up the build and do their daily testing, release to a customer, etc.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point you really have everything you need to make full use of the Basic configuration of TFS. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In the future I will do a tutorial on how to hook up the Virtual Lab system (part of Visual Studio Ultimate) which allows you to deploy complex applications to a Hyper-V environment and do automated testing.&lt;/p&gt;&lt;h2&gt;Creating a New TFS Collection&lt;/h2&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;[Note this section is totally optional]  You can store all of your work in one TFS Collection if you like.  If you are a Visual SourceSafe user today, this is just fine and you can skip this whole section.  But if you want to create a new top level collection, it is pretty easy.  The first step is to start then Team Foundation Administration Console: &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_14.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_6.png" width="244" height="195" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_6.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;After the console starts, select the Team Project Collections item and click the “Create Team Project Collection” link:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image27.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image27.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image27_thumb.png" width="558" height="384" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image27_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Fill in a name for the project collection and any description you want, then click Next:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_18.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_8.png" width="461" height="234" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_8.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Accept the defaults for the data tier, then click Next:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_20.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_20.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_9.png" width="464" height="211" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_9.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The Basic configuration for TFS does not support Lab Management, so just click Next on this step:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_22.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_22.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_10.png" width="469" height="149" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_10.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point all the required data is configured and you can click the Verify button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_24.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_24.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_11.png" width="527" height="268" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_11.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The verification step will ensure the collection can be created:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_26.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_26.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_12.png" width="527" height="178" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_12.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Once it passes, click the Create button:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_28.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_28.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_13.png" width="516" height="260" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_13.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will provision all the required pieces of the TFS store per our configurations.  Click Next and you are done:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_30.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_30.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_14.png" width="534" height="181" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_14.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You will now see the new project collection with the default version:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_32.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_32.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_15.png" width="435" height="155" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/VS2010TFSTutorial_A94C/image_thumb_15.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8535043275449206997?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8535043275449206997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/tutorial-getting-started-with-tfs-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8535043275449206997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8535043275449206997'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/tutorial-getting-started-with-tfs-in.html' title='Tutorial: Getting Started with TFS in VS2010'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-6137308878660697474</id><published>2010-03-23T23:59:00.000-07:00</published><updated>2010-03-24T00:00:14.451-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Sample: Get Calendar Data Using Exchange Web Services (C#)</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; font-size: 12px; color: rgb(51, 51, 51); line-height: 18px; "&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;When someone asked my former manager what he did on a daily basis his answer was “Go to meetings and delete email”.  Unfortunately that often describes my life as well.  It is always challenging to manage your time.  I want to ensure I’m spending enough on technology, people, customers, etc.  To make this easier, I’m using the Categories feature of Exchange to code each meeting I have (these are my custom categories):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_4.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_4.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_1.png" width="419" height="480" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_1.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At a glance I can then tell what kind of meeting I’m headed to next.  But I still need a way to understand how I’m spending my time every month.  What would be great is to collect all the category data from all my meetings and then get the ratios.  This blog covers a sample that does that.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;There are several ways you can get your calendar data.  In this case the task is very simple:  collect all calendar items in a given month including the category setting.  The easiest way to do this is to use Exchange Web Services support to ask the server for the data directly.  The sample has a library which can be used to connect to EWS and collect all the calendar items and a console application which provides an easy way to drive the program logic.  The following shows the overall structure of the sample code (click for larger image):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_16.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_16.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_7.png" width="322" height="709" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_7.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The diagram was generated using new Generate Dependency Graph feature of Visual Studio Ultimate.  The graph is created by shredding the binaries themselves so we find &lt;strong&gt;everything&lt;/strong&gt;.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;There are a few key areas to look through for EWS code.  The first is the GetExchangeProxy helper which sets up the connection to Exchange using ExchangeServiceBinding.  In this case we are using integrated Windows security so that a userid/password is not required (you could supply them as an alternative):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_12.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_12.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_5.png" width="559" height="262" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_5.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The next interesting helper method is BuildQueryFilter which is responsible for creating a FindItemType filter class.  This class allows you to construct a query for the server to find the data we care about.  The code builds up a series of arguments to scope calendar items between the start and end dates.  For example, this snippet of code sets a criteria of all dates greater than or equal to the start date:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_18.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_18.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_8.png" width="774" height="155" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_8.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;A similar block of code sets the filter for less than or equal to the end date.  Finally these two conditions are combined with an And clause to essentially mean “&gt;= start AND &lt;= end”:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_20.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_20.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_9.png" width="616" height="63" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_9.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Once the filter is set, we can retrieve all of the calendar items we asked for.  In this case I’m returning the array in our own CalendarItemList which will allow us to enumerate the data from the client code.  The GetNextItem method will then strip the full Exchange calendar item (with over 100 fields) down to just a handful we care about and return the data in a CalendarItemData instance.  There are a huge number of fields available for return.  You can use the DebugTraceCalItem helper method to dump the entire type if you are interested in pulling back more data.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The console application then becomes pretty easy:  parse and validate all the arguments, connect to the exchange server, then write each calendar item out in a comma separated view (CSV) format.  The output can either be written directly to a file or to the console for redirection to other locations.  At that point it is very easy to simply open the file directly in Excel where you can edit it, create charts, analyze it, etc. &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I’ve included a sequence diagram in the project which demonstrates the core logic of the Run method (click for larger image):&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_14.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_14.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_6.png" width="296" height="493" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_6.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;(Note that generating a sequence diagram with VS Ultimate is very easy: just place your cursor in the method and right click to run “Generate Sequence Diagram”)&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_22.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_22.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_10.png" width="513" height="238" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/SampleGetCalendarDataUsingExchangeWebSer_802F/image_thumb_10.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Running the application is now very simple:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;span style="font-family:cour;font-size:85%;"&gt;timespent /start:9/1/2009 /end:9/30/2009 /out:c:\temp\sept09.csv /mailpath:https://&lt;em&gt;mydomain&lt;/em&gt;/ews/exchange.asmx&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;“mydomain” in this case is the domain address for your Exchange server.  You can get this from your exchange administrator (it will likely match the path you are using on your phone to sync your mail over the air). &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;You can download the Exchange SDK from MSDN &lt;a href="http://msdn.microsoft.com/en-us/exchange/default.aspx" mce_href="http://msdn.microsoft.com/en-us/exchange/default.aspx" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;here&lt;/a&gt;.  You can download a full copy of the source code &lt;a href="http://code.msdn.microsoft.com/timespent" mce_href="http://code.msdn.microsoft.com/timespent" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Enjoy!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-6137308878660697474?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/6137308878660697474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/sample-get-calendar-data-using-exchange.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6137308878660697474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6137308878660697474'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/sample-get-calendar-data-using-exchange.html' title='Sample: Get Calendar Data Using Exchange Web Services (C#)'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-2398829317479764333</id><published>2010-03-23T23:52:00.001-07:00</published><updated>2010-03-23T23:53:24.688-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Custom Profile Properties</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_thumb.png" width="644" height="441" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;.NET Framework PropertyGrid Control and supporting API&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Most of the “magic” that is enabling this example has been in the .NET framework for a number of years now. Check out &lt;a href="http://msdn.microsoft.com/en-us/library/aa302326.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;this article&lt;/a&gt; for a broad overview of what is required to display properties in the .NET PropertyGrid. This&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163816.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;old article&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163804.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;this one&lt;/a&gt; are also good for background information.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The three main .NET types that I made use of to create this example are:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;TypeConverter&lt;/a&gt; – I derived a type off this class in order to proffer up the actual property that was used to expose my new type instance. This derived type is also responsible for converting the custom type to other types as needed.&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;PropertyDescriptor&lt;/a&gt; – Derived off this type in order to handle the actual setting and getting of the binary property information.&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.design.uitypeeditor.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;UITypeEditor&lt;/a&gt; – Derived off this type in order to display the custom editor seen in the above image&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;With that, we’re ready to get going!&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;Step-by-Step Overview&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Here are the steps required to add a custom stereotype property instance to an existing profile. ( In this example, I add a new property to the “C# class” stereotype, found in the “C# Profile” that ships in the box. ):&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a new VSIX extension to ensure assembly load and to ease testing&lt;/li&gt;&lt;li&gt;Add new property to profile&lt;/li&gt;&lt;li&gt;Create a new C# class that holds the data of our new property&lt;/li&gt;&lt;li&gt;Derive a new type from TypeConverter&lt;/li&gt;&lt;li&gt;Derive a new type from PropertyDescriptor&lt;/li&gt;&lt;li&gt;Derive a new type from UITypeEditor&lt;/li&gt;&lt;li&gt;Create a new Dialog to edit the values of your custom property&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;1) Create a new VSIX extension&lt;/span&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;I talk about creating VSIX extensions a little &lt;a href="http://blogs.msdn.com/camerons/archive/2010/01/08/uml-profiles-and-visual-studio-2010-ultimate-part-one.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;here&lt;/a&gt;, and Peter goes into detail &lt;a href="http://www.peterprovost.org/blog/post/Extending-Visual-Studio-2010-UML-Designers-ndash3b-Part-1-Getting-Started.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;here&lt;/a&gt;. The code I’m going to show you below is actually code running on the very-soon-to-be-made-public Release Candidate. The RC is so close to shipping, that I figured I’d show code targeting that build rather than Beta2, as it will also be correct for the RTM bits. But if you just can’t wait, you should be able to figure out how to make this code work on Beta2 bits without much hassle, especially after reading the two posts I just mentioned.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;All that said, create a new VSIX project, add a new class, and throw in this code:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.ComponentModel.Composition;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; Microsoft.VisualStudio.Modeling.ExtensionEnablement;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; "&gt;namespace&lt;/span&gt; CustomProfilePropertyTest&lt;br /&gt;{&lt;br /&gt;    [Export(&lt;span style="color: blue; "&gt;typeof&lt;/span&gt;( ICommandExtension))]&lt;br /&gt;    [ClassDesignerExtension]&lt;br /&gt;    &lt;span style="color: blue; "&gt;class&lt;/span&gt; CommandExtension : ICommandExtension&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;void&lt;/span&gt; Execute(IMenuCommand command)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;void&lt;/span&gt; QueryStatus(IMenuCommand command)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;string&lt;/span&gt; Text&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;get&lt;/span&gt; { &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;typeof&lt;/span&gt;(CustomProfileProperty).AssemblyQualifiedName; }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;This extension is really just designed to bootstrap your new property type assembly into Visual Studio, as well as give you a quick way of seeing the fully qualified Assembly name by putting it into a menu item on the class diagram. So on my box, my menu item, given the above code, looks like this:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_3.png" width="930" height="261" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;You’ll notice that this project has been signed. This is very important. Your custom TypeConverter ( more later ) will not be loaded by Visual Studio if it is not contained in a signed assembly. Don’t forget, or you won’t see the right results!&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Easiest way to sign your assembly is to bring up the property editor of your project, click on the “Signing” tab, and click the appropriate settings:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_4.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_thumb_3.png" width="576" height="446" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;2) Add new property to profile&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Now open up the CSharp.profile file found here: %Program Files%\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\UmlProfiles\CSharp.Profile. We’re going to add a new property to the “C# class” stereotype.  You need to modify this file in two places.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The first place is in the “properties” section of the “C# class” stereotype element. Here’s a shot of my property, right after the “Is Partial” property:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_5.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_thumb_4.png" width="640" height="332" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Take note of the property name ( “CustomProperty” ), the display name ( “Custom Property Example”, which is what the user will see in the property editor ), and the name of the externalTypeMoniker element. This is the most important part of this example. This is where the fully qualified assembly name comes in.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The second place is is the propertyTypes section. You need to add a new “externalType” entry, like so:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_6.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_thumb_5.png" width="640" height="153" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Again, make sure you get those two entries right, or things won’t work right.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;3) Create a new C# class that holds the data of our new property&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Now create the type that will represent your new stereotype property. Here’s what I used:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;    [TypeConverter( &lt;span style="color: blue; "&gt;typeof&lt;/span&gt;( CustomProfilePropertyTypeConverter ))]&lt;br /&gt;    [Serializable]&lt;br /&gt;    &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;class&lt;/span&gt; CustomProfileProperty&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;string&lt;/span&gt; Name { &lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;int&lt;/span&gt; Age { &lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; DateTime Birthday { &lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; Color HairColor { &lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;    }&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;You’ll notice that I have applied two attributes to the new type, both quite important. The TypeConverter attribute associates the “CustomProfilePropertyTypeConverter” with the “CustomProfileProperty” type. The framework now knows what type of TypeConverter to use when dealing with a CustomProfileProperty. ( We’ll be creating the TypeConverter in our next step, so hang tight! ).&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The “Serializable” attribute is also important, as I make use of the BinaryFormatter object later on. This makes serializing the instance data of this type real simply, allowing us to store that data in a string variable associated with the stereotype property instance ( again, more later ).&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;4) Derive a new type from TypeConverter&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Now let’s create that new custom TypeConverter. Here’s the code:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;    &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;class&lt;/span&gt; CustomProfilePropertyTypeConverter : TypeConverter&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;object&lt;/span&gt; ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, &lt;span style="color: blue; "&gt;object&lt;/span&gt; &lt;span style="color: blue; "&gt;value&lt;/span&gt;, System.Type destinationType)&lt;br /&gt;        {&lt;br /&gt;            // We're only looking &lt;span style="color: blue; "&gt;for&lt;/span&gt; conversion to the String type, and then only &lt;span style="color: blue; "&gt;if&lt;/span&gt; the &lt;span style="color: blue; "&gt;value&lt;/span&gt; coming &lt;span style="color: blue; "&gt;in&lt;/span&gt;&lt;br /&gt;            // &lt;span style="color: blue; "&gt;is&lt;/span&gt; of type CustomProfileProperty. This will be an indicator to the user that the &lt;span style="color: red; "&gt;"complex"&lt;/span&gt;property&lt;br /&gt;            // has actually been &lt;span style="color: blue; "&gt;set&lt;/span&gt;.&lt;br /&gt;            &lt;br /&gt;            &lt;span style="color: blue; "&gt;if&lt;/span&gt; (destinationType.Equals(&lt;span style="color: blue; "&gt;typeof&lt;/span&gt;(String)) &amp;amp;&amp;amp; &lt;span style="color: blue; "&gt;value&lt;/span&gt; &lt;span style="color: blue; "&gt;is&lt;/span&gt; CustomProfileProperty)&lt;br /&gt;                &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: red; "&gt;"Property Set"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;base&lt;/span&gt;.ConvertTo(context, culture, &lt;span style="color: blue; "&gt;value&lt;/span&gt;, destinationType);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;bool&lt;/span&gt; GetPropertiesSupported(ITypeDescriptorContext context)&lt;br /&gt;        {&lt;br /&gt;            // Need to &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;true&lt;/span&gt; here &lt;span style="color: blue; "&gt;in&lt;/span&gt; order &lt;span style="color: blue; "&gt;for&lt;/span&gt; the GetProperties method to be called&lt;br /&gt;            // by the framework&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;bool&lt;/span&gt; CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)&lt;br /&gt;        {&lt;br /&gt;            // Need to respond &lt;span style="color: blue; "&gt;true&lt;/span&gt; &lt;span style="color: blue; "&gt;for&lt;/span&gt; conversions to String &lt;span style="color: blue; "&gt;in&lt;/span&gt; order &lt;span style="color: blue; "&gt;for&lt;/span&gt; the ConvertTo method to be called. See above&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue; "&gt;if&lt;/span&gt; (destinationType.Equals(&lt;span style="color: blue; "&gt;typeof&lt;/span&gt;(&lt;span style="color: blue; "&gt;string&lt;/span&gt;)))&lt;br /&gt;                &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;base&lt;/span&gt;.CanConvertTo(context, destinationType);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context,&lt;span style="color: blue; "&gt;object&lt;/span&gt; &lt;span style="color: blue; "&gt;value&lt;/span&gt;, Attribute[] attributes)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;if&lt;/span&gt; (context != &lt;span style="color: blue; "&gt;null&lt;/span&gt; &amp;amp;&amp;amp; context.Instance &lt;span style="color: blue; "&gt;is&lt;/span&gt; IEnumerable&lt;istereotypepropertyinstance&gt;)&lt;br /&gt;            {&lt;br /&gt;                IEnumerable&lt;istereotypepropertyinstance&gt; props = (IEnumerable&lt;istereotypepropertyinstance&gt;)context.Instance;&lt;br /&gt;                var propInstance = (&lt;span style="color: blue; "&gt;from&lt;/span&gt; i &lt;span style="color: blue; "&gt;in&lt;/span&gt; props &lt;span style="color: blue; "&gt;where&lt;/span&gt; i.Name == &lt;span style="color: red; "&gt;"CustomProperty"&lt;/span&gt; &lt;span style="color: blue; "&gt;select&lt;/span&gt; i).First();&lt;br /&gt;&lt;br /&gt;                PropertyDescriptorCollection collection = &lt;span style="color: blue; "&gt;new&lt;/span&gt; PropertyDescriptorCollection(&lt;br /&gt;                        &lt;span style="color: blue; "&gt;new&lt;/span&gt; PropertyDescriptor[] { &lt;br /&gt;                            &lt;span style="color: blue; "&gt;new&lt;/span&gt; CustomProfilePropertyDescriptor(propInstance, &lt;span style="color: red; "&gt;"Custom Property Example"&lt;/span&gt;,&lt;span style="color: blue; "&gt;new&lt;/span&gt; Attribute[] { &lt;span style="color: blue; "&gt;new&lt;/span&gt; BrowsableAttribute(&lt;span style="color: blue; "&gt;true&lt;/span&gt;) }) &lt;br /&gt;                        });&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: blue; "&gt;return&lt;/span&gt; collection;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;I put comments explaining most of the simple methods, but let me describe what’s going on in the GetProperties method. When examining an element out of the UML store, you can find out what Stereotypes are applied to a particular element which returns you a collection of IStereotypeInstances. Each IStereotypeInstance can have many IStereotypePropertyIntance objects. Hopefully the following image will make this more clear, and show how these types equate to what you see in the CSharp.profile file:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_7.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomProfileProperties_12AA1/image_thumb_6.png" width="644" height="295" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;So the first line of substance in this method is looking for the the IStereotypePropertyInstance named after our custom type we added in step 2. Once we find it, then we create a new instance of our CustomProfilePropertyDescriptor passing in the IStereotypePropertyInstance object that ultimately owns this custom property. By creating this custom property descriptor, we are essentially adding an entire new hierarchy of values that are ultimately stored on the root IStereotypePropertyInstance ( in this case called “CustomProperty” ).&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;In the example above, I’m only creating one property, but you could create as many as you need.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;5) Derive a new type from PropertyDescriptor&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Here’s the code that shows my derived type off of PropertyDescriptor:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;    &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;class&lt;/span&gt; CustomProfilePropertyDescriptor : PropertyDescriptor&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; CustomProfileProperty CustomProfileType{ &lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: blue; "&gt;private&lt;/span&gt; IStereotypePropertyInstance Instance {&lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; CustomProfilePropertyDescriptor( IStereotypePropertyInstance instance, &lt;span style="color: blue; "&gt;string&lt;/span&gt; name, Attribute[] attrs)&lt;br /&gt;            : &lt;span style="color: blue; "&gt;base&lt;/span&gt;(name, attrs)&lt;br /&gt;        {&lt;br /&gt;            Instance = instance;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;bool&lt;/span&gt; CanResetValue(&lt;span style="color: blue; "&gt;object&lt;/span&gt; component)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; Type ComponentType&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;get&lt;/span&gt; { &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;typeof&lt;/span&gt;( CustomProfileProperty); }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;object&lt;/span&gt; GetValue(&lt;span style="color: blue; "&gt;object&lt;/span&gt; component)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; CustomProfileType;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;bool&lt;/span&gt; IsReadOnly&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;get&lt;/span&gt; { &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;false&lt;/span&gt;; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; Type PropertyType&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;get&lt;/span&gt; { &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;typeof&lt;/span&gt;(CustomProfileProperty); }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;void&lt;/span&gt; ResetValue(&lt;span style="color: blue; "&gt;object&lt;/span&gt; component)&lt;br /&gt;        {&lt;br /&gt;            CustomProfileType = &lt;span style="color: blue; "&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;void&lt;/span&gt; SetValue(&lt;span style="color: blue; "&gt;object&lt;/span&gt; component, &lt;span style="color: blue; "&gt;object&lt;/span&gt; &lt;span style="color: blue; "&gt;value&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;if&lt;/span&gt; (&lt;span style="color: blue; "&gt;value&lt;/span&gt; &lt;span style="color: blue; "&gt;is&lt;/span&gt; CustomProfileProperty)&lt;br /&gt;            {&lt;br /&gt;                CustomProfileType = &lt;span style="color: blue; "&gt;value&lt;/span&gt; &lt;span style="color: blue; "&gt;as&lt;/span&gt; CustomProfileProperty;&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: blue; "&gt;using&lt;/span&gt; (MemoryStream stream = &lt;span style="color: blue; "&gt;new&lt;/span&gt; MemoryStream())&lt;br /&gt;                {&lt;br /&gt;                    BinaryFormatter formatter = &lt;span style="color: blue; "&gt;new&lt;/span&gt; BinaryFormatter();&lt;br /&gt;                    formatter.Serialize(stream, &lt;span style="color: blue; "&gt;value&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;                    &lt;span style="color: blue; "&gt;byte&lt;/span&gt;[] contextBytes = stream.ToArray();&lt;br /&gt;                    Instance.Value = System.Convert.ToBase64String(contextBytes);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;bool&lt;/span&gt; ShouldSerializeValue(&lt;span style="color: blue; "&gt;object&lt;/span&gt; component)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;object&lt;/span&gt; GetEditor(Type editorBaseType)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;new&lt;/span&gt; CustomProfilePropertyUITypeEditor();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Most of the methods are self explanatory, but I’ll call out a couple. In the SetValue method is where the data that the user has provided for your the new property gets set back onto the IStereotypePropertyInstance object associated with the Class element. Ultimately, that data is serialized back into an XML file, so you can’t just set the Value property on Instance to some XML markup, as Value is stored as an XML attribute. So we’ll just serialize the object to a MemoryStream, then convert into a string value. This works great in this instance, as Visual Studio will later use BinaryFormatter to rehydrate the serialized object when reading the information back from disk at a later time.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;You’ll also notice the GetEditor method, which is where you can return you’re derived type off of UITypeEditor, which I’ll show you now.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;6) Derive a new type from UITypeEditor&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Here’s the code:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;    &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;class&lt;/span&gt; CustomProfilePropertyUITypeEditor : UITypeEditor&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; UITypeEditorEditStyle.Modal;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;override&lt;/span&gt; &lt;span style="color: blue; "&gt;object&lt;/span&gt; EditValue(ITypeDescriptorContext context, IServiceProvider provider,&lt;span style="color: blue; "&gt;object&lt;/span&gt; &lt;span style="color: blue; "&gt;value&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            CustomProfilePropertyEditor editor = &lt;span style="color: blue; "&gt;new&lt;/span&gt; CustomProfilePropertyEditor( context.Instance &lt;span style="color: blue; "&gt;as&lt;/span&gt;CustomProfileProperty);&lt;br /&gt;&lt;br /&gt;            IUIService uiService = provider.GetService(&lt;span style="color: blue; "&gt;typeof&lt;/span&gt;(IUIService)) &lt;span style="color: blue; "&gt;as&lt;/span&gt; IUIService;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue; "&gt;if&lt;/span&gt; (uiService != &lt;span style="color: blue; "&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: blue; "&gt;if&lt;/span&gt; (uiService.ShowDialog(editor) == System.Windows.Forms.DialogResult.OK)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: blue; "&gt;return&lt;/span&gt; editor.CustomProfileType;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue; "&gt;return&lt;/span&gt; &lt;span style="color: blue; "&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The key in this type is to return UITypeEditorEditStyle.Modal from the GetEditStyle method in order to get the browse button ( the button with the “…” as the caption ) on the property grid for the property. Then when the user clicks on that button, the EditValue method is called. In our case, we new up our new dialog, use the IUIService provided by Visual Studio to show that dialog, and if everything went ok, return the newly modified custom property.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;7) Create a new Dialog to edit the values of your custom property&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The dialog used to modify the custom properties can literally be anything. I created that simple WinForm dialog in no time by leveraging the Data Sources window to add a Object data source type to the form and binding it to the CustomProfileProperty type we created in step 3. But just for completeness sake, here’s the code:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.ComponentModel;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Drawing;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: blue; "&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; "&gt;namespace&lt;/span&gt; CustomProfilePropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: blue; "&gt;public&lt;/span&gt; &lt;span style="color: blue; "&gt;partial&lt;/span&gt; &lt;span style="color: blue; "&gt;class&lt;/span&gt; CustomProfilePropertyEditor : Form&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; CustomProfileProperty CustomProfileType { &lt;span style="color: blue; "&gt;get&lt;/span&gt;; &lt;span style="color: blue; "&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: blue; "&gt;public&lt;/span&gt; CustomProfilePropertyEditor( CustomProfileProperty customType )&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            CustomProfileType = customType ?? &lt;span style="color: blue; "&gt;new&lt;/span&gt; CustomProfileProperty();&lt;br /&gt;&lt;br /&gt;            customerProfileBindingSource.Add(CustomProfileType);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue; "&gt;private&lt;/span&gt; &lt;span style="color: blue; "&gt;void&lt;/span&gt; OKButtonClicked(&lt;span style="color: blue; "&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            CustomProfileType.Name = nameTextBox.Text;&lt;br /&gt;            CustomProfileType.Birthday = birthdayDateTimePicker.Value;&lt;br /&gt;            Close();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;Summary&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;So that’s it! I hope you can make use of this technique, as it is an easy way to add more complicated types and data to your modeling data that doesn’t require any new serialization strategies, and participates nicely with the Visual Studio undo / redo mechanism without you having to be aware of the details. Cheers!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-2398829317479764333?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/2398829317479764333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/custom-profile-properties_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/2398829317479764333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/2398829317479764333'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/custom-profile-properties_23.html' title='Custom Profile Properties'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-1095489759313779280</id><published>2010-03-23T23:51:00.001-07:00</published><updated>2010-03-23T23:51:28.467-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Sneak peek at the first “Feature Pack” for VS2010 Visualization and Modeling Tools</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="font-size:130%;color:#000040;"&gt;&lt;u&gt;&lt;strong&gt;What’s in this “Feature Pack”?&lt;/strong&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;There are three major areas that this “Feature Pack” is designed to address:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Increased Visualization Support&lt;ol&gt;&lt;li&gt;Visualize your native ( C++ ) code&lt;/li&gt;&lt;li&gt;Visualize your WAP or Web Sites or ASP.NET MVC code&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Increased UML support&lt;ol&gt;&lt;li&gt;Code Generation from UML Class diagram&lt;/li&gt;&lt;li&gt;Rapid population of Modeling Store from Architecture Explorer&lt;/li&gt;&lt;li&gt;XMI 2.1 Import&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Increased support for Layer Diagram Extensibility&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="font-size:130%;color:#000040;"&gt;&lt;u&gt;&lt;strong&gt;Increased Visualization Support&lt;/strong&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;In the RTM release of VS2010, we have great visualization support for managed assemblies. We don’t have any support for native developers, nor did we have first class support for Web projects or Web Sites developed inside Visual Studio.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;With this “Feature Pack”, you now have some great functionality for both native and web projects in Visual Studio 2010.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Native Code Visualization&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;All of the visualization features in the RTM version of VS2010 support managed code ( runtime versions 1.1 on up ). This “Feature Pack” will now allow you to visualize your C++ projects, as well as supporting C++ images ( .dll or exe ), with extra support if you also have the PDBs with those images. The support is in three forms:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Architecture Explorer – allows you to explorer your solution just like you would with managed code via the cascading browser&lt;br /&gt; &lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/SneakpeekatthefirstFeaturePackforVS2010V_CB29/image.png" width="869" height="268" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/li&gt;&lt;li&gt;#include dependencies – pick a header file, and visualize the include dependencies associated with that header file. This is great stuff when you are trying to determine just how bad touching a particular header file will mean to your already taxed build times!&lt;/li&gt;&lt;li&gt;Inter-binary dependencies – drag a native DLL or EXE onto the DGML document surface, and we’ll crack those images and tell you how they are related.&lt;/li&gt;&lt;li&gt;Standard Graph Support – if you select the Generate Dependency-&gt;By Assembly menu with a C++ project loaded, you’ll get a very similar look graph that you are used to on the managed side. Here’s a shot of a simple MFC application showing dependencies on the ATL CString type:&lt;br /&gt;&lt;a href="http://cwskinner.members.winisp.net/SneakpeekatthefirstFeaturePackforVS2010V_CB29/image_3.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/SneakpeekatthefirstFeaturePackforVS2010V_CB29/image_thumb.png" width="644" height="194" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Web Application and Web Site Project Visualizations&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;If you are using Web Site, Web Application Projects, or taking advantage of the latest ASP.NET MVC framework, we’ve got some great stuff coming for you as well! &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/SneakpeekatthefirstFeaturePackforVS2010V_CB29/image_4.png" width="501" height="190" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;We will show you not only how your pages are dependent on each other, but how they are also dependent on controls, and how they are related to the code-behind logic behind them, if applicable. And of course, the ability to drive right into your pages, master templates, and code directly from the graph will be supported.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/SneakpeekatthefirstFeaturePackforVS2010V_CB29/image_5.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/SneakpeekatthefirstFeaturePackforVS2010V_CB29/image_thumb_3.png" width="1028" height="362" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-1095489759313779280?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/1095489759313779280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/sneak-peek-at-first-feature-pack-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/1095489759313779280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/1095489759313779280'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/sneak-peek-at-first-feature-pack-for.html' title='Sneak peek at the first “Feature Pack” for VS2010 Visualization and Modeling Tools'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-6637852576543177644</id><published>2010-03-23T23:48:00.001-07:00</published><updated>2010-03-23T23:48:52.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Visual Studio 2010 and .NET Framework 4 Beta 2!!!</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;WooHoo!!!&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;There have been simply a *ton* of changes to the product since last we chatted, both from a functionality perspective ( we’ve made lots of progress that I can’t wait to tell you about! ) to changes in the Visual Studio SKU structure, to logo and name branding, and pricing changes. MSDN itself has been redesigned!&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;But first and foremost, if you are an MSDN subscriber, stop what you are doing and go down load Beta2 and the .NET Framework 4 bits from &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" mce_href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;this link&lt;/a&gt;. I really think you’re going to like what you see! And Beta2 is a “Go Live” release, which means we are encouraging you to use the product in production, with an implied understanding that if serialization formats or what have you change between now and RTM, we’ll provide a way to move your data and artifacts forward so that you don’t lose any work.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;If you aren’t an MSDN subscriber, general availability for the release will happen on October 21st.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;To get more information on the new packaging and licensing details, please visit &lt;a href="http://www.microsoft.com/visualstudio" mce_href="http://www.microsoft.com/visualstudio" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;this link&lt;/a&gt;. But here’s a taste of the new Visual Studio 2010 logo:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image.png" mce_href="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image_thumb.png" width="240" height="53" mce_src="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image_thumb.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 240px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 53px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;And to top everything else off, the official &lt;strong&gt;launch date&lt;/strong&gt; for Visual Studio 2010 and .NET Framework 4 is &lt;strong&gt;March 22nd, 2010&lt;/strong&gt;!&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;strong&gt;&lt;span style="color:#0080ff;"&gt;SKU Structure Change&lt;/span&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;A couple words about the changes that you can read more &lt;a href="http://www.microsoft.com/visualstudio" mce_href="http://www.microsoft.com/visualstudio" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;about here&lt;/a&gt;. The Architecture Edition, along with many of the features of the Team System 2008 Development box, are now part of the Visual Studio 2010 Ultimate product.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The Visual Studio product line has moved to more of a “Russian Doll” model in regards to how the features are represented in each version of the product. At the top of the stack, including all the features and functionality of Visual Studio 2010 Premium and Visual Studio 2010 Professional, is the capabilities found in Visual Studio 2010 Ultimate. Going forward, I’m going to be spending my time with posts describing the Modeling and Visualization technologies in Ultimate, as that is what I know best, as that is what my team does. :)&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;But quickly, here’s a general view of the capabilities found in the new SKU structure. Please understand that from a feature perspective, Ultimate contains everything you see in this list ( all the Premium + Professional features ), plus the Ultimate specific features.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The features in &lt;span style="color:#ff0000;"&gt;red&lt;/span&gt; are the ones my team is responsible for delivering. Those features are the ones I will continue to blog about in depth in the days and weeks ahead.&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" bgcolor="#f0ffff"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;strong&gt;Microsoft Visual Studio 2010 Ultimate ( includes all features from Premium and Professional SKUs ):&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IntelliTrace&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;UML Modeling&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Layer Diagram &amp;amp; Architectural Validation&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Architecture Explorer&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Web Testing&lt;/li&gt;&lt;li&gt;Load Testing&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;strong&gt;Microsoft Visual Studio 2010 Premium ( includes all features from the Professional SKU ):&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;UI Test Automation&lt;/li&gt;&lt;li&gt;Test Impact Analysis&lt;/li&gt;&lt;li&gt;Performance Profiling&lt;/li&gt;&lt;li&gt;Static Code Analysis&lt;/li&gt;&lt;li&gt;Code Coverage&lt;/li&gt;&lt;li&gt;Code Metrics&lt;/li&gt;&lt;li&gt;Database Change Management&lt;/li&gt;&lt;li&gt;Database Deployment&lt;/li&gt;&lt;li&gt;Database Unit Testing&lt;/li&gt;&lt;li&gt;Test Data Generation&lt;/li&gt;&lt;li&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;Read-Only UML, Layer, and DGML Graphs&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;&lt;strong&gt;Microsoft Visual Studio 2010 Professional:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Silverlight Tools&lt;/li&gt;&lt;li&gt;Multi-Core Development&lt;/li&gt;&lt;li&gt;Sharepoint Development&lt;/li&gt;&lt;li&gt;Cloud Development&lt;/li&gt;&lt;li&gt;Web Development&lt;/li&gt;&lt;li&gt;Windows Development&lt;/li&gt;&lt;li&gt;Generate from Usage&lt;/li&gt;&lt;li&gt;Office Development&lt;/li&gt;&lt;li&gt;New WPF Editor&lt;/li&gt;&lt;li&gt;Customizable IDE&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;So stay tuned, as I’m planning on a number of posts that are designed to drill into the new features available in this beta 2 release of Visual Studio!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-6637852576543177644?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/6637852576543177644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/visual-studio-2010-and-net-framework-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6637852576543177644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6637852576543177644'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/visual-studio-2010-and-net-framework-4.html' title='Visual Studio 2010 and .NET Framework 4 Beta 2!!!'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8593844840977356156</id><published>2010-03-23T23:46:00.000-07:00</published><updated>2010-03-23T23:47:19.439-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>“First-time Experience” with Arch Tools</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Ok, you’ve downloaded the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=151797" mce_href="http://go.microsoft.com/fwlink/?LinkID=151797" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;Beta 2 bits of Visual Studio 2010 and .NET Framework 4&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Now you want to explorer the new Modeling and Visualization tools. This post will help you make those first couple of steps.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;1) Launch Visual Studio&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Notice the new top-level menu item called “Architecture”:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb.png" width="640" height="307" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 640px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 307px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;With &lt;strong&gt;no solution open&lt;/strong&gt;, selecting the menu item simply results in the following:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_3.png" width="556" height="143" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_3.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 556px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 143px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p mce_keep="true" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;2) Select “New Diagram…”&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;After a couple of seconds, a dialog box appears, which looks like this:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_4.png" width="548" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_4.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 548px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;This dialog makes it very easy to see all the diagrammatic capabilities that are new in 2010. You see the ability to create a total of five different UML diagrams, a Layer Diagram option, and last but not least, the Directed Graph Document.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;I’ll go into detail on all these later, but for now, just accept all the defaults and hit the OK button.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Now, because you do not have any solution open, you will see the following dialog:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_5.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_5.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_5.png" width="644" height="447" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_5.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 644px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 447px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;( You’ll see the same dialog even if you have a solution open, but no Modeling projects exist in the solution ).&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" bgcolor="#f0ffff"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;BUG ALERT:&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Unfortunately, a little bug slipped through the cracks that I want to point out so you don’t waste your time logging a bug that has already been fixed.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;If you hit the cancel button at this point, you’ll see this dialog:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="clip_image002" border="0" alt="clip_image002" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/clip_image002_thumb.jpg" width="498" height="201" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/clip_image002_thumb.jpg" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 498px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 201px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;You can hit the OK button and no harm will be done, but not quite the experience we’re looking for. ;)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Take the defaults and hit the OK button. You should see something similar to what you see in the image below ( minus my red annotations of course ):&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_6.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_6.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_6.png" width="606" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_6.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 606px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;At this point, your ready to start adding items to the class diagram to your hearts content. This is a pretty common first couple of steps that you will take as you start using VS 2010 Ultimate to model your problem domain using the various UML diagrams.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The steps above are very similar if you have an existing solution already open, but I do want to point out a couple of differences. The steps below are quite common when you are looking to the tool to help you understand an existing code base.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;3) Open an existing solution&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Just open any solution you’ve got within reach. I’m going to open up the old standby, Petshop 4.0. ( This will result in the current solution being closed, but don’t worry about that. )&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Once your solution is opened, you’ll see some new additions to the “Architecture” menu item:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_7.png" width="519" height="162" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_7.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 519px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 162px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Go ahead and try one of the menu items out. I selected the “Generate Dependency Graph-&gt;By Assembly” menu item, which resulted in a graph that looks like this:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_8.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_8.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_8.png" width="606" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_8.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 606px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p mce_keep="true" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Don’t worry about the details on this yet. We’ll be diving into those details in future posts. For now, we’re just kicking tires.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;One last thing to point out before calling this post done.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;4) Open up a source file&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;In my case, I’m going to open up the Order.cs file in the OracleDAL project.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Find a decent size method in your class, right click in the text editor, anywhere within the method and select …&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;5) Generate Sequence Diagram&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;You’ll see this dialog:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_9.png" width="398" height="392" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_9.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 398px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 392px; border-left-width: 0px; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Just take the defaults and hit OK. In my case, a diagram is generated that looks like this:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_10.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_10.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_10.png" width="606" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_10.png" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; width: 606px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Again, I’m not going to go into any more detail on this than I have just done. I just wanted to point out a few very common ways into some of the new features in the product.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;As I pointed out in this previous post, I’ve got a lot of topics I’m going to nail down for you. I don’t have any specific order that I’m committed to following, so if you have some preferences of which topics I do first, please let me know!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8593844840977356156?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8593844840977356156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/first-time-experience-with-arch-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8593844840977356156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8593844840977356156'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/first-time-experience-with-arch-tools.html' title='“First-time Experience” with Arch Tools'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-1976526792190171707</id><published>2010-03-23T23:44:00.001-07:00</published><updated>2010-03-23T23:45:31.952-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>UML Profiles and Visual Studio 2010 Ultimate</title><content type='html'>&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 15px; font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;By now, you’ve all got the &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;Beta2 version of VS 2010&lt;/a&gt;. This post will discuss some basics that you need to know about profiles, and why they matter. My next post will discuss how to create your own.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Let me first start by pointing out the excellent documentation around this feature, found &lt;a href="http://msdn.microsoft.com/en-us/library/dd465143(VS.100).aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;here&lt;/a&gt;. Almost everything I’m going to discuss is found there and the various references therein. I’m just going to hilite the essence of the feature.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;What the heck’s a Profile?&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;A profile, as defined by the UML spec, is a&lt;/p&gt;&lt;blockquote&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;“…mechanisms that allow metaclasses from existing metamodels to be extended to adapt them for different purposes.”&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;( Clear as mud right? :) Think of a profile as a container of new meta data with all the constraints that restrict or allow that new meta data to be applied to particular types in your UML model. What this then allows you to do is apply that Profile, and then apply a &lt;em&gt;stereotype &lt;/em&gt;to a particular element type that then exposes some new fields or what have you. In its simplest form, this would result in some new fields in the property editor for that type that you can then manipulate. In a more complex form, this could restrict what relationships a type could play in, etc.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;A quick example to drive this home.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Here’s a shot of a property editor for a selected class:&lt;br /&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image.png" width="556" height="320" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Notice there are no properties under the &lt;strong&gt;Stereotypes&lt;/strong&gt; property, but if I apply a stereotype, suddenly a bunch of new properties appear, as seen below:&lt;br /&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_3.png" width="568" height="431" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;I’ve circled the changes that have occurred to that class after applying that stereotype. Lots of new properties plus an annotation on the class element on the diagram indicating that the stereotype called &lt;strong&gt;C# class&lt;/strong&gt; has been applied.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Applying a Profile&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;You can apply any profile, be it a custom made or standard profile that ships in the box, on any UML Package or package derived type. So for example, if you create a UML Project and select the root element in the UML Model Explorer, you’ll notice two things: 1) That the project element is actually a UML element of type &lt;strong&gt;Model&lt;/strong&gt; ( which is ultimately derived off of &lt;strong&gt;Package &lt;/strong&gt;), and 2) that two standard profiles are already applied on that element.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt; &lt;a href="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_4.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_thumb.png" width="496" height="201" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;We will ship three profiles in the box by the time we ship VS 2010 Ultimate. Two profiles that are standard to UML ( &lt;strong&gt;Standard Profile L2&lt;/strong&gt; and &lt;strong&gt;Standard Profile L3 &lt;/strong&gt;) and one specific to C# ( named, surprisingly enough, &lt;strong&gt;C# Profile&lt;/strong&gt;:) ).&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;You apply ( or remove ) a profile to a Package ( or package derived type like &lt;strong&gt;Model &lt;/strong&gt;) by selecting that element and setting the profile property. So if I select the “ProfileExample” in the UML Model Explorer as seen above, here’s what the Profile property looks like with the currently available values:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_5.png" width="280" height="257" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Notice that the values are check box entries, allowing you to check or uncheck that profile. Apply or remove, your call.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Profile applied, now what?&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Once you’ve applied a prototype to a package, a number of new &lt;em&gt;stereotypes &lt;/em&gt;become available to any and all contained elements in that package dependent on the type of the element. As I mentioned earlier, by default the two standard UML profiles are automatically applied to the &lt;strong&gt;Model&lt;/strong&gt; element that represents your modeling project. So in our example above, when I select “ProfileExample” and then expand the Stereotypes property, here’s what I see:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_6.png" width="286" height="297" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;If I selected “Sub Package One”, which is contained by “ProfileExample”, I see this:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_7.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_thumb_3.png" width="288" height="261" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Notice how “metamodel” and “systemModel” are not present in the list. That is because the “Sub Package One” element is a UML &lt;strong&gt;Package&lt;/strong&gt;, where as the “ProfileExample” element is a UML &lt;strong&gt;Model&lt;/strong&gt;. The list of stereotypes is completely dependent on element type. To further the example, if I select “Class1” contained in “Sub Package One”, I see this:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_8.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/UMLProfilesandVisualStudio2010Ultimate_850E/image_thumb_4.png" width="184" height="244" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;And to just make sure everyone is on the same page, if I go back up to the “ProfileExample” element and uncheck every profile, then select “Class1” again, I will get no stereotype options.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Stereotype applied, now what?&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Once you apply a stereotype to a particular element, a number of things can happen. If you look back up to the second image in this post, I’ve applied the &lt;strong&gt;C# Class&lt;/strong&gt; stereotype to “Class1”. That results in a stereotype adornment on the element itself, as well as a number of properties that are now made available on the element.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Important to note that these new properties are now made available to any element that the stereotype is applied to, but the individual properties exposed by those stereotypes ( e.g., the “Is Partial” property for the “C# Class” stereotype ) and the values associated with them are stored on the individual instance of the applied element.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Ok, got it, but why does all this Profile / Stereotype stuff matter?&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Fundamentally, this is just another way to extend the semantic meaning of your models. It allows you to add more information to your models without having to invest in something more powerful ( like building a new DSL ) when all you want is a few boolean fields added to your elements! And once that new data is there, you can also lean on that added information in other scenarios, such as controlling how code is generated from the model based on applied stereotypes and the values therein.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;With the extension capabilities in the product, this becomes quite trivial. For example, if you follow the steps outlined in &lt;a href="http://www.peterprovost.org/blog/post/Extending-Visual-Studio-2010-UML-Designers-ndash3b-Part-1-Getting-Started.aspx" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;Peter’s post here&lt;/a&gt;, you can quickly add a menu item that manipulates those stereotypes of selected elements. The code below adds a menu item to the UML class diagram, looks for selected UML classes, and pulls the stereotype that matches the “C# class” stereotype if applied:&lt;/p&gt;&lt;div&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; Microsoft.VisualStudio.Uml.Extensions;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; System.ComponentModel.Composition;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; Microsoft.VisualStudio.Modeling.ExtensionEnablement;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; Microsoft.VisualStudio.Uml.Presentation;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; Microsoft.VisualStudio.Uml.Classes;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;span style=" ;color:blue;"&gt;namespace&lt;/span&gt; ExampleUMLExtensions&lt;br /&gt;{&lt;br /&gt;   [Export( &lt;span style=" ;color:blue;"&gt;typeof&lt;/span&gt;( ICommandExtension ))]&lt;br /&gt;   [ClassDesignerExtension]&lt;br /&gt;   &lt;span style=" ;color:blue;"&gt;public&lt;/span&gt; &lt;span style=" ;color:blue;"&gt;class&lt;/span&gt; MenuGesture : ICommandExtension&lt;br /&gt;   {&lt;br /&gt;       // IClassDiagramContext&lt;br /&gt;       [Import]&lt;br /&gt;       &lt;span style=" ;color:blue;"&gt;public&lt;/span&gt; IDiagramContext Context { &lt;span style=" ;color:blue;"&gt;get&lt;/span&gt;; &lt;span style=" ;color:blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;       &lt;span style=" ;color:blue;"&gt;public&lt;/span&gt; &lt;span style=" ;color:blue;"&gt;void&lt;/span&gt; Execute(IMenuCommand command)&lt;br /&gt;       {&lt;br /&gt;           var selectedClasses = Context.CurrentDiagram.GetSelectedShapes&lt;iclass&gt;();&lt;br /&gt;&lt;br /&gt;           var stereotypeInstance = (&lt;span style=" ;color:blue;"&gt;from&lt;/span&gt; shape &lt;span style=" ;color:blue;"&gt;in&lt;/span&gt; selectedClasses&lt;br /&gt;                                   &lt;span style=" ;color:blue;"&gt;where&lt;/span&gt; shape.Element &lt;span style=" ;color:blue;"&gt;is&lt;/span&gt; IClass&lt;br /&gt;                                   &lt;span style=" ;color:blue;"&gt;from&lt;/span&gt; stereotype &lt;span style=" ;color:blue;"&gt;in&lt;/span&gt; shape.Element.ApplicableStereotypes&lt;br /&gt;                                   &lt;span style=" ;color:blue;"&gt;where&lt;/span&gt; stereotype.DisplayName == &lt;span style=" ;color:red;"&gt;"C# &lt;span style=" ;color:blue;"&gt;class&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;                                   &lt;span style=" ;color:blue;"&gt;select&lt;/span&gt; stereotype).Fist();&lt;br /&gt;&lt;br /&gt;           // Party on the Properties property collection of the found stereotype instance&lt;br /&gt;           // ...&lt;br /&gt;          &lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style=" ;color:blue;"&gt;public&lt;/span&gt; &lt;span style=" ;color:blue;"&gt;void&lt;/span&gt; QueryStatus(IMenuCommand command)&lt;br /&gt;       {&lt;br /&gt;           command.Enabled = &lt;span style=" ;color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;           command.Visible = &lt;span style=" ;color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style=" ;color:blue;"&gt;public&lt;/span&gt; &lt;span style=" ;color:blue;"&gt;string&lt;/span&gt; Text&lt;br /&gt;       {&lt;br /&gt;           &lt;span style=" ;color:blue;"&gt;get&lt;/span&gt; { &lt;span style=" ;color:blue;"&gt;return&lt;/span&gt; &lt;span style=" ;color:red;"&gt;"Manipulate Stereotype"&lt;/span&gt;;  }&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/iclass&gt;&lt;/div&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="font-size:100%;"&gt;Next time…&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Like I mentioned at the start of this post, next time I’ll dig a little deeper into what is needed to create your own profile, and how you can make that profile available to your friends and neighbors. :)&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-1976526792190171707?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/1976526792190171707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/uml-profiles-and-visual-studio-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/1976526792190171707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/1976526792190171707'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/uml-profiles-and-visual-studio-2010.html' title='UML Profiles and Visual Studio 2010 Ultimate'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-6577820227394377525</id><published>2010-03-23T23:42:00.001-07:00</published><updated>2010-03-23T23:42:45.715-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Visualizing large code bases with VS2010</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://www.lovettsoftware.com/blogengine.net/" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;Chris Lovett&lt;/a&gt; has just posted a *great* &lt;a href="http://www.lovettsoftware.com/videos/largegraphs.mp4" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;video&lt;/a&gt; on how to manage larger code bases with the new visualization tools in VS2010.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;He shows techniques on how to use the “Custom…” dialog ( below ) to control how a DGML document is created as well as numerous techniques involving the cascading browser we call the “Architecture Explorer”, and layout strategies.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/VisualizinglargecodebaseswithVS2010_776C/image.png" width="704" height="484" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The video is 20 minutes that is highly leveraged, so please take the time and &lt;a href="http://www.lovettsoftware.com/videos/largegraphs.mp4" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;check it out&lt;/a&gt;! You’ll not only learn some great techniques on visualizing your larger code bases, but other little tips and tricks, such as hitting Ctrl-Alt-Shift-F12 twice inside Visual Studio will force the runtime to garbage collect! Great stuff! :)&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://cwskinner.members.winisp.net/VisualizinglargecodebaseswithVS2010_776C/image_3.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/VisualizinglargecodebaseswithVS2010_776C/image_thumb.png" width="644" height="166" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-6577820227394377525?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/6577820227394377525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/visualizing-large-code-bases-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6577820227394377525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6577820227394377525'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/visualizing-large-code-bases-with.html' title='Visualizing large code bases with VS2010'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-5013467331958325950</id><published>2010-03-23T23:40:00.000-07:00</published><updated>2010-03-23T23:41:20.816-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Layer Diagram</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;At TechEd2008 this year, the Rosario April CTP version of the VSTS Architecture Edition bits were demo'd during BillG's keynote by Brian Harry. Brian demonstrated the Architecture Explorer and the Layer Diagram. The Architecture Explorer is part of the April CTP, but the Layer Diagram did not make that CTP. I've received so many questions about that designer that I wanted to elaborate on the features of the diagram that you saw in the keynote, and describe the problem that diagram is out to help solve.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The Layer Diagram is designed to allow you to specify the various layers that make up your system's architecture. It is a way to describe what you believe your architecture is, and then provides you a way of discovering what it really is. :)&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The diagram itself is very simple in notation, with only two main tools in the Layer palette, the "Layer" shape and the "Dependency" link. You can name those layers, describe allowed dependencies between those layers ( more on this later ), map your existing assets ( code, docs, what have you ) onto those layers, and validate that your architecture is conforming to the diagram.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Here's a very simple layer diagram that shows a typical system with a UI or Presentation, Business or Domain Logic, Data, and Logging layer:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/LayerDiagram_7C82/SimpleLayerDiagram.png" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img height="500" alt="SimpleLayerDiagram" src="http://www.cwskinner.members.winisp.net/BlogImages/LayerDiagram_7C82/SimpleLayerDiagram_thumb.png" width="540" border="0" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; border-right-style: initial; border-right-color: initial; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Here is that same diagram "annotated" a bit, to describe some of the capabilities in the diagram:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/LayerDiagram_7C82/LayerDiagram.png" target="_blank" style="text-decoration: none; color: rgb(0, 107, 173); font-weight: bold; "&gt;&lt;img height="454" alt="LayerDiagram" src="http://www.cwskinner.members.winisp.net/BlogImages/LayerDiagram_7C82/LayerDiagram_thumb.png" width="660" border="0" style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; border-right-width: 0px; border-right-style: initial; border-right-color: initial; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;There are a number of ways you can approach this diagram, below is one:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;1. Create a new Layer diagram from scratch&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;2. Draw the various Layer shapes and name them appropriately&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;3. Use the Dependency connector to indicate the direction of allowed dependencies. As I mentioned in the annotated image, the lack of dependency links is also meaningful, in that you are indicating to the system that dependencies between two layers is not allowed.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;4. Specify additional constraints per layer that you would like to see enforced. As an example, you will be able to indicate on a per layer basis what namespaces are allowed in that layer, and which are not allowed.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;5. Map your physical assets to your specified layers. You map your assets ( code, documentation, entire projects or solutions ) via drag &amp;amp; drop from the Architectural Explorer and Solution Explorer. ( Later in the cycle, there will be more capabilities added around this step. )&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;6. Validate your architecture&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;This last step is where things get interesting. Steps 1-5 were all about specifying what you believe your architecture is and should be. Step 6 is all about telling you what it is.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;But when does validation occur, and what do violations look like?&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Validation can be done via a simple context menu gesture ( right click on the diagram and select "Validate" ), or as part of a check in policy, and as part of your build. The product will examine your Layer diagram ( you can have many by the way ), discover what assets are mapped and what constraints are being specified, and then analyze those assets with those constraints in mind.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;A violation ( currently ), shows up in the Error window.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;This should give you a better idea of what this diagram is all about, and you'll be able to take it for a test drive in our next CTP this fall.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-5013467331958325950?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/5013467331958325950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/layer-diagram.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/5013467331958325950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/5013467331958325950'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/layer-diagram.html' title='Layer Diagram'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-3688665898623603795</id><published>2010-03-23T23:38:00.000-07:00</published><updated>2010-03-23T23:39:41.991-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>Favorite VS2010 Features: Layer Validation</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; font-size: 12px; color: rgb(51, 51, 51); line-height: 18px; "&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;b&gt;Building a Layer Diagram&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;We’ll pick up from the last post using the Tailspin Toys sample application. Now that I understand the basic structure of the application, I want to make it adhere to my architecture. In this case the application was written as a model view controller (MVC) style application. Let’s make sure it is actually implemented that way. To start with, let’s create a new layer diagram using the Architecture menu:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-30-56%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-30-56%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-16-2010 3-30-56 PM" border="0" alt="2-16-2010 3-30-56 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-30-56%20PM_thumb.png" width="330" height="120" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-30-56%20PM_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-33-00%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-33-00%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-16-2010 3-33-00 PM" border="0" alt="2-16-2010 3-33-00 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-33-00%20PM_thumb.png" width="545" height="480" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-33-00%20PM_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This will give me an empty Layer Diagram surface where I can specify the layers of my architecture. With a little bit of work, we can get all the basic layers we are ok with on the form:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-51-39%20AM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-51-39%20AM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 10-51-39 AM" border="0" alt="2-12-2010 10-51-39 AM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-51-39%20AM_thumb.png" width="694" height="429" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-51-39%20AM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This is a reasonable architecture, but we need to figure out how the physical implementation actually maps into this logical architecture. To do this we can drag the actual class implementations into the corresponding layer they implement:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2011-01-34%20AM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2011-01-34%20AM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 11-01-34 AM" border="0" alt="2-12-2010 11-01-34 AM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2011-01-34%20AM_thumb.png" width="694" height="410" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2011-01-34%20AM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;After all you have placed class implementations into the right layers, you can ask the system to figure out the dependencies by right clicking on the design surface and choosing Generate Dependencies:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-35-39%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-35-39%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-16-2010 3-35-39 PM" border="0" alt="2-16-2010 3-35-39 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-35-39%20PM_thumb.png" width="617" height="402" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-16-2010%203-35-39%20PM_thumb.png" style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Once you’ve completed the process you wind up with a diagram like the one below.  The Layer Explorer can be used to see contents of each layer:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-54-00%20AM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-54-00%20AM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 10-54-00 AM" border="0" alt="2-12-2010 10-54-00 AM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-54-00%20AM_thumb.png" width="488" height="480" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%2010-54-00%20AM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;b&gt;Updating Your Implementation&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point we have a diagram describing what has physically been built. I have one problem with it though: in the MVC pattern we don’t want the View (‘Web’ in this case) talking directly to the Model. This most often happens when someone writes code which directly accesses a data layer without going through the proper business logic (an easy enough mistake to make). Let’s fix this by deleting the line in question:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-15-48%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-15-48%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 1-15-48 PM" border="0" alt="2-12-2010 1-15-48 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-15-48%20PM_thumb.png" width="573" height="347" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-15-48%20PM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;After we delete the line, we can right click the graph and choose Validate Architecture:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-17-07%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-17-07%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 1-17-07 PM" border="0" alt="2-12-2010 1-17-07 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-17-07%20PM_thumb.png" width="594" height="449" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-17-07%20PM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point Visual Studio will analyze all dependencies looking for any which violate the layer diagram. Errors will then show up in the error list:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-18-45%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-18-45%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 1-18-45 PM" border="0" alt="2-12-2010 1-18-45 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-18-45%20PM_thumb.png" width="694" height="211" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-18-45%20PM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;I can now go through and fix my code, repeating the Validate Architecture step until things are clean.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;b&gt;Enforcing Layering in the Build&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At this point I have a clean architecture and an implementation which matches. We all know what could happen next: as tasks are implemented and bugs are fixed, the code is going to drift from the architecture again. We need a way to keep things in sync.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;To solve this, we’ll add a new TFS Build Definition which uses Gated Check-in to enforce the architecture:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-21-54%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-21-54%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 1-21-54 PM" border="0" alt="2-12-2010 1-21-54 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-21-54%20PM_thumb.png" width="690" height="247" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-21-54%20PM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;When you use Gated Check-in, all changes you submit to TFS must first pass all the normal tests (build clean, pass test cases, etc). In this way if you have errors, the changes aren’t applied and never get out into your build. In this case we’ll add one more step in the Process tab:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-23-28%20PM_2.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-23-28%20PM_2.png" style="color: rgb(54, 109, 244); text-decoration: none; "&gt;&lt;img title="2-12-2010 1-23-28 PM" border="0" alt="2-12-2010 1-23-28 PM" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-23-28%20PM_thumb.png" width="694" height="436" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/FavoriteVS2010FeaturesLayerValidation_9B97/2-12-2010%201-23-28%20PM_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Now the build will also do the architectural validation step preventing any violations from getting checked into TFS.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;There are a few key concepts:&lt;/p&gt;&lt;ul style="margin-left: 0px; padding-left: 2em; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; "&gt;&lt;li&gt;If you are doing brand new code, you can start with the logical design and work your way towards implementation&lt;/li&gt;&lt;li&gt;If you are starting with existing assets, you can also discover what you have and work towards an ideal logical design&lt;/li&gt;&lt;li&gt;Once you get physical and logical in sync, you can enforce that through automation (such as gated check-in) which avoids “drift”&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-3688665898623603795?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/3688665898623603795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/favorite-vs2010-features-layer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/3688665898623603795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/3688665898623603795'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/03/favorite-vs2010-features-layer.html' title='Favorite VS2010 Features: Layer Validation'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-7681783459429163222</id><published>2010-02-15T23:23:00.000-08:00</published><updated>2010-02-17T05:19:53.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PrOgramming'/><title type='text'>Building Web Based N-Tier Applications using C#</title><content type='html'>Building Web Based N-Tier Applications using C#&lt;br /&gt;&lt;br /&gt;This article explores the N-tier and Distributed Application Architecture. Over the last decade, the way applications are designed has evolved and come a long way. We have stand-alone applications, server based applications, client server applications, web based applications, n-tier applications, distributed applications, Peer-to-peer apps, service-oriented Architectures, component based Development and the list goes on. This article discusses the advantages, disadvantages of n-tier applications and methods to implement web based n-tier Applications using C#, .NET &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why N-Tier Applications? &lt;br /&gt;N-Tier Applications can easily implement the concepts of Distributed Application Design and Architecture. The N-Tier Applications provide strategic benefits to Enterprise Solutions. &lt;br /&gt;While 2-tier, client-server can help us create quick and easy solutions and may be used for Rapid Prototyping, they can easily become a maintenance and security night mare. &lt;br /&gt;&lt;br /&gt;The N-tier Applications provide specific advantages that are vital to the business continuity of the enterprise. Typical features of a real life n-tier may include the following: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Security: Application has Appropriate Authentication, logging and monitoring mechanisms &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Availability and Scalability: Application should be reliable and should have sufficient fail-over mechanisms ( redundancy) such as fail-over clusters &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Manageability: Application should be designed to have the capability to Deploy, Monitor and troubleshoot. Methodology to handle Errors, log Errors and provide useful information for problem resolution &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Easy Maintenance: This is generally achieved by adopting coding standards, deployment standards, modular application design, ‘data abstraction’ and application frameworks. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Data Abstraction: Easily make changes to the functionality, business rules with the least amount of impact to the entire applications &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The above mentioned points are some of the Key design goals of a successful n-tier application that intends to provide a good Business Solution. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What does it take to build the n-tier Application? &lt;br /&gt;The single most important factor that decides the success of the n-tier application is a through business or domain knowledge. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The second most important access is the technical and design know how. N-tier applications require us to put in a sufficient amount of thought to successfully distribute the overall functionality of the application in the appropriate ‘tiers’. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When n-tier Applications should not be used? &lt;br /&gt;Building and implementing a successful n-tier application requires a lot of Effort, Skill, experience, commitment and Organizational Maturity. &lt;br /&gt;&lt;br /&gt;It also implies cost. &lt;br /&gt;&lt;br /&gt;Hence a favorable Cost-Benefit Ratio is necessary before you decide to go ahead with the n-tier Application. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is a n-tier Application? &lt;br /&gt;Simply stated, an n-tier application helps us distribute the overall functionality into various tiers or layers. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For example in a typical implementation you can have one or more of the following layers &lt;br /&gt;1) Presentation Layer &lt;br /&gt;2) Business Rules Layer &lt;br /&gt;3) Data Access Layer &lt;br /&gt;4) Database/Data store &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In certain scenarios some of the layers mentioned above may be split further into one or more sub layers. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each Layer can be developed independently of the other provided that it adheres to the standards and communicates with the other layers as per the specifications. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is one of the biggest advantages of the n-tier application. &lt;br /&gt;Each layer can potentially treat the other layers as ‘black-box’ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In other words, each layer does not care how the other layer processes the data as long as it sends the right data in a correct format. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Building them with C#, .NET: &lt;br /&gt;C#.NET provides us an excellent, robust feature rich platform. &lt;br /&gt;C# being Object Oriented Programming Language it helps in practically laying down the standards. For instance you could create a base class with standard functions and require that all new classes should be derived from this base class. Please see the article on “Inheritance” in this series. &lt;br /&gt;&lt;br /&gt;.NET provides type safety, automatic Garbage Collection which is very important in implementing good n-tier apps. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Logical Building Blocks &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_2E0mKhKB88g/S3pIri6MExI/AAAAAAAAHiI/CbRdWQYAWlg/s1600-h/BuildingN_fig1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://3.bp.blogspot.com/_2E0mKhKB88g/S3pIri6MExI/AAAAAAAAHiI/CbRdWQYAWlg/s320/BuildingN_fig1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438739412945736466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The above diagram describes the logical building blocks of the Application. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) The Presentation Layer: Also called as the client layer comprises of components that are dedicated to presenting the data to the user. For example: Windows/Web Forms and buttons, edit boxes, Text boxes, labels, grids, etc. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) The Business Rules Layer: This layer encapsulates the Business rules or the business logic of the encapsulations. To have a separate layer for business logic is of a great advantage. This is because any changes in Business Rules can be easily handled in this layer. As long as the interface between the layers remains the same, any changes to the functionality/processing logic in this layer can be made without impacting the others. A lot of client-server apps failed to implement successfully as changing the business logic was a painful process. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) The Data Access Layer: This layer comprises of components that help in accessing the Database. If used in the right way, this layer provides a level of abstraction for the database structures. Simply put changes made to the database, tables, etc do not effect the rest of the application because of the Data Access layer. The different application layers send the data requests to this layer and receive the response from this layer. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The database is not accessed directly from any other layer/component. Hence the table names, field names are not hard coded anywhere else. This layer may also access any other services that may provide it with data, for instance Active Directory, Services etc. Having this layer also provides an additional layer of security for the database. As the other layers do not need to know the database credentials, connect strings and so on. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) The Database Layer: This layer comprises of the Database Components such as DB Files, Tables, Views, etc. The Actual database could be created using SQL Server, Oracle, Flat files, etc. &lt;br /&gt;In an n-tier application, the entire application can be implemented in such a way that it is independent of the actual Database. For instance, you could change the Database Location with minimal changes to Data Access Layer. The rest of the Application should remain unaffected. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Many packaged n-tier Applications are created so that they can work the same with SQL Server, Oracle, UDB and so on. In the above pages we have seen the background and the logical design of the n-tier application. Large enterprise apps are typically designed as n-tier applications and large portion of them are web based applications. Therefore they can be viewed in a secure manner, from any PC with a browser. This is a good combination of ease of use and security. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How do the Layers communicate with each other? &lt;br /&gt;Each Layer comprises of one or more components. Each component being a part of the app may communicate with one or more component. The component may “speak” to the other components using one of the many protocols, HTTP, FTP, TCP/IP and mechanisms such as XML/RPC, SOAP, REMOTING etc. The data as such may be “passed” across in many formats such as binary, string , XML. For the purpose of this article we will use XML format for passing data between the components. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Communication Techniques in n-tier ‘.NET’ Apps : &lt;br /&gt;The different layers of the n-tier applications can be located on physically different machines. &lt;br /&gt;Various techniques can be used to communicate between the various layers and components. The most common include &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;XML Web Services &lt;br /&gt;.NET Remoting &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_2E0mKhKB88g/S3pI61P9LdI/AAAAAAAAHiQ/ITeK-iKYkjs/s1600-h/BuildingN_fig2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="http://1.bp.blogspot.com/_2E0mKhKB88g/S3pI61P9LdI/AAAAAAAAHiQ/ITeK-iKYkjs/s320/BuildingN_fig2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438739675566910930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A Web Based N-Tier Application&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_2E0mKhKB88g/S3pJMDIpN2I/AAAAAAAAHiY/cImxU28Y6TI/s1600-h/BuildingN_fig3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 159px;" src="http://2.bp.blogspot.com/_2E0mKhKB88g/S3pJMDIpN2I/AAAAAAAAHiY/cImxU28Y6TI/s320/BuildingN_fig3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438739971352115042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the diagram above we observe that the Presentation Layer is made of Web Pages, Web Components and Web Server such as IIS. The end user sees the web pages on a Browser such as IE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To create a web based n-tier Application using C#, .NET the following steps need to be followed: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Define what the Application should do. In other words the functionality of the application. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Segregate the application logic. The logic related to the User Interface or presentation layer will be part of the presentation layer, The logic related to the Business Rules goes to the Business Layer and so on. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Design the Database Structures, such as Tables, Views and so on. The Database design is a very crucial step and it effects the overall application performance, reliability and usability &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) After this you can design the Data Access Layer. This Layer comprises of code to access the database. The Data Access Layer components may typically be called by the Business Layer Components. The Design also defines how this call should be made. This includes the interface definition, Inputs, Outputs, Data Structure Definition and so on. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Similarly Business Application Layer design will define the Components that are part of this layer. Specifications for each component should include the Interface Definition, Inputs, outputs and Data structures (example XML DTD). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6) The Presentation Layer is designed keeping in mind the ease of Use. The User Interface should be intuitive and pleasant. The Presentation Layer may comprise of Web Pages such as .aspx,HTML, and compiled components. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each of the layers can typically be located on physically separate machines for various reasons such as reliability, security and scalability. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To understand the actual coding aspects for building an n-tier application or a distributed application architecture refer to our articles on Creating Components in C#. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Summary: &lt;br /&gt;In the above article we discussed the evolution of various architectures and specifically n-tier applications and distributed application Architecure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-7681783459429163222?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/7681783459429163222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2010/02/building-web-based-n-tier-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/7681783459429163222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/7681783459429163222'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2010/02/building-web-based-n-tier-applications.html' title='Building Web Based N-Tier Applications using C#'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2E0mKhKB88g/S3pIri6MExI/AAAAAAAAHiI/CbRdWQYAWlg/s72-c/BuildingN_fig1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-5720337679583130254</id><published>2009-06-18T00:42:00.000-07:00</published><updated>2010-02-17T05:20:03.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PrOgramming'/><title type='text'>24 JavaScript Best Practices for Beginners</title><content type='html'>Click &lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/24-javascript-best-practices-for-beginners/" target="_blank"&gt;here&lt;/a&gt; to find out the 24 Best Javascript Coding Practices for Beginners.. Enjoy..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-5720337679583130254?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/5720337679583130254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/06/24-javascript-best-practices-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/5720337679583130254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/5720337679583130254'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/06/24-javascript-best-practices-for.html' title='24 JavaScript Best Practices for Beginners'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-3717946196322159520</id><published>2009-05-27T05:47:00.000-07:00</published><updated>2010-02-17T05:20:13.573-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Save Earth</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 13px; "&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;It is well-known fact that we, as a generation of Indians are at the threshold of the most humongous threat to our environment. It is imperative that we take as many steps as feasible to reverse this damage. As citizens of the planet,  and as Indians. If we don't then who will?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt; &lt;br /&gt;  &lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;1. There is a cute small round press button at the bottom right corner of almost all monitors: Please make use of this, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="204" height="142" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.12&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;2. Stop printing out Harry Porter, Jeffrey Archer and other e-books. This is a classic example of paper wastage. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="270" height="251" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.5&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;If you have forgotten to give double-side prints, make sure you make use of the empty sides as scribbling pads or for your kids' imposition&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;color:#004080;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; color: rgb(0, 64, 128); "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;! &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;img width="321" height="452" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.9&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Take two minutes from your busy schedule before hurrying back home to shut down the computer. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="235" height="150" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.19&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;All of us are big time Googlers. Have you heard of the Blackle search engine? Blackle &lt;span class="Apple-style-span" style="font-family: Georgia; font-size: 16px; "&gt;&lt;a href="http://www.blackle.com/" target="_blank"&gt;http://www.blackle.com&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 13px; "&gt; (Google powered) is a search engine designed all in Rich Black so that your system consumes less power. So change your homepage. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 13px; "&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;img width="585" height="483" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.16&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Plastic bags these days indeed come in bright and flamboyant colours and tempt us to take them home with us. But the saying, "Appearances are deceptive" holds true for these plastic things too. Next time, hold back or go prepared to counter temptation with a cloth bag. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="380" height="400" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.20&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Roses, Jasmine, Hibiscus and Peas; All these saplings cost hardly between Rs 10 - 20 each. Can't we afford to plant these in and around our houses? Also, more importantly, caring and maintain them as they grow? &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="430" height="312" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.7&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Try to segregate the different kinds of waste into Bio-Degradable (Fruit or vegetable waste) , Recyclable (waste Paper, paper products) and Electronics (Floppy disks, CD-ROMS ). Once you have segregated your thrash, look for specialized trash cans to throw them away. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="500" height="283" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.10&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Try to minimize the use of horns. Honking drastically increased and this adds to the noi&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;se pollution and does not provide a conducive environment to live in. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="261" height="213" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.8&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Use rechargeable batteries though it's an expensive product, it's one-time purchase. Recharge when required. (Same applies to cell-phones, MP3s, iPods and Laptops) &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="350" height="366" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.21&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;The best pens to use would be ink ones. Though if you have to use a ball point pen, buy refills instead of buying new pens. Pencils are much better for rough use! (That's why we used it at school!!!) &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="257" height="257" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.13&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;img width="779" height="507" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.6&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Remember to close water taps before preening in front of the mirror. Of course you are beautiful, but Water is a precious resource! &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="388" height="309" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.1&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Let's not just wake up and walk out of finished meetings and conferences with a sigh of relief, let us remember to turn off the lights and projectors too. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="399" height="301" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.18&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Take few minutes to learn about topics like 'Global Warming' , 'Air / Noise /Land / Water Pollution ' etc apart from constant surfing of News, Latest Gadgets, Movies and Music. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="300" height="300" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.2&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;Spread this message; to your friends and foes. They too can make a difference. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt;&lt;br /&gt;&lt;img width="300" height="302" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.15&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;font-size:85%;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: inherit; "&gt;The Earth has already become a dangerous place to live in for the animals and birds. Soon it might be our turn. So let's pledge to save our beautiful planet so that you and your future generations can live happily and peacefully ever after.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;&lt;span lang="EN-US" style="font-family: inherit; "&gt; &lt;br /&gt;&lt;img width="315" height="269" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.3&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;img width="250" height="358" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.11&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;img width="450" height="333" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.17&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;img width="563" height="985" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.14&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;img width="600" height="399" src="https://mail.google.com/a/carotechs.com/?ui=2&amp;amp;ik=ab00976f2e&amp;amp;view=att&amp;amp;th=121820efeb892438&amp;amp;attid=0.4&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-3717946196322159520?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/3717946196322159520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/save-earth.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/3717946196322159520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/3717946196322159520'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/save-earth.html' title='Save Earth'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-6836194313525076220</id><published>2009-05-15T22:56:00.000-07:00</published><updated>2009-05-18T05:05:49.772-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Share POint'/><title type='text'>Step by Step to Sharepoint..</title><content type='html'>&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 22px; font-family:Arial;font-size:13px;"&gt;In these SharePoint screencast tutorials, get step by step instructions on all the features included in SharePoint hosting&lt;br /&gt;and how to optimize your site. The tutorials cover topics from Alerts and Creating Web Parts to&lt;br /&gt;Creating Meetings, Project Team Sites and Wikis&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 22px;font-family:Arial;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 22px;font-family:Arial;font-size:13px;"&gt;&lt;a href="http://www.sharepointhostingprovider.com/sharepoint-tutorials/" target="_blank"&gt;http://www.sharepointhostingprovider.com/sharepoint-tutorials/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-6836194313525076220?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/6836194313525076220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/step-by-step-to-sharepoint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6836194313525076220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/6836194313525076220'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/step-by-step-to-sharepoint.html' title='Step by Step to Sharepoint..'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8239915321444321849</id><published>2009-05-14T23:39:00.001-07:00</published><updated>2009-05-15T00:32:51.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2o1o'/><title type='text'>A New Look for Visual Studio 2010</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(85, 85, 85); font-family: Geneva; font-size: 12px; line-height: 17px; "&gt;&lt;h1 class="entryviewheading" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font: normal normal 400 1.6em/normal 'trebuchet ms', serif; margin-top: 0px; "&gt;&lt;br /&gt;&lt;/h1&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;At the PDC and TechEd EMEA last year we described our new editor support built on the WPF technology in .NET Framework 4.0.  Today I’m happy to reveal the new UI for Visual Studio, also built on WPF:&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellBase_2.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellBase_2.png" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(23, 109, 181); "&gt;&lt;img title="DvX_ShellBase" border="0" alt="DvX_ShellBase" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellBase_thumb.png" width="585" height="469" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellBase_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In this image you can see several areas of concentration:&lt;/p&gt;&lt;ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; "&gt;&lt;li style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; "&gt;Reduced clutter and visual complexity by removing excessive lines and gradients in the UX and modernized the interface by removing outdated 3D bevels&lt;/li&gt;&lt;li style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; "&gt;Placed focus on content areas by opening negative space between windows and drawing attention to the current focus with a dominant accent color and a distinctive background&lt;/li&gt;&lt;li style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; "&gt;Added an inviting new palette to make VS 2010 more distinctive&lt;/li&gt;&lt;/ul&gt;&lt;p mce_keep="true" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt; &lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;In the following image you can see floating documents which allows you to utilize multiple monitors while designing your project and writing code:&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellFloatWide_2.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellFloatWide_2.png" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(23, 109, 181); "&gt;&lt;img title="DvX_ShellFloatWide" border="0" alt="DvX_ShellFloatWide" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellFloatWide_thumb.png" width="570" height="367" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/DvX_ShellFloatWide_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;This image shows new support in the editor for outlining:&lt;/p&gt;&lt;ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; "&gt;&lt;li style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; "&gt;Triangle glyphs in the margin are used to collapse or expand your code blocks&lt;/li&gt;&lt;li style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; "&gt;Collapsed sections of code are marked with an empty triangle (pointing straight) as well as a set of ellipses&lt;/li&gt;&lt;li style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; "&gt;Colors on the margin indicate edits that have been made&lt;/li&gt;&lt;/ul&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_4.png" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(23, 109, 181); "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_thumb_1.png" width="567" height="358" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_thumb_1.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;The New Project dialog has also gotten an update to include online template viewing, a search box, and easier navigation.  Multi-targeting remains in this version but now with .NET Framework 4.0 included as an option:&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_5.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_5.png" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(23, 109, 181); "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_thumb.png" width="570" height="407" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_thumb.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Visual Studio has a very broad and rich ecosystem of extensions written by our partners and folks like you.  In VS2010 we wanted to make it easier for you to find those extensions and install them.  We’ve enabled the new Extension Manager for this purpose:&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_7.png" mce_href="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_7.png" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(23, 109, 181); "&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_thumb_2.png" width="572" height="406" mce_src="http://blogs.msdn.com/blogfiles/jasonz/WindowsLiveWriter/AnewlookforVisualStudio2010_CF66/image_thumb_2.png" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;With the Extension Manager you will be able to browse for templates and tools online and install them easily into the Visual Studio environment.  The next public release of VS will have this new functionality and we’ll be hooking up the online capabilities through the&lt;a href="http://www.visualstudiogallery.com/" mce_href="http://www.visualstudiogallery.com/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(23, 109, 181); "&gt;Visual Studio Gallery&lt;/a&gt; as part of the final release.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;These designs were developed and tested for user feedback by our User Experience team and implemented by the VS Platform team (excellent job!).&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;We hope you like the new look and feel of Visual Studio 2010.  You’ll be able to play with these bits when we release Beta 1 which we are working hard on right now (no formal announce date just yet, stay tuned).&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Enjoy!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8239915321444321849?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8239915321444321849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/new-look-for-visual-studio-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8239915321444321849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8239915321444321849'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/new-look-for-visual-studio-2010.html' title='A New Look for Visual Studio 2010'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-217225955675506318</id><published>2009-05-08T05:09:00.000-07:00</published><updated>2009-05-15T00:36:59.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PrOgramming'/><title type='text'>Visual Studio .NET 2005 Keyboard Shortcuts</title><content type='html'>&lt;span class="Apple-style-span"   style="color: rgb(70, 73, 82);   font-family:verdana;font-size:11px;"&gt;&lt;p&gt;You may find this link handy when using VS 2005:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codinghorror.com/blog/files/Visual%20Studio%20.NET%202005%20Keyboard%20Shortcuts.htm" target="_blank"&gt;http://www.codinghorror.com/blog/files/Visual%20Studio%20.NET%202005%20Keyboard%20Shortcuts.htm&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-217225955675506318?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/217225955675506318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/visual-studio-net-2005-keyboard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/217225955675506318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/217225955675506318'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/05/visual-studio-net-2005-keyboard.html' title='Visual Studio .NET 2005 Keyboard Shortcuts'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8740710311006683416</id><published>2009-04-25T05:57:00.001-07:00</published><updated>2009-05-15T00:35:21.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MicrOsOft'/><title type='text'>Interviewing with Microsoft India</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;"What to expect in the interview" I've had this question from candidates that I have referred or distant relatives or friend's friend (you get the idea!) who are appearing for an interview with Microsoft . Somehow people still get to hear that Microsoft asks riddles. Though this was true way back but now these questions are rarely asked as they indicate very little about the candidate's potential.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;I have been through interviews with some leading companies as an interviewer or interviewee and IMO Microsoft's interview process is a bit different. So here goes a list of what to expect and be prepared for in a technical interview with Microsoft.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Unlike some other companies, Microsoft takes people from a lot of diverse background. E.g. if you are from C++ compiler development background you can be easily considered for the VS IDE's intelli-sense development if your interviewers think that you can fit in.&lt;/li&gt;&lt;li&gt;Your dress really doesn't matter. You can expect to see your interviewer in shorts and he can't care less about what you wear.&lt;/li&gt;&lt;li&gt;The interview process is loooooong. Expect multiple people to interview you one after the other. So when you get the lunch break, eat well.&lt;/li&gt;&lt;li&gt;Put things in your resume only when you know about them well. People in Microsoft comes from diverse background (see above) and their  is every possibility that your interviewer will be very aware about the technologies you have mentioned in your resume and will ask you about them.&lt;/li&gt;&lt;li&gt;Know your past projects well.&lt;/li&gt;&lt;li&gt;You will be asked to solve technical problems and write pseudo-code for the solution. &lt;/li&gt;&lt;li&gt;Whether you are interviewing for Software development role, a test role or a lead/manager role you will be asked to code. The reason is simple, in Microsoft leads and development/test managers and even PUMs in some case (Program Unit Managers) code.&lt;/li&gt;&lt;li&gt;Think aloud when solving problems, approach is as important as the final solution.&lt;/li&gt;&lt;li&gt;When giving a solution, find out the fallacies your self and try to come up with better alternatives.&lt;/li&gt;&lt;li&gt;Its an interview, so ask questions about Microsoft and the position/role you are being interviewed for.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sellsbrothers.com/fun/msiview/#Feynman" mce_href="http://www.sellsbrothers.com/fun/msiview/#Feynman" style="text-decoration: none; color: rgb(0, 102, 170); " target="_blank"&gt;This&lt;/a&gt; is not true :)&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8740710311006683416?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8740710311006683416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/interviewing-with-microsoft-india.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8740710311006683416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8740710311006683416'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/interviewing-with-microsoft-india.html' title='Interviewing with Microsoft India'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8274139698304493011</id><published>2009-04-25T04:58:00.000-07:00</published><updated>2009-05-15T00:36:59.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PrOgramming'/><title type='text'>Aspect Oriented Programming using .NET</title><content type='html'>&lt;span class="Apple-style-span"   style="  line-height: 15px; font-family:Verdana;font-size:12px;"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;What is AOP&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Aspect Oriented Programming&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; or AOP is an interesting concept that can be applied to many of the programming problems we solve everyday. In our Visual Studio team system code we have a lot of web-services and remoting code that essentially does the following&lt;/span&gt;&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; MyMethod(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; parameter)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Trace.EnteredMethod(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"MyMethod"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, parameter);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    SecurityCheck();&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    // Bunch of processing&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Trace.ExitMethod(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"MyMethod"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;This is not just peculiar to our domain but is seen across different domains. In OO programming classes and methods are designed for performing specific operations and common/duplicate functionality are factored out into common classes. However, there are cross-cutting concerns that span accross all classes and methods, like logging and security checks. OOP only partially solves this problem by requiring users to define separate classes for logging and security checks and requiring each class/methods needing these services to call them. AOP targets and solves this problem elegantly.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AOP divides code into &lt;/span&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;base-code&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; (code for your functionality) and a new construct called &lt;/span&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;aspect&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. Aspect encapsulates these cross-cutting concerns using the following concepts&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;join-points&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;: The points in the structure of base-code where the cross-cutting functionality needs to execute. This is typically when specific methods are entered or exited or properties are accessed.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;point-cut&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;: A logical description of join-points using some specific syntax&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;advice:&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; additional code like logging and security check that each of these methods need to perform&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The most mature AOP language is probably &lt;/span&gt;&lt;a href="http://www.eclipse.org/aspectj/" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AspectJ&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which adds AOP extensions to Java. However, for this blog, I'd stick to .NET languages like &lt;/span&gt;&lt;a href="http://www.dotnetguru.biz/aspectdng/" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AspectDNG&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;a href="http://www.castleproject.org/index.php/AspectSharp" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Aspect#&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and C#.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Language support for AOP&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AOP support has to be built in to the language and/or framework because it is based on method call interception. Whenever a methods is called the framework needs to provide a stub to call some other piece of code. Though .NET CLR has this capability, but it is intrusive as you need an object to extend from&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MarshalByRefObject&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  or &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextBoundObject &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;to allow method-interception. This is a serious limitation because each class needs to be written so that it supports AOP. Many AOP languages or language-extensions get around this limitation by using various techniques. The techniques generally fall into two broad categories runtime or dynamic weaving, compile-time or static weaving.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;a href="http://www.castleproject.org/index.php/AspectSharp" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Aspect#&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is AOP language which uses static compile time weaving. It uses its own proxy (and not CLR's proxy) called &lt;/span&gt;&lt;a href="http://www.castleproject.org/index.php/DynamicProxy" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DynamicProxy&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. DynamicProxy is generated compile time and works differently while proxying interfaces (generates dynamic class and delegates method calls to the target of invocation) and proxying classes (generates stub class that inherits from the target).&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Aspect# provides syntax to define point-cut and call method-interceptors or advice for them. It's done as follows &lt;/span&gt;&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;import YourCompany.CMS.ContentProviders in YourCompanyAssembly&lt;br /&gt;import YourCompany.CMS.Aop.Interceptors&lt;br /&gt;aspect SecurityAspect for RSSContentProvider&lt;br /&gt;     include Mixins.SecurityResourceImpl in MyMixinsAssembly &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;br /&gt;    pointcut method(* MyMethod(*))&lt;br /&gt;           advice(TracingInterceptor)&lt;br /&gt;     end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;end&lt;br /&gt;public class &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;TracingInterceptor &lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;: IMethodInterceptor {    &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public object Invoke(IMethodInvocation invocation)&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    {        // Trace using information from IMethodInvocation&lt;br /&gt;      // like Method, MethodInvocationTarget        &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return invocation.Proceed();&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    } }&lt;/span&gt;&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The important bits are marked in bold. The first block is the point-cut in a &lt;/span&gt;&lt;a href="http://www.ruby-lang.org/en/20020101.html" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Ruby&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; like syntax which specifies all methods with the name &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyMethod&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; to be included in the join-points.  The second block is the interceptor (advice) &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;TracingInterceptor&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. The &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;TracingInterceptor &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;is a class that has to implement the&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMethodInterceptor&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. It can call &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;invocation.Proceed&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; to continue with the method invocation once it's done with the tracing. So whenever the &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyMethod&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is called &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;TracingInterceptor.Invoke&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; gets called.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Other languages like &lt;/span&gt;&lt;a href="http://www.dotnetguru.biz/aspectdng/" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AspectDNG&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; (.NET based AOP language-extension) accomplishes this using something called IL weaving. In this the target or base-code is coded in any language that can be compiled into MSIL like C#, VB.NET, J#. So the target code can look like&lt;/span&gt;&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using &lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyClass&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; ProcessString(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; s, &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;out&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; outStr) {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;// ... &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;There is no special code or any type of modification needed on the base-code as evident from above which is plain-vanilla C# code. The aspect code is written as follows which can also be C# code and needs some additional assembly reference and attribute decoration for AspectDNG to pick them up&lt;/span&gt;&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; DotNetGuru.AspectDNG.MetaAspects;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; DotNetGuru.AspectDNG.Joinpoints;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AspectsSample&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[AroundCall(&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"* MyClass::ProcessString(*)"&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; YourMethodCallInterceptor(JoinPoint jp)&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.WriteLine(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Code before calls to '.. MyClass.ProcessString(..)'"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;object&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; result = jp.Proceed();&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.WriteLine(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Code after calls to '.. MyClass.ProcessString(..)'"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; result;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here point-cut is specified using attributes like &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AroundCall&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AroundBody&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. Both the base-code and the aspect code are separately compiled into different assemblies using respective compilers like csc into Target.exe and aspect.dll. Then the &lt;/span&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;aspectdng.exe&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; tool can be used which uses reflection to reach to the attribute in the aspect code to weave call to them so that a new assembly called Target-weaved.exe is created. In target-weaved.exe AspectDNG directly puts in calls to the aspects around the target code by inserting/replacing IL code wherever required.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;There are some AOP languages like &lt;/span&gt;&lt;a href="http://theagiledeveloper.com/articles/Encase.aspx" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Encase&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which apply the aspects at run time. These languages use AOP frameworks which reads in configuration files for point-cuts and at runtime generate proxy classes that intercept calls, allows advice of the aspect to execute first and then invokes the actual target. The benefit is that there is not edit-compile cycle but it faces performance issues.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;a name="AOPinC"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AOP in C#&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Till now we were talking about non-mainstream languages to get AOP done. However, by doing a bit extra work we can get the same functionality in C# as well. The limitation with CLR is that it allows method interception only when the classes containing the methods inherit from &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MarshalByRefObject&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  or&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextBoundObject. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;When a class inheriting from &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextBoundObject&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is activated, the .NET interceptor comes into play. It creates a trasparent-proxy and a real-proxy. The transparent-proxy gets called for all invocation of the target. The transparent proxy serializes the call stack and passes that on to the real-proxy. The real-proxy calls the first message sink which is an object implementing the&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; interface. Its the duty of this first message sink to call the next until the final sink goes and calls the actual target. In this sink chaining we can insert objects which can execute our aspect advice.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Another limitation with C# is that there is no way in C# syntax to specify join-points. We will circumvent these two limitations by inheriting the target classes from &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextBoundObject&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. We'll use attributes on specific classes so that all methods and field-setters in them become included into the join-points.&lt;/span&gt;&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;// Include the aspect framework&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Abhinaba.Aspect.Security;&lt;/span&gt;&lt;/strong&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Security&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;()]&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyClass&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; : &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextBoundObject&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; ProcessString(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; s, &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;out&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; outStr) {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Console&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.WriteLine(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Inside ProcessString"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;outStr = s.ToUpper();&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; outStr.Length;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here &lt;/span&gt;&lt;strong&gt;&lt;span style="color:#008080;"&gt;&lt;span&gt;&lt;span style="font-family:Courier New;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Security&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;is an attribute defined in our &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Abhinaba,Aspect.Security&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; namespace which pulls in our support for AOP and includes the current class and all its methods in the join-points. The whole AOP framework looks as follows. All the important parts are marked in bold.&lt;/span&gt;&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System.Diagnostics;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System.Runtime.Remoting.Messaging;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System.Runtime.Remoting.Contexts;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; System.Runtime.Remoting.Activation;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Abhinaba.Aspect.Security&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    internal&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAspect&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; : &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        internal&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; SecurityAspect(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; next)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;m_next = next;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; m_next;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;#region&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; IMessageSink implementation&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; NextSink&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; m_next;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; SyncProcessMessage(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessage&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; msg)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Preprocess(msg);&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessage&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; returnMethod =&lt;br /&gt;                             m_next.SyncProcessMessage(msg);&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; returnMethod;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageCtrl&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; AsyncProcessMessage(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; msg,&lt;br /&gt;                                 &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; replySink)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            throw&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;InvalidOperationException&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        #endregion&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;//IMessageSink implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;       #region&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Helper methods&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        private&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Preprocess(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; msg)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008000;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;// We only want to process method calls&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            if&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; (!(msg &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;is&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMethodMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;)) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMethodMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; call = msg &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMethodMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; type = &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.GetType(call.TypeName);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            string&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; callStr = type.Name + &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"."&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; + call.MethodName;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.WriteLine(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Security validating : {0} for {1}"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;,&lt;br /&gt;                         callStr,&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Environment&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.UserName);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        #endregion&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Helpers&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityProperty&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; : &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IContextProperty&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;,&lt;br /&gt;                                   &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IContributeObjectSink&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008080;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        #region&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; IContributeObjectSink implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; GetObjectSink(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MarshalByRefObject&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; o,&lt;br /&gt;                                           &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMessageSink&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; next)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAspect&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(next);&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        #endregion&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;// IContributeObjectSink implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        #region&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; IContextProperty implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#006400;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;// Implement Name, Freeze, IsNewContextOK&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        #endregion&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;//IContextProperty implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AttributeUsage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AttributeTargets&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.Class)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAttribute&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; : &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextAttribute&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="color:#008080;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; SecurityAttribute() : &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;base&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Security"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;) { }&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        public&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;override&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; GetPropertiesForNewContext(&lt;br /&gt;                              &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IConstructionCallMessage&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; ccm)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;           &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ccm.ContextProperties.Add(&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityProperty&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;());&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="color:#0000ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAttribute&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; derives from &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextAttribute&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyClass&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; derives from &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ContextBoundObject&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, due to this even before the ctor of the class is called the framework instantiates &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAttribute&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and calls the &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;GetPropertiesForNewContext&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; passing it a reference to &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IConstructionCallMessage&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAttribute&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; creates an instance of &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityProperty&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and adds it to the context. This addition makes the framework call the various &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IContextProperty&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; methods that &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityProperty&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; implements and then calls the ctor of &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyClass&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;After this the first time any &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MyClass&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; method or variable is referenced it calls &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;GetObjectSink&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; method of&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityProperty&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; through its &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IContributeObjectSink&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; interface. This method returns a newly created instance of &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAspect&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. Till this you can consider everything as initialization code and&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAspect&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; implements our main functionality for AOP advice.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;When the instance of &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SecurityAspect&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is created its constructor is passed a reference to next message sink so that all the sinks can be chained and called one after the other. After this &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SyncProcessMessage&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is called which is our main method interceptor and where all processing is done. After doing all processing like security verification the code calls the target method. Then it can refer to the return value and do post-processing. With this we have AOP implementation albeit some intrusive code as the target codes needs to be modified for AOP support.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Possibilities&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AOP is a very generic programming method and can be used in a variety of situation. Some of them are as follows&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Factoring out common cross-cutting code like logging, security verification&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Design_by_contract" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Design by contract verification&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Non-intrusive profiling&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Sample code&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The sample solution (VS2005) including all sources &lt;/span&gt;&lt;a href="http://abhinaba.members.winisp.net/blog/Sources/AOPSample.zip" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;are available here&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. It contains sources for two different aspects, one for security and one for tracing both applied on the same class. I have applied conditional compilation attribute to the tracing aspect so that on release build tracing gets disabled.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8274139698304493011?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8274139698304493011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/aspect-oriented-programming-using-net_3567.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8274139698304493011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8274139698304493011'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/aspect-oriented-programming-using-net_3567.html' title='Aspect Oriented Programming using .NET'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-3633130024147374502</id><published>2009-04-25T04:49:00.000-07:00</published><updated>2009-05-15T00:36:59.675-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PrOgramming'/><title type='text'>True object oriented language</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Today I was spreading the goodness of &lt;a href="http://www.ruby-lang.org/en/about/" style="text-decoration: none; color: rgb(0, 102, 170); "&gt;Ruby&lt;/a&gt; and why I love it so much (and you can expect multiple posts on it). SmallTalk programmers can sneer at me, but hey I wasn't even born when SmallTalk came into being and hence I can be pardoned for pretending that Ruby invented this :)&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Languages like Ruby are "truly" object oriented. So even a number like 2 is an instance of the FixNum class. So the following is valid Ruby code which returns the absolute value of the number.&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;-12345.abs&lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Taking this to an extreme is the iteration syntax. In C# to write something in a loop "n" time I'd be needed to get into for/foreach syntax, however in Ruby I can do the following&lt;/p&gt;&lt;pre style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); margin-left: 20px; margin-right: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); color: black; font-family: 'Courier New'; padding-left: 12px; padding-top: 12px; padding-bottom: 12px; background-position: initial initial; "&gt;5.times { puts "Hello"} &lt;/pre&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Which prints Hello 5 times.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;However, I actually lied about having to use for/foreach statement in C#. With the new &lt;a href="http://blogs.msdn.com/abhinaba/archive/2005/09/15/467926.aspx" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;extension-method&lt;/a&gt;/&lt;a href="http://blogs.msdn.com/abhinaba/archive/2005/09/17/469568.aspx" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;lambda&lt;/a&gt; goodness we can very well achieve something close in C#.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;For that first we create the following extension method&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;public static class Extensions&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;    public static void times(this int n, Action a)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;    {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;        for (int i = 0; i &lt;&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;        {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;            a();&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;        }&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;    }&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;Then we can call "times" on an int as easily (well almost as I still need some lambda ugliness).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;5.times(() =&gt; Console.WriteLine("Hello"));&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;// Or &lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;6.times(delegate { Console.WriteLine("Hello"); }); &lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-3633130024147374502?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/3633130024147374502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/true-object-oriented-language.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/3633130024147374502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/3633130024147374502'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/true-object-oriented-language.html' title='True object oriented language'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-8950564751796436553</id><published>2009-04-25T04:44:00.000-07:00</published><updated>2009-05-15T00:39:56.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>How do you name your computer</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 12px; line-height: 15px; "&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Windows gives examples of "Kitchen Computer" or "Mary's Computer" for setting the name of a computer (&lt;em&gt;Computer Name&lt;/em&gt; tab in &lt;em&gt;System Properties&lt;/em&gt;). But I'm sure that most people don't name their computers that way and show off a bit of creativity in it.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Previously I used to use names from Asterix like GetAFix for my main dev box. Now I exclusively use names from &lt;a href="http://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy_%28book%29" style="text-decoration: none; color: rgb(0, 102, 170); "&gt;Hitchhiker's Guide to the Galaxy&lt;/a&gt;. Some of the machines I use are named as below&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Places_in_The_Hitchhiker%27s_Guide_to_the_Galaxy#Traal" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;traal&lt;/a&gt;: My test box&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Places_in_The_Hitchhiker%27s_Guide_to_the_Galaxy#Krikkit" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;Krikkit&lt;/a&gt;: My dev box&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Races_and_species_in_The_Hitchhiker's_Guide_to_the_Galaxy#Vogons" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;Vogon&lt;/a&gt;: A old vintage machine I have at work which I use to test some perf scenarios (Vista on 512mb RAM :^) )&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Races_and_species_in_The_Hitchhiker's_Guide_to_the_Galaxy#Hooloovoo" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;Hooloovoo&lt;/a&gt; : My personal laptop&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Races_and_species_in_The_Hitchhiker's_Guide_to_the_Galaxy#Ravenous_Bugblatter_Beast_of_Traal" style="text-decoration: none; color: rgb(0, 102, 170); border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; "&gt;Bugblatter&lt;/a&gt;: Another laptop&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;What name do you use?&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1071282002093485304-8950564751796436553?l=dotneta2z.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotneta2z.blogspot.com/feeds/8950564751796436553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/how-do-you-name-your-computer.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8950564751796436553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1071282002093485304/posts/default/8950564751796436553'/><link rel='alternate' type='text/html' href='http://dotneta2z.blogspot.com/2009/04/how-do-you-name-your-computer.html' title='How do you name your computer'/><author><name>Selva</name><uri>http://www.blogger.com/profile/14982322594217931593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/-ddbNq_aA4Mo/TigA1igSOPI/AAAAAAAAI4A/fKUOoi854cs/s220/DSC_0220.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1071282002093485304.post-4667750956488856067</id><published>2009-04-24T05:14:00.000-07:00</published><updated>2009-05-15T00:36:59.675-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PrOgramming'/><title type='text'>Projects With Source Code</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(85, 85, 85); font-size: 13px; "&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Hi Here we Are Providing Links To Get Projects with Source Code&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;a class="LogoTableHomeLink" href="http://www.nopcommerce.com/" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;nopCommerce(shopping cart)&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;nopCommerce is a fully customizable shopping cart. It's stable and highly usable. nopCommerce is a open source e-commerce solution that is &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ASP.NET 3.5&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; based with a &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MS SQL 2005&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; (or higher) backend database. Our easy-to-use shopping cart solution is uniquely suited for merchants that have outgrown existing systems, and may be hosted with your current web host or our hosting partners. It has everything you need to get started in selling physical and digital goods over the internet.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Download sample Projects from Microsoft official Site &lt;/span&gt;&lt;a class="ZoomFix" href="http://www.codeplex.com/" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;CodePlex&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;a class="ZoomFix" href="http://www.codeplex.com/" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt;&lt;a href="http://www.codeplex.com/" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;CodePlex&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is Microsoft's open source project hosting web site. You can use CodePlex to create new projects to share with the world, join others who have already started their own projects, or use the applications on this site and provide feedback.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span id="ctl00_ContentPlaceHolder1_lblResults" style="font-weight: bold; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://www.dotnetspider.com/projects/3-Library-Management-System.aspx" title="Library Management System" target="_blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Library Management System&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span id="ctl00_ContentPlaceHolder1_lblResults"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A simple library management system that provides following facilities login, register, add category, add / remove book, search / issue book, return book. Language used is C# and db is SQL server 2000 and SQL Client has been used in code.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span id="ctl00_ContentPlaceHolder1_lblResults"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Some sample &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;b&gt;&lt;a href="http://www.dotnetspider.com/projects/" target="_blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Projects&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;span id="ctl00_ContentPlaceHolder1_lblResults"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; are provides by dotnetspider.com&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.codeplex.com/blogengine/Wiki/View.aspx" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span style=""&gt;BlogEngine.NET Web Site&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.codeplex.com/blogengine/Wiki/View.aspx" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;BlogEngine.NET is a full-featured blogging platform that is a breeze to set up, customize, and use. BlogEngine.NET works with your choice of data source; you may use SQL Server, or you may take the plug’n’play approach using XML files.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;a href="http://www.binaryintellect.net/articles/90c5e99d-6574-4cc2-a779-73f88c288819.aspx" target="_blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Jobs Site Starter Kit&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Jobs Site Starter Kit (JSSK) is an ASP.NET starter kit demonstrating many new features of ASP.NET 2.0 including themes, master pages, new data controls, membership, roles and profiles. JSSK is a web application that provides a platform for candidates seeking job and the employers to share their needs.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.asp.net/community/projects/" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span style=""&gt;Starter Kits and asp.net Community Projects&lt;/span&gt;&lt;/a&gt;The ASP.NET 2.0 Starter Kits for Visual Web Developer are fully functional sample applications to help you learn ASP.NET 2.0 and accomplish common Web development scenarios. Each sample is complete and well-documented so that you can use the code to kick start your Web projects today! These kits, once downloaded are integrated directly into the Visual Web Developer 2005 Express Edition or Visual Studio 2005 experience.&lt;a href="http://www.asp.net/community/projects/" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p style="text-align: justify;"&gt;&lt;a href="http://www.vijaymukhi.com/vmis/prjs/p8/AttProject/index.htm" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Attendance Analysis System:&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;“Attendance Analysis System”&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is developed, keeping in mind the requirements about day-to-day handling of attendance of the students by the faculties in the engineering colleges. By using Attendance analysis system, a lecturer can keep track of attendance of every student, analyze it and finally build a Microsoft Word based report.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.vijaymukhi.com/vmis/prjs/p6/index.htm" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="color: rgb(85, 85, 85); "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.vijaymukhi.com/vmis/prjs/p6/index.htm" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;ASP.Net - Shopping Cart&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;div style="text-align: justify;"&gt;This is a fictitious Web Based E-Commerce Site developed for users who visit a typical shopping site for online buying . Apart from normal features of a sales site ,some&lt;span&gt; &lt;/span&gt;value added features such as&lt;span&gt; &lt;/span&gt;accessing Web Services, Credit Card validation, Emailing ,Report Generation using inbuilt crystal reports for managerial&lt;span&gt; &lt;/span&gt;access have been added. I have also made a provision for adding new products,categories ,sub categories…….image uploading etc for the manager of the company.&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.programmer2programmer.net/live_projects%5Cproject_1%5Cebilling_invoice_system.aspx" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span class="Apple-style-span" style="color: rgb(85, 85, 85); "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.programmer2programmer.net/live_projects%5Cproject_1%5Cebilling_invoice_system.aspx" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;eBilling and Invoice System&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;eBilling and Invoice System is a live project written in Visual Basic 6 programming language. It is a working solution. I give you complete project listing with all project file, source code, database, crystal reports. You can use this project as you want. You can free download all the project documentation, project source code, project executable files, database downlodefrom link. Code are well commented for your reference, however if you want any clarification you can contact me for further explanation.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;a href="http://www.programmer2programmer.net/live_projects%5Cproject_3%5CIMPRO.aspx" target="_Blanck" style="text-decoration: none; color: rgb(227, 15, 15); background-color: transparent; "&gt;&lt;span style=""&gt;&lt
