<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Ponder .NET</title><link>http://weblogs.asp.net/dmckinstry/default.aspx</link><description>Dave's thoughts on VSTS, VS, BTS, WSS, VSTO, and any other acronym you can think of...</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>A few hints for DB Pro startup time</title><link>http://weblogs.asp.net/dmckinstry/archive/2008/04/03/a-few-hints-for-db-pro-startup-time.aspx</link><pubDate>Thu, 03 Apr 2008 16:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6062852</guid><dc:creator>dmckinstry</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=6062852</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2008/04/03/a-few-hints-for-db-pro-startup-time.aspx#comments</comments><description>&lt;P&gt;When I work with clients and show them how Visual Studio Team System Database Edition can impact their SQL Server development process most of them are very impressed.&amp;nbsp; I've helped several clients get going with these tools.&amp;nbsp; One common concern, when you get past the Northwinds-like databases into large and complex databases is the startup time for loading Visual Studio solutions that include database projects.&lt;/P&gt;
&lt;P&gt;There are some ways to significantly tool improve performance.&amp;nbsp; First, if you are using Visual Studio &lt;STRONG&gt;2005&lt;/STRONG&gt; Team Edition for Database Professionals, make sure you install SR1 and the &lt;A href="http://blogs.msdn.com/gertd/archive/2008/03/11/vsdb-2005-service-release-1-roll-up-package-1-kb941278.aspx" mce_href="http://blogs.msdn.com/gertd/archive/2008/03/11/vsdb-2005-service-release-1-roll-up-package-1-kb941278.aspx"&gt;Post-SR1 roll-up releases&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;If you are using Visual Studio 2008, these fixes aren't yet available. However one specific fix can be easily performed manually with great improvements on the startup time.&amp;nbsp; When I first read &lt;A href="http://blogs.msdn.com/gertd/default.aspx" mce_href="http://blogs.msdn.com/gertd/default.aspx"&gt;Gert&lt;/A&gt;'s blog posting on &lt;A href="http://blogs.msdn.com/gertd/archive/2008/02/16/database-compatibility-level.aspx" mce_href="http://blogs.msdn.com/gertd/archive/2008/02/16/database-compatibility-level.aspx"&gt;database compatibility level&lt;/A&gt; I didn't realize that it would impact project startup performance.&amp;nbsp; However it does!!!!&amp;nbsp; On my test case I was able to cut the startup time almost in half (~8 minutes down to &amp;lt;4.5 minutes).&amp;nbsp; Note that this was a large database with thousands of objects - it did a good job proving the performance improvement.&lt;/P&gt;
&lt;P&gt;A couple of final common sense hints...&amp;nbsp; Try to clean up your projects.&amp;nbsp; The warnings and errors slow things down as well.&amp;nbsp; Also, decouple your database projects.&amp;nbsp; That is, if you can realistically have a solution with a single database project it will obviously startup and operate faster than one with a dozen database projects.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6062852" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>What we know about "Rosario"...</title><link>http://weblogs.asp.net/dmckinstry/archive/2008/03/28/what-we-know-about-quot-rosario-quot.aspx</link><pubDate>Fri, 28 Mar 2008 21:36:43 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6042590</guid><dc:creator>dmckinstry</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=6042590</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2008/03/28/what-we-know-about-quot-rosario-quot.aspx#comments</comments><description>&lt;p&gt;Over the past few weeks I've been presenting a series of Technical Briefings on Visual Studio 2008 Team System.&amp;#160; At the tail of the briefing I demo and discussed what we officially know about&amp;#160; next version of Visual Studio Team System, code named Rosario.&amp;#160; I could only show and talk about these futures based on what was officially documented from Microsoft and what I could surmise from the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&amp;amp;displaylang=en"&gt;publicly available VPC&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;If you want to see the specifications for proposed functionality, the following specifications are available from the &lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/bb936702.aspx"&gt;Rosario Specifications site on MSDN&lt;/a&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=7807942"&gt;Add to Source Control&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=7807943"&gt;History Improvements&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=7807944"&gt;Improved Label Dialog&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=8204567"&gt;Resolve Improvements&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/e/0/e/e0ed04ec-bf14-4dd6-b5ad-22094b128498/Bug-Submission-Portal.xps"&gt;&amp;quot;TFS Bug Submission Portal&amp;quot;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/e/0/e/e0ed04ec-bf14-4dd6-b5ad-22094b128498/Send-Mail-for-TFS.xps"&gt;Send Mail from TFS&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/e/0/e/e0ed04ec-bf14-4dd6-b5ad-22094b128498/TFS-Linking.xps"&gt;Core Linking Work Item Tracking&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Although some of these were originally posted late last year, some were posted as recently as a month ago.&amp;#160; I hope Microsoft continues to show us where they are going.&amp;#160; It helps us provide the feedback they need and helps us plan for the future.&lt;/p&gt;  &lt;p&gt;And on that note, this is the future...&amp;#160; There is no released product for Rosario, no announced release date and no licensing for the CTP VPC.&amp;#160; There are some great features coming up but not enough to diminish what is available today.&amp;#160; VSTS is already a great product and when it becomes available Rosario will only make things better!&lt;/p&gt;  &lt;p&gt;A final P.S. - If you're waiting on the content posting to the &amp;quot;SkyDrive&amp;quot; from the tech briefings I'm afraid you'll need to wait a little longer.&amp;#160; Tara and I are still playing catch-up from the time on the road!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6042590" width="1" height="1"&gt;</description></item><item><title>Extending the Nov 07 Rosario CTP Virtual PC</title><link>http://weblogs.asp.net/dmckinstry/archive/2008/03/22/extending-the-nov-07-rosario-ctp-virtual-pc.aspx</link><pubDate>Sat, 22 Mar 2008 17:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6011490</guid><dc:creator>dmckinstry</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=6011490</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2008/03/22/extending-the-nov-07-rosario-ctp-virtual-pc.aspx#comments</comments><description>&lt;P&gt;I've been demonstrating the capabilities of Visual Studio Team System recently in a series of tech briefings.&amp;nbsp; In addition to what is available today, I've been showing some of what the future might hold using the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&amp;amp;displaylang=en"&gt;&lt;FONT color=#669966&gt;November 2007 Community Technology Preview (CTP) of code name "Rosario"&lt;/FONT&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Unfortunately, about a week ago the Visual Studio preview time-bombed and my demos became far less compelling.&amp;nbsp; Actually, the CTP wasn't really scheduled to be obsolete yet and legally it can be extended for continued investigation or, in my case, demonstrations.&amp;nbsp; I did the time honored trick of setting the clock of the Virtual PC's host back to a time before the expiration and managed to keep the demos alive.&lt;/P&gt;
&lt;P&gt;At some point we can expect Microsoft to release another CTP without this problem.&amp;nbsp; In the mean time, if you have the CTP and want to keep playing, &lt;A href="http://blogs.msdn.com/jeffbe/default.aspx"&gt;&lt;FONT color=#669966&gt;Jeff Beehler&lt;/FONT&gt;&lt;/A&gt; offered me this little trick...&amp;nbsp; You can turn off the synchronization of the VPC to the host machine by modifying the *.vmc (in this case Nov2007RosarioCTP.vmc).&lt;/P&gt;
&lt;P&gt;To do so, edit your VMC and add the following within the&amp;nbsp; &amp;lt;preferences&amp;gt;&amp;lt;integration&amp;gt;&amp;lt;microsoft&amp;gt; node: &lt;/P&gt;
&lt;P&gt;&lt;A class="" name=_MailEndCompose&gt;&lt;/A&gt;&lt;FONT face="Lucida Console" color=#669966 size=2&gt;&amp;lt;components&amp;gt;&lt;/FONT&gt; &lt;BR&gt;&lt;FONT face="Lucida Console" size=2&gt;&amp;nbsp; &amp;lt;host_time_sync&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;enabled type="boolean"&amp;gt;false&amp;lt;/enabled&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/host_time_sync&amp;gt; &lt;BR&gt;&amp;lt;/components&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;A few side notes:&amp;nbsp; First, the release date on the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&amp;amp;displaylang=en"&gt;&lt;FONT color=#669966&gt;Rosario CTP download page&lt;/FONT&gt;&lt;/A&gt; has been updated so this trick &lt;STRONG&gt;might&lt;/STRONG&gt; only be needed for people who have already downloaded the image and don't want to re-download the 4.8GB image.&amp;nbsp; Since I haven't downloaded the newer image I can't confirm this assumption.&lt;/P&gt;
&lt;P&gt;Second, TFS doesn't like going back in time.&amp;nbsp; If you are going to set the clock back on the VPC to allow it to keep working, don't set it back to a time before the last activity in the VPC TFS.&lt;/P&gt;
&lt;P&gt;Finally, this trick isn't to get around licensing issues.&amp;nbsp; Since this is a prerelease, the trick is only to keep us up and running until Microsoft gets a new version for us to play with.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6011490" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Pass+it+on/default.aspx">Pass it on</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category></item><item><title>Making good on a non-resolution...</title><link>http://weblogs.asp.net/dmckinstry/archive/2008/03/19/making-good-on-a-non-resolution.aspx</link><pubDate>Wed, 19 Mar 2008 14:25:59 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5998885</guid><dc:creator>dmckinstry</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5998885</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2008/03/19/making-good-on-a-non-resolution.aspx#comments</comments><description>&lt;p&gt;As I indicated in my first post of the year, I have given up New Year's Resolutions, but I do have intents for this year...&amp;#160; In specific, getting back into community involvement and speaking.&lt;/p&gt;  &lt;p&gt;Last week through an unexpected shuffle I ended up presenting on VSTS Technology Briefings this week and next week.&amp;#160; These are free events sponsored by Microsoft and &lt;a href="http://www.notionsolutions.com/"&gt;Notion Solutions&lt;/a&gt; and cover the breadth in VSTS 2008 and beyond in a demo-rich full day presentation.&amp;#160; My collegue and fellow MVP, &lt;a href="http://www.michaelazocar.com/blog/"&gt;Mike Azocar&lt;/a&gt;, did the first two in briefings in Florida.&amp;#160; I did one yesterday in Charlotte, NC and have three more scheduled in the southern US over the next week.&lt;/p&gt;  &lt;p&gt;If you're in the area and want the latest on Team System 2008 and beyond, check out one of the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032367772&amp;amp;Culture=en-US"&gt;Raleigh/Durham - March 20 (tomorrow)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032368273&amp;amp;Culture=en-US"&gt;Birmingham - March 24 (Monday)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032367769&amp;amp;Culture=en-US"&gt;Atlanta (Alpharetta) - March 25 (Tuesday)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Thanks to &lt;a href="http://blogs.msdn.com/dougturn/archive/2008/02/10/visual-studio-team-system-2008-briefings-in-raleigh-birmingham-and-atlanta.aspx"&gt;Doug Turn&lt;/a&gt; for blogging easy access to the links and an idea of the schedule.&amp;#160; Note that the actual schedule was modified slightly to include Visual Studio 2008 Team System - Database Edition.&lt;/p&gt;  &lt;p&gt;And if you're near Little Rock instead, I'll be there on speaking on VSTS Database Edition and Unit Testing with Visual Studio 2008 Professional.&amp;#160; That is, at the Little Rock &lt;a href="http://techexpo.lrdnug.org/"&gt;Tech Expo 2008&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Hope to see you around!&amp;#160; Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5998885" width="1" height="1"&gt;</description></item><item><title>Team Build with SSIS Validation</title><link>http://weblogs.asp.net/dmckinstry/archive/2008/01/08/team-build-with-ssis-validation.aspx</link><pubDate>Tue, 08 Jan 2008 14:58:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5569618</guid><dc:creator>dmckinstry</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5569618</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2008/01/08/team-build-with-ssis-validation.aspx#comments</comments><description>&lt;P&gt;As I work with different clients, helping them understand how Team Build and Team Edition for Database Professionals can help, a frequent request I get is "How does SQL Server **** Services work with it?"&amp;nbsp; (With **** being 'Integration', 'Reporting', etc.).&amp;nbsp; My general answer is "These already have Visual Studio integration so you don't need special tools for version control and work item integration."&amp;nbsp; However, if you've been using Team System you already know that Version Control and work items are not the entire story.&lt;/P&gt;
&lt;P&gt;As I've described in previous posts (parts &lt;A href="http://weblogs.asp.net/dmckinstry/archive/2007/04/30/take-control-of-quot-building-quot-your-database.aspx" mce_href="http://weblogs.asp.net/dmckinstry/archive/2007/04/30/take-control-of-quot-building-quot-your-database.aspx"&gt;1&lt;/A&gt;, &lt;A href="http://weblogs.asp.net/dmckinstry/archive/2007/07/09/take-control-of-quot-building-quot-your-database-2-3.aspx" mce_href="http://weblogs.asp.net/dmckinstry/archive/2007/07/09/take-control-of-quot-building-quot-your-database-2-3.aspx"&gt;2&lt;/A&gt; and &lt;A href="http://weblogs.asp.net/dmckinstry/archive/2007/07/17/take-control-of-quot-building-quot-your-database-3-3.aspx" mce_href="http://weblogs.asp.net/dmckinstry/archive/2007/07/17/take-control-of-quot-building-quot-your-database-3-3.aspx"&gt;3&lt;/A&gt;), Team Build can be used to very effectively create and execute change scripts against a target database as part of you application build process.&amp;nbsp; In fact, you can also automatically generate test data and execute unit tests against the resulting database.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;So how does this tie into other SQL Services such as SQL Server Integration Services? The basic answer is 'not well'.&amp;nbsp; To "Build" the other SQL Server services you generally need to 'EXEC' into Visual Studio (i.e., DEVENV) to cause the 'compilation' of the to occur.&amp;nbsp; If you want more details on this process, check out &lt;A href="http://blogs.msdn.com/buckh/archive/2007/07/13/how-to-build-projects-in-team-build-that-only-visual-studio-can-build.aspx" mce_href="http://blogs.msdn.com/buckh/archive/2007/07/13/how-to-build-projects-in-team-build-that-only-visual-studio-can-build.aspx"&gt;Buck Hodges' blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;As described in the title of this post, I am not even trying to 'Build' the SSIS packages.&amp;nbsp; SQL Server can access SSIS packages (i.e., *.dtsx) directly from the file system and that is how my client was using SSIS.&amp;nbsp; However, they did want to verify that the packages would still work after changes occurred to any of the related SQL Server databases or even the packages themselves!&lt;/P&gt;
&lt;H3&gt;Building an SSIS Validation Unit Test&lt;/H3&gt;
&lt;P&gt;We looked into a few possible ways to exercise or validate SSIS packages as part of the build process.&amp;nbsp; The clear answer in our case was to build a unit test which called on the SSIS object model.&amp;nbsp; This would allow us to either validate the structure of the SSIS packages against the target data sources or actually execute them.&lt;/P&gt;
&lt;P&gt;Building a unit test to validate SSIS starts with a standard test project in Visual Studio; I use MSTest with Visual Studio Team System but nUnit or similar unit test frameworks should work as well.&amp;nbsp; Your unit test project needs to reference the SQL assemblies: Microsoft.SQLServer.DTSRuntimeWrapper and Microsoft.SQLServer.ManagedDTS&lt;STRONG&gt;.&lt;/STRONG&gt;&amp;nbsp; Of course, you will need to have the appropriate SQL Server components installed on both your development environment and your build environments for this to work.&lt;/P&gt;
&lt;P&gt;Once you've created the test project, you'll need two classes to support SSIS validation.&amp;nbsp; First you will need a unit test class.&amp;nbsp; Although this is obvious, it may not be obvious that you may only need a single unit test class, regardless of how many SSIS packages need validation.&amp;nbsp; Second, you need a support class to sink the events from the SSIS engine.&lt;/P&gt;
&lt;H4&gt;SSIS Event Support Class&lt;/H4&gt;
&lt;P&gt;The SSIS Event Handling Class will provide an interface between the unit test and the SSIS validation or execution being performed by SQL Server.&amp;nbsp; Although you could force fit this back into the unit test class, I chose separate it to make it easier to understand.&lt;/P&gt;
&lt;P&gt;The following snippet demonstrates a minimal implementation of the SSIS Event Handling class; I've included a few comments in areas that you're likely to expand on:&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt; Microsoft.SqlServer.Dts.Runtime; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;// Additional “using” statements omitted for brevity &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;// This class receives events from SSIS, logs them to the “console” &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;// and stores them in a list for consumption by the unit test. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;namespace&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt; SSISTestFramework &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;{&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// “DefaultEvents” base class is from the SSIS Runtime &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;internal&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;SsisEventSupport&lt;/SPAN&gt; : DefaultEvents &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;gt; errors = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;gt;(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;gt; ErrorCollection &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt; { &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; errors; } &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&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; OnError(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;DtsObject source, &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; errorCode, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; subComponent, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; description, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; helpFile, &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; helpContext, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; idofInterfaceWithError) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.Write(&lt;SPAN style="COLOR: #a31515"&gt;" *** {0} "&lt;/SPAN&gt;, description); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;errors.Add(description); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.OnError(source, errorCode, subComponent, description, helpFile, helpContext, idofInterfaceWithError); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;}&lt;/SPAN&gt; 
&lt;P&gt;You can use this block as a starter to build your own class.&amp;nbsp; You may want to override some of the other events from by the DefaultEvents class to gather more information about what is happening during SSIS validation and execution.&lt;/P&gt;
&lt;H4&gt;SSIS Unit Test Class&lt;/H4&gt;
&lt;P&gt;Of course, the event handling class is nothing without something to wire it to the SSIS engine.&amp;nbsp; The unit test class will configure SQL Server Integration Services engine to reference the SSIS package, validate it and report the results through the event handling class.&lt;/P&gt;
&lt;P&gt;As before, a code-snippet is worth a thousand words so here is a minimalist implementation:&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt; Microsoft.SqlServer.Dts.Runtime; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;// Other 'using' statements omitted for brevity &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;namespace&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt; SSISTestFramework &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[TestClass] &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;SsisValidation &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; SsisValidation() { } &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Other 'standard' unit test stuff such &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="COLOR: green"&gt;as test context omitted for brevity &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// You may want to databind the package file to easily &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// validate different packages with a single test. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[TestMethod] &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; ValidatePackage() &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; packageFile = &lt;SPAN style="COLOR: #a31515"&gt;@"C:\SomePath\SomePackage.dtsx"&lt;/SPAN&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; validateOnly = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Note: the WriteLine is valuable for getting &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="COLOR: green"&gt;status on test runs with multiple packages. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Validating \"{0}\"..."&lt;/SPAN&gt;, packageFile); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;List&amp;lt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;gt; failures = ValidateExecutePackage(packageFile, validateOnly);&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Verify no errors were passed back from SSIS. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Assert.AreEqual(0, failures.Count, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packageName + &lt;SPAN style="COLOR: #a31515"&gt;" failed SSIS Validation."&lt;/SPAN&gt;); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"... Completed validation"&lt;/SPAN&gt;); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// This support method simplifies call SSIS &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; List&amp;lt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;gt; ValidateExecutePackage(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; packageName, &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; validateOnly) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// "Wire up" the SsisEventSupport object. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IDTSEvents events = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; SsisEventSupport();&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;try &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// The SSIS (*.dtsx) file is an XML document.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // load it into memory to pass off to the &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// SSIS object model. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;XmlDocument doc = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; XmlDocument(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;doc.Load(packageName);&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Package pkg = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; Package(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;pkg.LoadFromXML(doc, events);&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// NOTE: It is possible to reference the 'pkg' object &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to substitute connection information for testing &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// purposes.&amp;nbsp; Leave null for existing connections. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Connections cons = pkg.Connections;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// You can execute or simply validate the structure based &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// on the validateOnly flag &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (validateOnly) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;pkg.Validate(cons, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;, events, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;else &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;pkg.Execute(cons, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;, events, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt; (System.IO.&lt;SPAN style="COLOR: #2b91af"&gt;FileNotFoundException&lt;/SPAN&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Assert.Fail(&lt;SPAN style="COLOR: #a31515"&gt;"Failed to access package: "&lt;/SPAN&gt; + packageName); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Return the error list from SsisEventSupport.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; ((SsisEventSupport)events).ErrorCollection; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: " yes? mso-no-proof: New?; ?Courier mso-bidi-font-family: 10.0pt; mso-bidi-font-size: console?; lucida&gt;} &lt;/SPAN&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5569618" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category></item><item><title>2008 New Years Resolution (NOT)</title><link>http://weblogs.asp.net/dmckinstry/archive/2008/01/07/2008-new-years-resolution-not.aspx</link><pubDate>Mon, 07 Jan 2008 07:19:17 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5562640</guid><dc:creator>dmckinstry</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5562640</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2008/01/07/2008-new-years-resolution-not.aspx#comments</comments><description>&lt;p&gt;Some people are good at following through on New Years Resolutions - others are not.&amp;#160; The only &amp;quot;New Years Resolution&amp;quot; that I've ever managed to keep was to &amp;quot;never again make a New Years Resolution&amp;quot;.&lt;/p&gt;  &lt;p&gt;On January 1st I received an email notification from Microsoft that &lt;a href="https://mvp.support.microsoft.com/profile=9FC763E6-8BCF-4D8D-99A2-E3ECA1B15877"&gt;my&lt;/a&gt; &lt;a href="http://mvp.support.microsoft.com/Default.aspx"&gt;MVP&lt;/a&gt; status had been renewed.&amp;#160; It probably shouldn't be too surprising - I think I've helped more people across the United States understand how to successfully adopt my current technology tool of choice, Visual Studio Team System, than I have historically.&amp;#160; But 2007 year was different for me.&amp;#160; I spent far more time in corporate settings educating the corporate development teams than in the &amp;quot;community.&amp;quot;&lt;/p&gt;  &lt;p&gt;Since joining &lt;a href="http://www.notionsolutions.com"&gt;Notion Solutions&lt;/a&gt;, I have spent more time flying around the country helping people with technology. As a result I've had to give up my leadership over the &lt;a href="http://www.ddnug.net"&gt;Dallas .NET Users Group&lt;/a&gt; and have had less time to focus on speaking engagements, user groups, publications and other community activities.&amp;#160; And frankly, I miss it...&lt;/p&gt;  &lt;p&gt;I'm not going to break the one good New Years Resolution that I have managed to keep (i.e., No more New Years Resolutions), but I do plan to be more active in the community this year.&amp;#160; Let's call it a &amp;quot;goal&amp;quot; to regain some community involvement in 2008 - starting with the &lt;a href="http://techexpo.lrdnug.org/"&gt;Little Rock Tech Expo 2008&lt;/a&gt;, articles for &lt;a href="https://mvp.support.microsoft.com/profile=AEA3A2A6-4537-4BC2-B79F-6F46B72ACF5F"&gt;Paul Hacker's&lt;/a&gt; &lt;a href="http://www.tfstimes.com/news/"&gt;TFS Times&lt;/a&gt; and the &lt;a href="http://www.notionsolutions.com/Default.aspx?tabid=106"&gt;Notion Solutions newsletters&lt;/a&gt;, and participation with the &lt;a href="http://www.dallasvsts.com/"&gt;Dallas VSTS Users Group&lt;/a&gt;.&amp;#160; Hopefully I'll manage to maintain support for my corporate users while reaching back into the community!&lt;/p&gt;  &lt;p&gt;Happy 2008!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5562640" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Pass+it+on/default.aspx">Pass it on</category></item><item><title>An early Christmas present from Microsoft: Power tools!</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/12/21/an-early-christmas-present-from-microsoft-power-tools.aspx</link><pubDate>Fri, 21 Dec 2007 20:46:55 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5484738</guid><dc:creator>dmckinstry</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5484738</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/12/21/an-early-christmas-present-from-microsoft-power-tools.aspx#comments</comments><description>&lt;p&gt;I don't usually like to pass on what others have blogged, but this release of the &amp;quot;Team Foundation Power Tools&amp;quot; is pretty slick, including:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Find in Source Control&lt;/li&gt;    &lt;li&gt;&amp;quot;Quick Label&amp;quot;&lt;/li&gt;    &lt;li&gt;Open In Windows Explorer (i.e., open Windows Explorer using a right-click in the Source Control Explorer window)&lt;/li&gt;    &lt;li&gt;Team Build notification (desktop tray)&lt;/li&gt;    &lt;li&gt;TFPT command line enhancements (e.g., DestroyWI and DestroyWITD)&lt;/li&gt;    &lt;li&gt;TFS 2008 Support - including an updated &amp;quot;Best Practices Analyzer&amp;quot; and &amp;quot;Process Template Editor&amp;quot;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The caveat is that this is for Visual Studio 2008... so if you needed another excuse to upgrade, here it is! :)   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/edhintz/archive/2007/12/21/team-foundation-power-tools-for-vs2008-hot-now.aspx"&gt;Ed Hintz blogged more details on the release&lt;/a&gt; which can be downloaded from &lt;a href="http://go.microsoft.com/?linkid=8013790"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Happy Holidays!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5484738" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Dallas area VSTS Users Rejoice!</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/12/05/dallas-area-vsts-users-rejoice.aspx</link><pubDate>Thu, 06 Dec 2007 01:27:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5408898</guid><dc:creator>dmckinstry</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5408898</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/12/05/dallas-area-vsts-users-rejoice.aspx#comments</comments><description>&lt;p&gt;If you're in the Dallas/Fort Worth area and are an avid Visual Studio Team System User, you'll be interested in a new users group.&amp;#160; I presented at the Dallas VSTS Users Group inaugural meeting last night.&amp;#160; It was a small group (12) of interested, engaged and experienced VSTS users, admins and consultants.&amp;#160;&amp;#160; Perhaps more interesting that the topic were all of the side discussions we had - everything from system architecture to licensing to assorted tips and tricks.&lt;/p&gt;  &lt;p&gt;Again, if you're in the area, look us up at &lt;a href="http://www.dallasvsts.com"&gt;www.dallasvsts.com&lt;/a&gt;.&amp;#160; If you not from the area - consider moving ;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5408898" width="1" height="1"&gt;</description></item><item><title>Orcas Lives!</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/11/19/orcas-lives.aspx</link><pubDate>Mon, 19 Nov 2007 18:24:59 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5282561</guid><dc:creator>dmckinstry</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5282561</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/11/19/orcas-lives.aspx#comments</comments><description>&lt;p&gt;I usually try to avoid simply passing on what others have already announced.&amp;nbsp; This is one of my exceptions.&amp;nbsp; If you haven't already heard, Visual Studio 2008 has released and is available through MSDN downloads.&amp;nbsp; I'm downloading Team Suite it as I type.&amp;nbsp; I haven't seen TFS 2008 posted yet but it is supposed to be live today as well!&lt;/p&gt; &lt;p&gt;There are numerous good posts regarding this but I want to point specifically to &lt;a href="http://blogs.msdn.com/jeffbe"&gt;Jeff Beehler&lt;/a&gt; and his &lt;a href="http://blogs.msdn.com/jeffbe/archive/2007/11/19/visual-studio-team-system-2008-ships.aspx"&gt;Visual Studio 2008 ships&lt;/a&gt; post.&amp;nbsp; This one includes a list of the key updates that make up Visual Studio 2008 Team System.&lt;/p&gt; &lt;p&gt;Happy Downloading!!!!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5282561" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Pass+it+on/default.aspx">Pass it on</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Inside VSTS Manual Tests - Excel anyone?</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/11/13/inside-vsts-manual-tests-excel-anyone.aspx</link><pubDate>Tue, 13 Nov 2007 14:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5121641</guid><dc:creator>dmckinstry</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=5121641</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/11/13/inside-vsts-manual-tests-excel-anyone.aspx#comments</comments><description>&lt;P&gt;I've been working with many different companies on Application Lifecycle Management with Team System and, more recently, doing a lot of work with quality assurance.&amp;nbsp; I've also been teaching &lt;A href="http://www.sqe.com/Events/public.asp?f=dis&amp;amp;ci=vts" mce_href="http://www.sqe.com/Events/public.asp?f=dis&amp;amp;ci=vts"&gt;SQE's Visual Studio Team System tester class&lt;/A&gt;.&amp;nbsp; In all cases I receive common questions about whether you can change the included Microsoft Word template or if you can use another format such as Excel.&amp;nbsp; The answer to both questions is 'Yes', but it isn't simply clicking a button.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Here is some background to help you understand how Manual Tests are stored which then leads to how you can adapt them...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;What is an MHT file?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Anyone who has created a manual test in Visual Studio will recognize the icon and the editor.&amp;nbsp; The file created appears to be a standard Microsoft Word document.&amp;nbsp; However it uses a less known files extension: &lt;A href="http://filext.com/file-extension/mht" mce_href="http://filext.com/file-extension/mht"&gt;mht&lt;/A&gt;.&amp;nbsp; For those of you not familiar with it, this is not some bizarre proprietary Microsoft Word-only format.&amp;nbsp; In fact, it is probably better known in its relationship to web browsers such as Internet Explorer.&amp;nbsp; An MHT file is an archived web page; unlike a standard HTML file, all of the content required to render the page is embedded within the MHTML document Itself.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;So why does this matter in terms of testing?&amp;nbsp; This little fact reveals how the manual test runner in Visual Studio operates: the portion of the screen that displays the manual test content is basically just a web browser.&lt;/P&gt;
&lt;P&gt;This means that most things that can be displayed in a web browser can be displayed in the Visual Studio manual test window.&amp;nbsp; It also opens the door for us to create our own MHT files with other tools - such as Excel.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=246&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_2.png" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=140 alt=image src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb.png" width=244 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb.png"&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Just add Properties...&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;So an MHT file is basically just a web page, right?&amp;nbsp; Right! And I can create an MHT file with just about any Microsoft Office application, right?&amp;nbsp; Right! So to create my own MHT template I just need to save it as an MHT and I'm done, right?&amp;nbsp; Well, almost...&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;There is still a some magic information that is required to convert an MHT into a Manual Test.&amp;nbsp; In specific, you need to add the fact that it &lt;U&gt;is&lt;/U&gt; a manual test and an unique identifier for that specific test.&amp;nbsp; If your MHT editor is Microsoft Office, you can find this in the document properties.&amp;nbsp; For Microsoft Word 2007, accessing document properties is as easy as 1.. 2.. 3..&amp;nbsp; First you access click the Microsoft Office button in the corner, then select Prepare and finally Properties.&amp;nbsp; If you are using Office 2003 (Word or Excel) it is even easier - just select "Properties" under the File menu.&lt;/P&gt;
&lt;P&gt;The properties that allow Manual Tests to operate are all custom properties. You can view them in an existing document by selecting the Custom tab on the document properties window.&lt;/P&gt;
&lt;P&gt;The two custom properties we are interested in are: &lt;/P&gt;&lt;BL&gt;
&lt;LI&gt;TestType - This property must contain the value "Manual Test". 
&lt;LI&gt;TestID - This property must contain a GUID value that is unique across the solution. In fact, by it's definition, a GUID should be globally unique. If you have multiple tests with the same GUID you could confuse Visual Studio! &lt;/BL&gt;
&lt;P&gt;If you don't already know about GUIDs, let me point you to a utility built into Visual Studio that allows generation of GUIDs.&amp;nbsp; To access it, simply pull down the "Tools" menu and access "Create GUID".&amp;nbsp; If you use this method to generate a GUID, you can directly copy it using the 'Copy' button.&amp;nbsp; Use the radio button marked '' to make sure you are selecting the correct format.&lt;/P&gt;
&lt;P&gt;One additional note: the additional Manual Test properties, such as Associated Work Items and Priority, are also stored as custom document properties.&lt;/P&gt;&lt;/LI&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=222&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_4.png" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=244 alt=image src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_1.png" width=221 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_1.png"&gt;&lt;/A&gt;&lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_8.png" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_8.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=244 alt=image src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_3.png" width=204 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Summary steps for creating an Excel 2003-based Manual Test...&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Since many people have existing Microsoft Excel-based test cases that they'd like to convert for use with Visual Studio 2005 Team Edition for Software Testers (or in the very near future, Visual Studio 2008 Test Edition), I've summarized the above information into the following steps converting spreadsheets into Manual Tests.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;OL&gt;
&lt;LI&gt;Open or create your Excel spreadsheet using Microsoft Excel. 
&lt;LI&gt;Access the document properties as described above. 
&lt;LI&gt;Select the "Custom" tab. 
&lt;LI&gt;Create a new property named "TestType" (no space), with a type "Text" and the value "Manual Test" (including a space).&amp;nbsp; Click the "Add" button to add it. 
&lt;LI&gt;Create another new property named "TestID" of type text. 
&lt;LI&gt;Create a new GUID; you can use your favorite tool or Visual Studio as described above.&amp;nbsp; Paste it in as the value for your "TestID" property.&amp;nbsp; Note that the GUID should be in 'Registry format' without the curly braces (e.g., "9C352DB0-BCE1-4D8C-854E-D890BDE19573").&amp;nbsp; Remember to click the "Add" button. 
&lt;LI&gt;Click OK to exit the properties dialog. 
&lt;LI&gt;Save the spreadsheet as a different file (i.e., use the "Save As" feature from the menus).&amp;nbsp; Make sure to select "Single File Web Page (*.mht, *.mhtml)" as the format as shown to the right. 
&lt;LI&gt;"Add" the new test case to your test project.&amp;nbsp; From within Visual Studio with a test project already and visible in Solution Explorer, right-click on the destination project and select Add &amp;gt; Existing Item...&amp;nbsp; This is also shown in a capture to the right. 
&lt;LI&gt;Browse to and select the MHT file that you just saved.&lt;/LI&gt;&lt;/OL&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=239&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_6.png" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=223 alt=image src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_2.png" width=244 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_2.png"&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_10.png" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_10.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=177 alt=image src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_4.png" width=240 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/InsideVSTSManualTestsExcelanyone_CAF8/image_thumb_4.png"&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;What about Excel 2007?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Unfortunately the Excel MHT rendering engine for 2007 has been modified.&amp;nbsp; I'm sure it is better in many ways, but unfortunately it strips off the required document properties.&amp;nbsp; You can still achieve the desired results, but it take a little more work.&amp;nbsp; And unfortunately once you do the conversion, you won't be able to use Excel to modify your Manual Test spreadsheet as doing so will strip out the required custom properties.&lt;/P&gt;
&lt;P&gt;If you still want to go ahead with it, perform the steps above with the exception of 2-7,&amp;nbsp; Once you've saved it as an MHT, you can open it using a text editor.&amp;nbsp; If you are using Visual Studio, you can right-click on the file, select "Open With..." and then choose the Source Code editor, the XML Editor or even the HTML editor.&amp;nbsp; Once it is open, scroll to the bottom of the file and locate the xml tag using the Microsoft Office schema.&amp;nbsp; You need to modify that block to include a "CustomDocumentProperties" tag with the required document properties.&amp;nbsp; The following XML snippet shows a sample with the TestType and TestID properties added.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" size=2&gt;&lt;FONT color=#c0c0c0&gt;&amp;lt;xml xmlns:o=3D"urn:schemas-microsoft-com:office:office"&amp;gt;&lt;BR&gt;&amp;lt;o:MainFile HRef=3D"../SampleExcelTest.htm"/&amp;gt;&lt;BR&gt;&amp;lt;o:File HRef=3D"stylesheet.css"/&amp;gt;&lt;BR&gt;&amp;lt;o:File HRef=3D"tabstrip.htm"/&amp;gt;&lt;BR&gt;&amp;lt;o:File HRef=3D"sheet001.htm"/&amp;gt;&lt;BR&gt;&amp;lt;o:File HRef=3D"sheet002.htm"/&amp;gt;&lt;BR&gt;&amp;lt;o:File HRef=3D"sheet003.htm"/&amp;gt;&lt;BR&gt;&amp;lt;o:File HRef=3D"filelist.xml"/&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;STRONG&gt;&amp;lt;o:CustomDocumentProperties&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;o:TestType dt:dt=3D"string"&amp;gt;Manual Test&amp;lt;/o:TestType&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;o:TestID dt:dt=3D"string"&amp;gt;18caa06a-0a91-4070-ab62-2123769277d4&amp;lt;/o:TestID&amp;gt;&lt;BR&gt;&amp;lt;/o:CustomDocumentProperties&amp;gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;FONT color=#c0c0c0&gt;&amp;lt;/xml&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;A slightly better alternative would be to &lt;STRONG&gt;Publish&lt;/STRONG&gt; the individual worksheet you need instead of the entire workbook.&amp;nbsp; When you do this, the resulting MHT file can be modified in Word 2007.&amp;nbsp; This includes adding the custom properties through the user interface, as described in the first section of this post, or manually as described in this section.&amp;nbsp; If you do in manually, there will not be an existing xml node as shown in the above sample.&amp;nbsp; Instead, you will need to add the &amp;lt;xml... tag, all of the boldfaced custom property information as shown above, and the closing xml tag, as shown below:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" size=2&gt;&amp;lt;xml xmlns:o=3D"urn:schemas-microsoft-com:office:office"&amp;gt;&lt;BR&gt;&amp;lt;o:CustomDocumentProperties&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;o:TestType dt:dt=3D"string"&amp;gt;Manual Test&amp;lt;/o:TestType&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;o:TestID dt:dt=3D"string"&amp;gt;18caa06a-0a91-4070-ab62-2123769277d4&amp;lt;/o:TestID&amp;gt;&lt;BR&gt;&amp;lt;/o:CustomDocumentProperties&amp;gt;&lt;BR&gt;&amp;lt;/xml&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Hey, My Spreadsheet opens in Word!&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you were using Excel 2007 and only published the single worksheet, this is&amp;nbsp; the best case.&amp;nbsp; But if you are still in Excel 2003 and want to continue using Excel as your editor, there is hope!&amp;nbsp; When you right-click on a file in Visual Studio to open it with an alternative editor, you have the ability to "Set as Default".&amp;nbsp; With a little luck, you will have the "2003 Microsoft Office Component" in your list of options.&amp;nbsp; This editor is capable of opening an MHT file with Excel if it was generated in Excel or with Word if it was generated in Word.&lt;/P&gt;
&lt;P&gt;This concludes this post for the moment.&amp;nbsp; However I do hope to publish a follow-up...&amp;nbsp; If you noticed my list of steps and thought "Gee - that could be scripted" you are right.&amp;nbsp; I am going to do some cleanup and post an approach for mass migration of existing Excel spreadsheets into Manual Tests.&amp;nbsp; I also plan to file an enhancement request with to Office to to see if we can get the custom properties back!&lt;/P&gt;
&lt;P&gt;Cheers!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5121641" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Itanium clustered data tiers and TFS</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/10/10/itanium-clustered-data-tiers-and-tfs.aspx</link><pubDate>Thu, 11 Oct 2007 02:41:40 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4520348</guid><dc:creator>dmckinstry</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=4520348</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/10/10/itanium-clustered-data-tiers-and-tfs.aspx#comments</comments><description>&lt;p&gt;I just ran into a client's TFS configuration that, at first glance, caused a little concern.&amp;nbsp; This client has a very beefy dual server TFS configuration including a clustered Itanium-based data tier.&amp;nbsp; The client had previously tried to install &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A9AB638C-04D2-4AEE-8AE8-9F00DD454AB8&amp;amp;displaylang=en"&gt;TFS SP1&lt;/a&gt; before and had painfully failed.&lt;/p&gt; &lt;p&gt;The original problem is that the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=c18c756e-8f80-4987-b3bf-600068a9e3c4&amp;amp;displaylang=en"&gt;Quiescence GDR&lt;/a&gt; that is required before installing TFS SP1 did not support clustering.&amp;nbsp; Microsoft fixed that and the current download is actually a version 2 that &lt;strong&gt;does &lt;/strong&gt;support clustering.&lt;/p&gt; &lt;p&gt;The second problem is that the existing installation documentation mentions Itanium exactly once: &lt;em&gt;Windows Server 2003 for Itanium-based systems, and Windows Server 2003, Web Edition are not supported.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;To summarize the story, Microsoft through product support and the product team, confirmed that there is a problem in the documentation and not the product.&amp;nbsp; That is, the TFS Data Tier does support Itanium processors!&lt;/p&gt; &lt;p&gt;We did successfully and relatively painlessly perform the SP1 update to this TFS.&amp;nbsp; There was one problem due to renamed service accounts which initially blocked the installation of TfsQuiesce on the application tier, but &lt;a href="http://davehope.co.uk/"&gt;Dave Hope&lt;/a&gt; readily provided a &lt;a href="http://davehope.co.uk/Blog/tfs-sp1-problems/"&gt;solution&lt;/a&gt; for that!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4520348" width="1" height="1"&gt;</description></item><item><title>Patches for Team System 2008 Beta 2</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/09/12/patches-for-team-system-2008-beta-2.aspx</link><pubDate>Wed, 12 Sep 2007 12:40:22 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:3835529</guid><dc:creator>dmckinstry</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=3835529</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/09/12/patches-for-team-system-2008-beta-2.aspx#comments</comments><description>&lt;p&gt;Awhile ago I &lt;a href="http://weblogs.asp.net/dmckinstry/archive/2007/07/29/tfs220059-while-upgrading-tfs-2005-to-tfs-2008-beta-2.aspx"&gt;posted&lt;/a&gt; about my attempts to upgrade TFS 2005 (Workgroup mode - not AD) to TFS 2008 Beta 2 and the ensuing "TFS220059" error messages during the installation.&amp;nbsp; I worked with Microsoft, they figured out the problem and had me test a fix.&lt;/p&gt; &lt;p&gt;About two weeks ago, the fixes which allowed me to upgrade were &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C4015D2F-2383-4270-9AAD-97129590F31D&amp;amp;displaylang=en"&gt;publicly released&lt;/a&gt; (as mentioned in &lt;a href="http://blogs.msdn.com/buckh/archive/2007/08/29/tfs-2008-beta-2-upgrade-fixes-are-now-available.aspx"&gt;Buck's blog&lt;/a&gt;).&amp;nbsp; Since then &lt;a href="http://blogs.msdn.com/bharry/archive/2007/09/10/practicing-servicing-for-tfs-2008.aspx"&gt;Brian Harry&lt;/a&gt; has posted a series of other patches for TFS/Team Explorer 2008 Beta 2.&lt;/p&gt; &lt;p&gt;Considering this is a beta product, Microsoft is being very responsive to supporting the product.&amp;nbsp; Even if you're just watching to figure out how long to wait after release to adopt TFS 2008, this series of events should make you feel better about how well the product is being supported.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3835529" width="1" height="1"&gt;</description></item><item><title>TFS Email on Checkin Policy Override</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/09/09/tfs-email-on-checkin-policy-override.aspx</link><pubDate>Sun, 09 Sep 2007 23:40:46 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:3810601</guid><dc:creator>dmckinstry</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=3810601</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/09/09/tfs-email-on-checkin-policy-override.aspx#comments</comments><description>&lt;p&gt;One of the complaints I've heard frequently as I travel and work with customers on implementing TFS and Visual Studio Team System is that they can't disable the policy override.&amp;nbsp; That is, when a user checks files into Team Foundation Version Control and they have not met the policies set in the team project for check-in, they are prompted to override the policy.&amp;nbsp; The dialog does require that they enter a comment before being allowed to override but will always allow the override if they enter the comment.&lt;/p&gt; &lt;p&gt;So the follow on question is, if I can't prevent an override, how do I at least report it?&amp;nbsp; In TFS 2005 the required data isn't pushed to the reporting warehouse so creating such a report isn't necessarily easy.&amp;nbsp; In TFS 2008, the policy override comment is pushed to the warehouse.&amp;nbsp; Even if you write such a report, it won't necessarily give you the data you expect.&amp;nbsp; For example, if a user checks in a file and overrides the policy and then later goes back and remedies the situation (e.g., associate a work item to the changeset after the check in), the report will still show the point in time that the override occurred - not the current status.&lt;/p&gt; &lt;p&gt;The easiest way to capture the override is to have TFS send an email when the override occurs.&amp;nbsp; This is still only a point-in-time notification and not necessarily the current state, but that is expected from an email.&amp;nbsp; There are four built-in alerts available using Team Explorer and a slightly more robust set of work item alerts if you use the &lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2105C9EE-565E-47B9-A5AC-9A8FF8A07862&amp;amp;displaylang=en"&gt;Visual Studio Team System Web Access Power Tool&lt;/a&gt;&lt;/strong&gt;.&amp;nbsp; Unfortunately the policy override is not one of them.&amp;nbsp; Instead you will have to create a custom subscription to the CheckinEvent using &lt;strong&gt;&lt;a href="http://olausson.net/blog/PermaLink,guid,d9948138-262e-4db0-94f1-4f0a033b0fb0.aspx"&gt;BISSUBSCRIBE&lt;/a&gt;&lt;/strong&gt; or the &lt;strong&gt;&lt;a href="http://www.codeplex.com/tfseventsubscription" target="_blank"&gt;Event Subscription Tool&lt;/a&gt;&lt;/strong&gt; available from &lt;strong&gt;&lt;a href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;I recommend using the Event Subscription Tool because it is more user friendly, provides&amp;nbsp;the ability to easily manage custom subscriptions,&amp;nbsp;and does not require login access to the server.&amp;nbsp; If you need to script it, BISSUBSCRIBE might be a better choice.&lt;/p&gt; &lt;p&gt;Now this information is not new or revolutionary.&amp;nbsp; The primary reason I'm blogging it is that ever time a client asks I have to look up the syntax for the custom query.&amp;nbsp; Although the Event Subscription Tool provides some help related to work item events, it does almost nothing for other events such as the CheckinEvent.&amp;nbsp; In the future when I'm asked, the answer will be "check my blog!"&lt;/p&gt; &lt;p&gt;Here is the&amp;nbsp;general syntax that you can use; swap our your team project or delete that portion of the query as&amp;nbsp;appropriate:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;&lt;strong&gt;"TeamProject" = 'MyTeamProject' AND "PolicyOverrideComment" &amp;lt;&amp;gt; ''&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;And for those of you who prefer a visual, here is the syntax as shown in the Event Subscription Tool:&lt;/p&gt; &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/EmailonPolicyOverride_9D33/PolicySubscribeScreen2.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/EmailonPolicyOverride_9D33/PolicySubscribeScreen_thumb.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Although I don't typically use them, here are some additional filters that you may be able to use for the checkin event:&lt;/p&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th&gt;Field&lt;/th&gt; &lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;AllChangesIncluded&lt;/td&gt; &lt;td&gt;true or false&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Subscriber&lt;/td&gt; &lt;td&gt;Domain qualified user account (“domain\user”)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Title&lt;/td&gt; &lt;td&gt;Example: Calc Changeset 124&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;ContentTitle&lt;/td&gt; &lt;td&gt;Example: Changeset 124&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Owner&lt;/td&gt; &lt;td&gt;Domain qualified user account&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Committer&lt;/td&gt; &lt;td&gt;Domain qualified user account&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Number&lt;/td&gt; &lt;td&gt;Changeset number (e.g., 124)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;CreationDate&lt;/td&gt; &lt;td&gt;Example: 5/31/2006 5:49:18 PM&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Comment&lt;/td&gt; &lt;td&gt;User comment from the checkin.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;TimeZone&lt;/td&gt; &lt;td&gt;Example: Central Daylight Time&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;TimeZoneOffset&lt;/td&gt; &lt;td&gt;Example: -05:00:00&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;TeamProject&lt;/td&gt; &lt;td&gt;Team project name, as shown in the example.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;PolicyOverrideComment&lt;/td&gt; &lt;td&gt;Checkin override comment, as shown in the example. Note that this will always be populated if there was an override and always be empty if there wasn’t an override.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp;There are a few other things that we can pull from the checkin event and possibly use for custom alerts, but those will need to be part of another post...&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3810601" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category></item><item><title>Considerations on using TFS 2008 with Visual Studio 2005</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/08/27/considerations-on-using-tfs-2008-with-visual-studio-2005.aspx</link><pubDate>Mon, 27 Aug 2007 20:55:43 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:3636606</guid><dc:creator>dmckinstry</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=3636606</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/08/27/considerations-on-using-tfs-2008-with-visual-studio-2005.aspx#comments</comments><description>&lt;p&gt;Visual Studio Team System 2008 is an incremental release and not a revolutionary new product.&amp;nbsp; It is a more profound upgrade than the upgrade from Visual Studio .NET to 2003 but is still not as big or intensive as the upgrade to 2005.&amp;nbsp; Although there are some nice new features, compatibility is very important and seems to be very well done.&amp;nbsp; For example, you're probably aware that Visual Studio 2008 can target .NET 2.0, 3.0 or 3.5.&amp;nbsp; However I'm I'm here to describe how to use Team Foundation Server 2008 with the Visual Studio 2005 components.&lt;/p&gt; &lt;p&gt;Out of the box, Team Explorer 2005 works very well with most of the TFS 2008 capabilities.&amp;nbsp; Work Item Tracking and Version Control function the same as they always had for TFS 2005.&amp;nbsp; End users wouldn't even notice the difference, except in some rare cases the increased performance.&lt;/p&gt; &lt;p&gt;I haven't spent much time testing the project portal in TFS 2008 but it seems to by fully compatible.&amp;nbsp; Although if you choose to use WSS 3.0 or MOSS 2007 as the base for your project portal instead of the WSS 2.0 (used by TFS 2005), users of the portal will probably notice a facelift and a few new features.&lt;/p&gt; &lt;p&gt;The reporting system seems mostly unchanged and compatible.&amp;nbsp; I've only done a little testing with custom reports taken from 2005 to 2008 but what I've done works perfectly.&amp;nbsp; I did notice the addition of a "Policy Override Comment" to the ChangeSet table in the data warehouse...&amp;nbsp; We'll finally have some sanctioned method of reporting policy overrides!&lt;/p&gt; &lt;p&gt;One of the key reasons that many users will choose to move from TFS 2005 to TFS 2008 is the new &lt;a href="http://weblogs.asp.net/dmckinstry/archive/2007/08/27/introduction-to-team-build-2008-for-team-build-2005-users.aspx"&gt;build capabilities&lt;/a&gt;.&amp;nbsp; If you plan to maintain a user base of Visual Studio/Team Explorer 2005 users for some amount of time even though you're upgrading to TFS 2008, you'll need to plan ahead:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You will need to have at least one installation of Team Explorer 2008 to create and manage build definitions and build agents.&amp;nbsp; Team Explorer 2008 will also be required to lock down builds and keep them from getting deleted by your retention policies.  &lt;li&gt;You must structure your build folders in TFS 2008 as you would have in 2005.&amp;nbsp; That is, you need to have a TeamBuildTypes folder under the root of your team project and that folder must contain a subfolder for each build definition.&amp;nbsp; The build directories in version control must match the build definition name.&amp;nbsp; For example, if you create a build definition named "DevCI", you would need a folder structure similar to "$/MyTeamProject/TeamBuildTypes/DevCI".  &lt;li&gt;Your build directory must contain the standard Team Build 2005 files: TFSBuild.proj, TFSBuild.rsp and WorkspaceMappings.xml.&amp;nbsp; Note that these do not have to be the actual files you use for the build; they can be almost completely empty or the TFSBuild files can be the actual ones you use in your build process.&amp;nbsp; I think you might need to have at least a mock version of TFSBuild.proj but it certainly doesn't have to be the one that is used.&amp;nbsp; Remember that the workspace mapping is now handed by the 2008 Build Definition so the workspace mapping file itself is only needed to trick Team Explorer 2005. &lt;li&gt;Install the appropriate Visual Studio 2005 components on your build server.&amp;nbsp; Since Visual Studio 2008 can target .NET 2.0, this might seem counterintuitive.&amp;nbsp; Unfortunately, to use the Visual Studio 2008 components you have to upgrade the solution and project files to be 2008 compliant.&amp;nbsp; This obviously won't work if members of your development team are still using Visual Studio 2005.&amp;nbsp; Remember to install which every build components you will use from the Visual Studio 2005 products (e.g., Unit Testing, Code Coverage, Static Analysis, Web Testing, ...).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;With these considerations, you should be able to make use of Team Explorer 2005&amp;nbsp;and TFS 2008.&amp;nbsp; You'll get all the benefits of the new build engine including continuous integration and retention policies but your end users may not otherwise notice the difference.&amp;nbsp; Users on Team Explorer 2005 will still get the build history and build initiation screens exactly as they had before.&amp;nbsp; Of course, Team Explorer 2008 users will be able to access the same data but will have a few more capabilities.&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3636606" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Introduction to Team Build 2008 for Team Build 2005 Users</title><link>http://weblogs.asp.net/dmckinstry/archive/2007/08/27/introduction-to-team-build-2008-for-team-build-2005-users.aspx</link><pubDate>Mon, 27 Aug 2007 18:31:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:3635561</guid><dc:creator>dmckinstry</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dmckinstry/rsscomments.aspx?PostID=3635561</wfw:commentRss><comments>http://weblogs.asp.net/dmckinstry/archive/2007/08/27/introduction-to-team-build-2008-for-team-build-2005-users.aspx#comments</comments><description>&lt;P&gt;If you haven't already gotten a chance to play with TFS 2008 (Beta 2), I recommend it.&amp;nbsp; My experience is that it is solid and seems to work better than the RCs worked for the 2005 release.&amp;nbsp; My primary interest is in the Team Build enhancements, although there are a few other interesting TFS 2008 features such as Destroy and the integration of key TFS Power Tool elements.&lt;/P&gt;
&lt;P&gt;From a Team Build perspective, the basic build concepts with 2008 are similar to 2005.&amp;nbsp; It is still an integrated lifecycle build process layered on top of MSBuild.&amp;nbsp; It does have some significant architectural changes and features that make it a far more compelling tool.&lt;/P&gt;
&lt;P&gt;From an architectural standpoint, infrastructure supporting build has evolved.&amp;nbsp; The team build service is still installed on your build server(s) and listens on a TCP port using .NET remoting.&amp;nbsp; The service does very much the same thing that it did in 2005; that is, listen for build requests from the associated TFS and then work with the TFS to perform the build process.&amp;nbsp; It still uses a TFSBuild.proj file with MSBuild to drive the build process and a TFSBuild.rsp file to provide the command-line MSBuild overrides.&lt;/P&gt;
&lt;P&gt;The contents of the TFSBuild file are somewhat changed although they seem to be compatible with the existing project but some of the properties seem obsolete. and other items and properties have&amp;nbsp;been enhanced. &amp;nbsp;Here are some differences I've noted:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;BuildMachine&lt;/STRONG&gt; is not used anymore.&amp;nbsp; If you create a new build in Team Build 2008, this property is set to "UNKNOWN". 
&lt;LI&gt;&lt;STRONG&gt;BuildDirectory&lt;/STRONG&gt; is also not used and defaults to UNKNOWN. 
&lt;LI&gt;&lt;STRONG&gt;DropLocation&lt;/STRONG&gt; is also not used. 
&lt;LI&gt;&lt;STRONG&gt;SolutionToBuild&lt;/STRONG&gt; now has additional item metadata to allow specification of explicit &lt;STRONG&gt;Targets&lt;/STRONG&gt; and &lt;STRONG&gt;Properties&lt;/STRONG&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;There is a moderate selection of other new properties exposing additional capabilities as well as the usual suspects.&amp;nbsp; Amongst the new configuration properties that I like are &lt;STRONG&gt;IncrementalGet&lt;/STRONG&gt; and &lt;STRONG&gt;IncrementalBuild&lt;/STRONG&gt;.&amp;nbsp; Setting these two properties to true may significantly increase the speed of your team builds by maintaining a workspace and only getting deltas of changes files between builds, and by only compiling projects which have changes.&amp;nbsp; This is certainly useful for Continuous Integration or similar build models that have a high build frequency.&amp;nbsp; You may well still omit these properties or leave them false if you are concerned about workspace integrity or tampering on the build machine.&lt;/P&gt;
&lt;P&gt;If you've been paying attention, you'll notice that previously critical properties such as BuildMachine are now gone and that I have omitted mention of the WorkspaceMapping.XML file!!!&amp;nbsp; The reason for this is that Team Build has been restructured such that this data is stored elsewhere.&amp;nbsp; We used to have "Build Types" which were indicated by folder name under the TeamBuildTypes folder at the root of version control in each team project.&amp;nbsp; Team Build 2008 uses "Build Definitions" which contain this meta data and point to the TFSBuild.proj file.&amp;nbsp; This has a side effect of allowing you to carry your TFSBuild.proj file with your solution(s) which allows them to easily follow your branching strategy.&lt;/P&gt;
&lt;P&gt;The primary elements in a build definition include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The name and description of the build definition.&amp;nbsp; These are located on the &lt;STRONG&gt;General&lt;/STRONG&gt; tab of the build definition dialog. 
&lt;LI&gt;The &lt;STRONG&gt;Workspace&lt;/STRONG&gt; mapping for the build.&amp;nbsp; Since this is separate from the TFSBuild.proj file, it is possible to have multiple build agents&amp;nbsp; with different workspace mappings using the same TFSBuild.proj.&amp;nbsp; Or in other words, I can have two related branches with branched versions of the same build file (e.g., $/.../Test/TFSBuild.proj and $/.../Dev/TFSBuild.proj) which effectively specify the same build process but are managed by two different build definitions with their own workspace mappings. It is nice to have a UI to manage workspaces instead of just an XML file:&lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image07.png" target=_new atomicselection="true" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image07.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=178 alt="WorkspaceMapping User Interface" src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb5.png" width=240 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb5.png"&gt;&lt;/A&gt; 
&lt;LI&gt;Of course, you still need a reference to the &lt;STRONG&gt;Project File&lt;/STRONG&gt;, which points to your TFSBuild.proj file in version control.&amp;nbsp; If you don't already have one, you can create one using a wizard similar to the build type wizard for Team Build 2005. 
&lt;LI&gt;These is a new &lt;STRONG&gt;Retention Policy &lt;/STRONG&gt;capability in Team Build 2008 allowing you to specify how many recent builds to keep before they are automatically deleted.&amp;nbsp; For Team Build 2005 you had to manually clean up old builds using "TFSBuild DELETE", custom code or other hacks.&amp;nbsp; Now you can simply specify how many recent copies of the build to keep based on the build outcome (i.e., Failed, Stopped, Partially Succeeded, or Succeeded).&amp;nbsp; Regardless of the retention policy you can lock builds manually if they are of interest to protect them from being deleted. &lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image010.png" target=_new atomicselection="true" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image010.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=178 alt="Retention Policy" src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb6.png" width=240 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb6.png"&gt;&lt;/A&gt; 
&lt;LI&gt;The &lt;STRONG&gt;Build Defaults&lt;/STRONG&gt; are specify the default Build Agent and Drop Location.&amp;nbsp; The &lt;STRONG&gt;Build Agent&lt;/STRONG&gt; is another new construct which is used to define the build server, the communications settings, and the working directory for the build.&amp;nbsp; The first time you create a build definition in a team project you'll need to create a new build agent definition; after that you can reuse it for any other build definition in the team project:&lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image013.png" target=_new atomicselection="true" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image013.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=220 alt="Build Agent dialog" src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb7.png" width=240 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb7.png"&gt;&lt;/A&gt; 
&lt;LI&gt;The last portion of the build definition wizard specifies the &lt;STRONG&gt;Trigger&lt;/STRONG&gt; settings.&amp;nbsp; This allows you to define if and when builds should automatically start.&amp;nbsp; By default, builds will be manually started just as they are in the out-of-the-box Team Build 2005.&amp;nbsp; However, by just setting a radio button and perhaps a few other setting you can schedule builds or do automated build based on check-in.&amp;nbsp; In fact, you can easily specify batched builds where a series of checkins can be batched into a build or one-to-one checkin to build.&amp;nbsp; The ability to actually do one-to-one builds against checkins is facilitated by build &lt;STRONG&gt;queuing&lt;/STRONG&gt;.&amp;nbsp; Team build still only supports one build per team project per agent at a time, but it now supports the ability to request a build and if it can't be done because the agent is busy, it will be queued up and the build will take place when the agent becomes available.&amp;nbsp; This little feature was rare in some of the available Team Build extensions which provided Continuous Integration for TFS 2005.&amp;nbsp; With it in place, Team Build can now determine exactly who to assign a bug to when build breaks!&lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image018.png" target=_new atomicselection="true" mce_href="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image018.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=178 alt="Build Automation and Continuous Integeration" src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb10.png" width=240 border=0 mce_src="http://weblogs.asp.net/blogs/dmckinstry/WindowsLiveWriter/IntroductiontoTeamBuild2008forTeamBuild2_B96B/image0_thumb10.png"&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Another improvement over Team Build 2005 is that you can now maintain portions of the build process using a user interface instead of purely through XML files.&amp;nbsp; The TFSBuild.proj file is still maintained using an XML file editor, but the build definition and build agents can both be maintained using a user interface!&lt;/P&gt;
&lt;P&gt;There are certainly other changes in Team Build 2008, but this should summarize all of the significant change.&amp;nbsp; I rarely recommend prerelease software for any of my clients.&amp;nbsp; However due to the vast enhancements in Continuous Integration support (i.e., triggers, queuing and retention policies), both my company and one of my customers are using TFS 2008 Beta 2 and it's go-live license.&amp;nbsp; Note that for my client, the users are still using Visual Studio 2005 and Team Explorer 2005...&amp;nbsp; but the Team System back end is all 2008!&lt;/P&gt;
&lt;P&gt;Give it a look... And enjoy!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3635561" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/dmckinstry/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item></channel></rss>