<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Loren Halvorson's Blog</title><subtitle type="html">If your only tool is a hammer...</subtitle><id>http://weblogs.asp.net/lorenh/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/lorenh/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-05-15T09:44:22Z</updated><entry><title>Free T-SQL Formatter Updated</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2011/07/19/free-t-sql-formatter-updated.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2011/07/19/free-t-sql-formatter-updated.aspx</id><published>2011-07-19T14:13:31Z</published><updated>2011-07-19T14:13:31Z</updated><content type="html">&lt;p&gt;Tao Klerks has just released a new version (0.9.12) of the &lt;a href="http://architectshack.com/PoorMansTSqlFormatter.ashx"&gt;Poor Man’s T-SQL Formatter&lt;/a&gt; (I blogged about it &lt;a href="http://weblogs.asp.net/lorenh/archive/2011/07/11/free-t-sql-formatter.aspx"&gt;last week&lt;/a&gt;) with several improvements and some more formatting options. He also set up a website so you can use it online &lt;a href="http://poorsql.com"&gt;http://poorsql.com&lt;/a&gt;.&amp;#160; Thanks Tao, it keeps getting better!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7875861" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author></entry><entry><title>Free T-SQL Formatter</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2011/07/11/free-t-sql-formatter.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2011/07/11/free-t-sql-formatter.aspx</id><published>2011-07-11T15:34:39Z</published><updated>2011-07-11T15:34:39Z</updated><content type="html">&lt;p&gt;If you are working on a project that has a lot of SQL code and wish you could reformat it to make it more readable, I just stumbled on a slick utility that is being developed in C# by Tao Klerks named Poor Man’s T-SQL Formatter.&amp;#160; It can be found here:&amp;#160; &lt;a href="http://www.architectshack.com/PoorMansTSqlFormatter.ashx"&gt;http://www.architectshack.com/PoorMansTSqlFormatter.ashx&lt;/a&gt;&amp;#160; It’s not finished yet, but has enough functionality to be truly useful.&amp;#160; Tao tells me he is working on refactoring the code to make it more maintainable and adding more formatting options.&lt;/p&gt;  &lt;p&gt;It has plug-ins for SQL Server Management Studio, and WinMerge, and a command line version that will allow you to integrate it into other tools like Beyond Compare thanks to a new -output command line option Tao recently added just for this purpose.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here’s how I set it up for Beyond Compare 3:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;In Beyond Compare 3, select the &lt;strong&gt;Tools | File Formats&lt;/strong&gt; menu&lt;/p&gt;    &lt;p&gt;Create a new Text Format named &lt;strong&gt;SQL Tidied&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Mask:&lt;/strong&gt; *.sql&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Conversion:&lt;/strong&gt; External program (Unicode filenames)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Loading:&lt;/strong&gt; {path to PoorMansTSLFormatter}\SqlFormatter.exe -o &amp;quot;%t&amp;quot; &amp;quot;%s&amp;quot;&lt;/p&gt;    &lt;p&gt;You probably want to move it in the list of formats to be just below the built-in &lt;strong&gt;SQL&lt;/strong&gt; format so that it doesn’t get chosen automatically every time you compare SQL files.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now you can compare two different SQL files after normalizing them to common “tidy” format which lets you see the true differences, and ignore unimportant ones like whitespace, wrapping etc.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7865466" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author></entry><entry><title>Upgrading RDLC reports to Report Viewer 2010 in an ASP.NET web application</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2010/10/20/upgrading-rdlc-reports-to-report-viewer-2010-in-an-asp-net-web-application.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2010/10/20/upgrading-rdlc-reports-to-report-viewer-2010-in-an-asp-net-web-application.aspx</id><published>2010-10-20T22:36:13Z</published><updated>2010-10-20T22:36:13Z</updated><content type="html">&lt;p&gt;One of the web applications I am working on is an ASP.NET MVC 2 site targeting .NET 3.5 SP1 that uses the Microsoft Report Viewer control with local-mode RDLC reports. I initially developed this application using Visual Studio 2008. The client was OK if I started to use Visual Studio 2010, as long as I didn’t require .NET 4.0 just yet. The &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/08/27/multi-targeting-support-vs-2010-and-net-4-series.aspx"&gt;multi-targeting&lt;/a&gt; features of VS2010 were working great. I had started really enjoying VS 2010 and had no intention to go back to 2008. Then I needed to do some report work so I double clicked one of my RDLC files and was surprised to see this message box:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Microsoft Visual Studio      &lt;br /&gt;---------------------------       &lt;br /&gt;Microsoft Report Designer&lt;/p&gt;    &lt;p&gt;Do you want to convert this report to RDLC 2008 format?&amp;#160; Please click OK to proceed or Cancel to open it in the XML editor.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;My heart sunk and my blood ran cold. What have I done? I was afraid I would need to go back to VS 2008 just to keep the reports compatible with .NET 3.5! Fortunately, converting to the new Report Viewer control turned out to be OK (so far), but there were some surprises along the way.&lt;/p&gt;  &lt;h3&gt;It’s all good (mostly)&lt;/h3&gt;  &lt;p&gt;There are lots of nice new &lt;a href="http://blogs.msdn.com/b/brianhartman/archive/2009/06/18/where-s-the-new-report-viewer.aspx"&gt;ajax, visual, and internal&lt;/a&gt; things about the new control but two of the highlights for me were:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Compatible with &lt;strong&gt;.NET 3.5 SP1&lt;/strong&gt; and .NET 4.0 &lt;/li&gt;    &lt;li&gt;Looks better in more browsers      &lt;ul&gt;       &lt;li&gt;Rendering is simplified and more standards compliant. I was able to put the strict DOCTYPE back in the page and (eventually) get resizing to work. More on resizing later. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Upgrading&lt;/h3&gt;  &lt;p&gt;The upgrading process was pretty straightforward.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Install the &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=a941c6b2-64dd-4d03-9ca7-4017a0d164fd" href="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=a941c6b2-64dd-4d03-9ca7-4017a0d164fd"&gt;Report Viewer 2010 Redistributable&lt;/a&gt; (This will need to be installed on any server to which you deploy). &lt;/li&gt;    &lt;li&gt;Convert RDLC files to new RDL 2008 schema. Simply opening the RDLC in Visual Studio 2010 converts to the new schema and automatically makes a backup. &lt;/li&gt;    &lt;li&gt;Change assembly reference to the new 10.0.0.0 version of &lt;strong&gt;Microsoft.ReportViewer.WebForms.dll&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Change version number in assembly names in web.config      &lt;ul&gt;       &lt;li&gt;You’ll see things in web.config that look similar to the following, make sure the version is 10.0.0.0          &lt;br /&gt;&lt;font face="Courier New"&gt;Microsoft.ReportViewer.WebForms, Version=&lt;strong&gt;10.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A &lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Change version number in any *.aspx pages that include the report viewer control registration      &lt;ul&gt;       &lt;li&gt;&lt;font face="Courier New"&gt;&amp;lt;%@ Register Assembly=&amp;quot;Microsoft.ReportViewer.WebForms, Version=&lt;strong&gt;10.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Namespace=&amp;quot;Microsoft.Reporting.WebForms&amp;quot; TagPrefix=&amp;quot;rsweb&amp;quot; %&amp;gt; &lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Include a ScriptManager on any *.aspx page that has a ReportViewer, or if you have a common master page that your reports share like I did, you can put it there, once for all.      &lt;ul&gt;       &lt;li&gt;&lt;font face="Courier New"&gt;&amp;lt;asp:ScriptManager ID=&amp;quot;ScriptManager1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;            &lt;br /&gt;&amp;lt;/asp:ScriptManager&amp;gt;             &lt;br /&gt;&lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Some surprises that required rework&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;The data sets must be flat. In some of my reports I took advantage of the fact that in the previous Report Viewer you could refer to properties of child objects. You &lt;em&gt;used&lt;/em&gt; to be able to do this:       &lt;br /&gt;      &lt;br /&gt;=Fields!ChildObject.Value.&lt;strong&gt;ChildProperty&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;Now the data set need to be flat.&amp;#160; This means that I needed to flatten out my domain objects by pulling properties from the child objects up to the parent object. This could have been a big problem, but luckily the way I had structured my code allowed me to fairly easily define a flat report object and bind to that instead.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Getting the report to fill the browser with 100% height and resize dynamically was trickier than I hoped.&amp;#160; And this is the main reason I wanted to write this post. &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Making the report viewer resize&lt;/h3&gt;  &lt;p&gt;I used the incredibly powerful &lt;a href="http://layout.jquery-dev.net/"&gt;jQuery.UI.Layout&lt;/a&gt; already in this site, so I just continued to use it on the report pages. The trick to getting the report control to resize properly in my case was to find the report viewer control and call recalculateLayout() whenever the browser was resized. This happens on line 22 in the code below:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Assembly=&amp;quot;Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    Namespace=&amp;quot;Microsoft.Reporting.WebForms&amp;quot; TagPrefix=&amp;quot;rsweb&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample Report&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;../../Scripts/jquery-1.4.2.min.js&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;../../Scripts/jquery.layout.js&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        $(document).ready(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            $(&lt;span class="str"&gt;'body'&lt;/span&gt;).layout({&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                north__paneSelector: &lt;span class="str"&gt;&amp;quot;#HeadingPane&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                center__paneSelector: &lt;span class="str"&gt;&amp;quot;#ContentPane&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                resizable: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                closable: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                north__size: 20,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                spacing_open: 0,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                spacing_closed: 0,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                center__onresize: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;var&lt;/span&gt; reportViewer = $find(&lt;span class="str"&gt;&amp;quot;ReportViewer&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                    reportViewer.recalculateLayout();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            });&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        });&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;HeadingPane&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        Page header content like site navigation goes here&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContentPane&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ObjectDataSource&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SampleDataSource&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;SelectMethod&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;GetSampleData&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="attr"&gt;TypeName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MyApp.Reports.ReportDataSource&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ObjectDataSource&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;    &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;rsweb:ReportViewer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ReportViewer&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Font-Names&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Verdana&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="attr"&gt;Font-Size&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;8pt&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;100%&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;100%&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ShowBackButton&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LocalReport&lt;/span&gt; &lt;span class="attr"&gt;ReportPath&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SampleReport.rdlc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataSources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;rsweb:ReportDataSource&lt;/span&gt; &lt;span class="attr"&gt;DataSourceId&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SampleDataSource&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SampleData&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataSources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LocalReport&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;rsweb:ReportViewer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7629338" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/lorenh/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/lorenh/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/lorenh/archive/tags/.NET/default.aspx" /><category term="AJAX" scheme="http://weblogs.asp.net/lorenh/archive/tags/AJAX/default.aspx" /><category term="Reports" scheme="http://weblogs.asp.net/lorenh/archive/tags/Reports/default.aspx" /></entry><entry><title>TestDriven.NET 3.0 Released</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2010/06/29/testdriven-net-3-0-released.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2010/06/29/testdriven-net-3-0-released.aspx</id><published>2010-06-29T15:16:46Z</published><updated>2010-06-29T15:16:46Z</updated><content type="html">&lt;p&gt;I haven’t posted anything to my blog in a long time, but I wanted to point out that a product I truly love and use often has been updated. Jamie Cansdale has released &lt;a href="http://www.testdriven.net/download.aspx"&gt;TestDriven.NET 3.0&lt;/a&gt;, still one of my all-time favorite Visual Studio add-ons for low-friction unit testing.&amp;#160; Now it works with Visual Studio 2010, MSTest and &lt;a href="http://testdriven.net/downloads/releasenotes.html"&gt;tons of new features and refinements&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here’s Jamie’s announcement &lt;a title="http://weblogs.asp.net/nunitaddin/archive/2010/06/09/testdriven-net-3-0-all-systems-go.aspx" href="http://weblogs.asp.net/nunitaddin/archive/2010/06/09/testdriven-net-3-0-all-systems-go.aspx"&gt;http://weblogs.asp.net/nunitaddin/archive/2010/06/09/testdriven-net-3-0-all-systems-go.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7548155" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="Visual Studio" scheme="http://weblogs.asp.net/lorenh/archive/tags/Visual+Studio/default.aspx" /><category term="Productivity" scheme="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx" /></entry><entry><title>MSBuild trick for making &lt;Exec&gt; calls more maintainable</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/12/11/msbuild-trick-for-making-lt-exec-gt-calls-more-maintainable.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/12/11/msbuild-trick-for-making-lt-exec-gt-calls-more-maintainable.aspx</id><published>2008-12-11T19:52:37Z</published><updated>2008-12-11T19:52:37Z</updated><content type="html">&lt;p&gt;&lt;/p&gt;  &lt;p&gt;One of my pet peeves with MSBuild&amp;#8217;s &amp;lt;Exec&amp;gt; task is how long the lines get when you have lots of arguments.&lt;/p&gt;  &lt;p&gt;I ran across a trick yesterday in a &lt;a href="http://morten.lyhr.dk/2008/06/how-to-make-self-extracting-exe-for.html#c1745026790875913074"&gt;blog comment&lt;/a&gt; made by someone named Romain and thought it was a very nice solution to this problem. When you expand items using this form @(items, &amp;#8216;DELIMITER&amp;#8217;), it allows you to specify a delimiter to use between the items. In the case of a command line, you use a space. Thanks Romain.&lt;/p&gt;  &lt;p&gt;&amp;lt;ItemGroup&amp;gt;   &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/nologo&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/v&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/x:&amp;amp;quot;$(InstallDir)\Environments\$(ApplicationName).EnvironmentSettings.xml&amp;amp;quot;&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/i:&amp;amp;quot;$(InstallDir)\UI.Shell.exe.config%3B$(InstallDir)\ClientLogging.config&amp;amp;quot;&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/e:&amp;amp;quot;$(Environment)&amp;amp;quot;&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;lt;/ItemGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;lt;Exec Command=&amp;quot;&amp;amp;quot;$(InstallDir)\Environments\XmlPreprocess.exe&amp;amp;quot; @(XmlPreprocessArgs,' ')&amp;quot;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WorkingDirectory=&amp;quot;$(InstallDir)\Environments&amp;quot; /&amp;gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6778575" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/lorenh/archive/tags/.NET/default.aspx" /><category term="MSBuild" scheme="http://weblogs.asp.net/lorenh/archive/tags/MSBuild/default.aspx" /></entry><entry><title>Comparing XML Files with Beyond Compare 3...Brilliant</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/11/19/comparing-xml-files-with-beyond-compare-3-brilliant.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/11/19/comparing-xml-files-with-beyond-compare-3-brilliant.aspx</id><published>2008-11-19T20:37:00Z</published><updated>2008-11-19T20:37:00Z</updated><content type="html">&lt;P&gt;I bought a new laptop and was loading it with the tools I use every day. When it came to installing one of my favorites, Beyond Compare 2, I thought I'd check &lt;A href="http://www.scootersoftware.com/" mce_href="http://www.scootersoftware.com/"&gt;the Scooter web site&lt;/A&gt; to see if I had the latest version. I was happy to see they now had a version 3 with &lt;A href="http://www.scootersoftware.com/moreinfo.php?zz=newfeatures" mce_href="http://www.scootersoftware.com/moreinfo.php?zz=newfeatures"&gt;plenty of new features&lt;/A&gt;. I immediately reached for my credit card to buy a license. Folks, this is honestly one of the tools I don't even hesitate paying for...it's that good, and that invaluable. I don't work for them, I'm just a very happy customer.&lt;/P&gt;
&lt;P&gt;The base tool itself is great, but I was &lt;STRONG&gt;&lt;EM&gt;really&lt;/EM&gt;&lt;/STRONG&gt; thrilled when I followed the link on the Download page to &lt;A href="http://www.scootersoftware.com/download.php?zz=kb_moreformats" mce_href="http://www.scootersoftware.com/download.php?zz=kb_moreformats"&gt;Additional file format downloads for version 3&lt;/A&gt;.&amp;nbsp; There I found something I've been looking for years...and in fact a while ago had written a plug-in for BC2 to do...the ability to compare Tidied XML.&lt;/P&gt;
&lt;P&gt;How many times have you tried to compare two dense XML files to find out their differences only to be faced with a block of differences that looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.thedivers.com/loren/beyondcompare-ugly.gif" mce_src="http://www.thedivers.com/loren/beyondcompare-ugly.gif"&gt; &lt;/P&gt;
&lt;P&gt;Beyond Compare notices that there are differences in there somewhere, but can't really show you where with any precision. Further inspection is going to be needed, and forget merging selected changes over from one side to the other.&lt;/P&gt;
&lt;P&gt;If you install the &lt;STRONG&gt;XML Tidied&lt;/STRONG&gt; and &lt;STRONG&gt;XML tidied with attributes sorted&lt;/STRONG&gt; file formats, you can now tell Beyond Compare to tidy up your documents, putting each attribute on its own line, so the differences stand out. You can now see exactly which attributes differ. Absolutely brilliant.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.thedivers.com/loren/beyondcompare-pretty.gif" mce_src="http://www.thedivers.com/loren/beyondcompare-pretty.gif"&gt; &lt;/P&gt;
&lt;P&gt;This is a fantastic feature that's already saved me a bunch of time. I see there is a similar add-in for &lt;STRONG&gt;HTML tidied&lt;/STRONG&gt; files that also will come in handy.&lt;/P&gt;
&lt;P&gt;A couple of other features in Beyond Compare that I've come to rely on over the years:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Beyond Compare has great "low-friction" integration with Windows Explorer. For example to compare two files, you just right click on one file and choose "Select Left Side For Compare", then right click on the other file and say "Compare to {file...}".&amp;nbsp; This works for folders too.&lt;/LI&gt;
&lt;LI&gt;Beyond Compare has great FTP integration. I use it to deploy changed files to FTP sites very painlessly.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I also see it supports doing &lt;A href="http://www.scootersoftware.com/moreinfo.php?zz=moreinfo_merge" mce_href="http://www.scootersoftware.com/moreinfo.php?zz=moreinfo_merge"&gt;3-way merging&lt;/A&gt; from most version control systems. I haven't tried this yet, but I'm going to see how hard it is to plug into TFS.&amp;nbsp; If anyone has pointers on how to set this up, let me know.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;Update: &lt;/EM&gt;&lt;A class="" href="http://www.scootersoftware.com/support.php?c=kb_vcs.php" mce_href="http://www.scootersoftware.com/support.php?c=kb_vcs.php"&gt;&lt;EM&gt;Scooter's website shows how to set it up here&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;They have a 30 day trial, so if you aren't so sure, you can give it a try for a while. Highly recommended.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6746783" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx" /><category term="Productivity" scheme="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx" /></entry><entry><title>New Release of XmlPreprocess</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/11/05/new-release-of-xmlpreprocess.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/11/05/new-release-of-xmlpreprocess.aspx</id><published>2008-11-05T18:55:09Z</published><updated>2008-11-05T18:55:09Z</updated><content type="html">&lt;p&gt;I finally got around to updating the XmlPreprocess tool with some changes I'm really excited about. For those of you not familiar with XmlPreprocess, it's a command line tool I wrote many years ago that can modify specially annotated XML files much like a code preprocessor. It is useful for deploying XML configuration files to many environments. I've blogged about it in the &lt;a href="http://weblogs.asp.net/lorenh/archive/2004/12/14/307144.aspx"&gt;past&lt;/a&gt; as have &lt;a href="http://www.hanselman.com/blog/XmlPreprocessIsAnElegantHackOrTheHackIsInTheEyeOfTheBeholder.aspx"&gt;others&lt;/a&gt;, and it's achieved a fair amount of use (albeit hidden below the surface) in my good friend Scott Colestock's &lt;a href="http://www.codeplex.com/biztalkdeployment"&gt;Biztalk deployment framework&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The first thing I did was &lt;a href="http://www.codeplex.com/xmlpreprocess"&gt;move it to a CodePlex project&lt;/a&gt; which replaces the prior &lt;a href="http://xmlpreprocess.sourceforge.net/"&gt;SourceForge&lt;/a&gt; project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=xmlpreprocess&amp;amp;DownloadId=48433" target="_blank"&gt;&lt;img src="http://www.thedivers.com/loren/XmlPreprocessConceptualSmaller.gif" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Changes in this release&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;New &lt;a href="http://www.codeplex.com/xmlpreprocess"&gt;Codeplex&lt;/a&gt; home with updated documentation and samples. &lt;/li&gt;    &lt;li&gt;Requires .NET 2.0 or newer runtime. &lt;/li&gt;    &lt;li&gt;Adds the ability to import spreadsheets directly thanks to Tom Abraham's excellent work on the &lt;a href="http://www.codeplex.com/EnvSettingsManager"&gt;Environment Settings Manager&lt;/a&gt; project. This is a really nice feature, and I thank Tom for giving me permission to use his spreadsheet reading code. &lt;/li&gt;    &lt;li&gt;Adds a command line switch (/f or /fixfalse) to fix the behavior of &amp;quot;False&amp;quot; values. This has been a long-standing request and tripped up many people for example &lt;a href="http://bencops.blogspot.com/2007/03/xmlpreprocess-false-values-are.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.thehiddenlines.com/projects/xmlpreprocess-reloaded/"&gt;here&lt;/a&gt;.&amp;#160; For the anguish and consternation this has caused to you all, I sincerely apologize, and hope you forgive me. If you want to explicitly undefine a property, use the value &amp;quot;#undef&amp;quot; instead.&amp;#160; (Note: that for backward compatibility, this behavior is off by default, and you will need to add the /f or /fixfalse switch to enable it). &lt;/li&gt;    &lt;li&gt;Adds a new command line switch (/v) to validate tokens, so if any replacement tokens are missing, it will report an error message identifying the missing tokens, return a nonzero error code and not write out the file. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I left the current release as Beta 1 in case anyone finds any issues right away, but we've been using the new version on a project without any issues yet.&amp;#160; It &lt;em&gt;should&lt;/em&gt; be a drop-in backward compatible replacement for the old version (except for the new dependency on .NET 2.0 instead of 1.1).&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6721947" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author></entry><entry><title>Introducing Birch Cove Software</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/09/23/introducing-birch-cove-software.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/09/23/introducing-birch-cove-software.aspx</id><published>2008-09-23T20:19:59Z</published><updated>2008-09-23T20:19:59Z</updated><content type="html">&lt;p&gt;A few days into a 3 week vacation with my family I received a call that I wasn't surprised to receive. The company where I had worked for 6 years was downsizing and my position, along with many others in our department, was eliminated. Since downsizing (or worse) was happening across the entire sector, I didn't take it personally. In fact, I took it as a sign that I should try something different. A friend recently said that &amp;quot;getting laid off is one of the best thing that ever happened to him&amp;quot;, and I hope to look back and say the same some day.&lt;/p&gt;  &lt;p&gt;So I am officially hanging out my shingle and becoming an independent contractor. I've worked as a full time employee for the entirety of my 18 years in the industry, so working for myself is going to be something completely new. So here begins a new chapter in my life: &lt;a href="http://www.birchcovesoftware.com"&gt;Birch Cove Software, LLC&lt;/a&gt;. Wish me luck, and let me know if you have any tips or resources for getting a consulting business off the ground.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6639457" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx" /></entry><entry><title>Red Gate will take over development of Lutz Roeder's .NET Reflector</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/08/20/red-gate-will-take-over-development-of-lutz-roeder-s-net-reflector.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/08/20/red-gate-will-take-over-development-of-lutz-roeder-s-net-reflector.aspx</id><published>2008-08-20T13:46:49Z</published><updated>2008-08-20T13:46:49Z</updated><content type="html">&lt;p&gt;I just received a newsletter from Red Gate, and nestled in the headlines was this interesting tidbit. If you haven't heard of .NET Reflector, it's one of my favorites, and I encourage you to check this invaluable tool out. It's what you reach for when you have to know what's going on inside that assembly but don't have the source.&lt;/p&gt;  &lt;p&gt;Here's the announcement on Red Gate's site: &lt;a title="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/" href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/"&gt;http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;James Moore who is the general manager of .NET Developer Tools at Red Gate states:&lt;/p&gt;  &lt;p&gt;&amp;#8220;I think we can provide a level of resources that will move the tool forward in a big way.&amp;#160; The first thing we are doing is continuing to offer the software to the community for free downloading.&amp;#160; The second thing is giving our product management and usability teams the task of going out into the community to get suggestions on how we can make this amazing tool even better.&amp;quot;&lt;/p&gt;  &lt;p&gt;I'm hopeful that Red Gate won't mess anything up. I've been using their ANTS profiler for years, and more recently discovered their wonderful SQL tools, and they are all excellent. For now they've promised to continue to give it away for free, but you know there will need to be some way to make money coming.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6542517" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/lorenh/archive/tags/.NET/default.aspx" /><category term="Productivity" scheme="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx" /></entry><entry><title>Subversion 1.5.1 Windows install is available</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/08/19/subversion-1-5-1-windows-install-is-available.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/08/19/subversion-1-5-1-windows-install-is-available.aspx</id><published>2008-08-19T15:27:57Z</published><updated>2008-08-19T15:27:57Z</updated><content type="html">&lt;p&gt;I've been working on a presentation for our next &lt;a href="http://www.mankatodotnet.com/"&gt;User Group&lt;/a&gt; meeting on Continuous Integration, and wanted to set up a local Subversion server.&amp;#160; Of course I wanted to use the latest and greatest versions of everything. So I've been checking back daily for the appearance of the installer for Subversion 1.5.1 for Windows.&amp;#160; &lt;strong&gt;Setup-Subversion-1.5.1.en-us.msi&lt;/strong&gt; showed up on August 15, 2008.&lt;/p&gt;  &lt;p&gt;You can find it on the &lt;a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&amp;amp;expandFolder=91&amp;amp;folderID=260"&gt;Subversion download site&lt;/a&gt;&amp;#160; When you couple this with the latest &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt; you are cookin' with gas!&lt;/p&gt;  &lt;p&gt;I found this CoDe Magazine article by Rick Strahl very helpful for setting things up initially. &lt;a href="http://www.code-magazine.com/Article.aspx?quickid=0807081"&gt;Setting Up and Running Subversion and Tortoise SVN with Visual Studio and .NET&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6538779" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author></entry><entry><title>Automatic Properties Work in .NET 2.0</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/08/19/automatic-properties-work-in-net-2-0.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/08/19/automatic-properties-work-in-net-2-0.aspx</id><published>2008-08-19T15:17:00Z</published><updated>2008-08-19T15:17:00Z</updated><content type="html">&lt;P&gt;This was sort of an accidental discovery, I'm not the first to stumble on it, but it doesn't seem to be widely known. A colleague of mine asked me about an interesting behavior he noticed after switching to Visual Studio 2008.&amp;nbsp; He was still targeting the .NET 2.0 framework, but noticed the automatic property feature worked.&lt;/P&gt;
&lt;P&gt;Automatic properties are where you can just say&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public string SomeProperty { get; set; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The compiler provides the backing field and implements the get and set for you. It's a very nice shorthand syntax for a common pattern. We were all under the impression that it was a new C# 3.0 language feature and could only be used if you targeted version 3.5 of the .NET Framework. After searching around for why it was still working on a .NET 2.0 app, I found many who verified what we were seeing. Indeed it does work, because it's a compiler feature, and 2008 uses the latest compiler even if you are targeting 2.0. Cool.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6538733" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author></entry><entry><title>IE 7 and Firefox browsing tip...open links in new tab by clicking your mouse scroll wheel</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/05/23/ie-7-and-firefox-browsing-tip-open-links-in-new-tab-by-clicking-your-mouse-scroll-wheel.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/05/23/ie-7-and-firefox-browsing-tip-open-links-in-new-tab-by-clicking-your-mouse-scroll-wheel.aspx</id><published>2008-05-23T16:58:10Z</published><updated>2008-05-23T16:58:10Z</updated><content type="html">&lt;p&gt;This is widely known, but I still run across people who use IE 7, and/or Firefox but don't use this little trick. On most mice, the scroll wheel is a button as well as a wheel. Click on links using the scroll wheel, and the browser will open that page in a new tab in the background without taking focus away from the current page.&lt;/p&gt;  &lt;p&gt;I find this extremely handy when browsing results from a search engine. As you visually scan through the search results, click the links that look promising using the scroll wheel. The browser will set to work to load those pages in the background as you continue to scan.&amp;#160; After you've got a good batch of pages loaded in your tabs, you can skip through the tabs quickly.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6214382" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="Productivity" scheme="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx" /></entry><entry><title>We're starting a .NET user group in south-central Minnesota</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/05/22/we-re-starting-a-net-user-group-in-south-central-minnesota.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/05/22/we-re-starting-a-net-user-group-in-south-central-minnesota.aspx</id><published>2008-05-22T14:23:25Z</published><updated>2008-05-22T14:23:25Z</updated><content type="html">&lt;p&gt;We are starting a .NET user group in Mankato, which is in south-central Minnesota. Hopefully we can attract developers in the area that (like me) sometimes find it hard to make the 1-1/2 hour drive to the nearest .NET user group in Minneapolis. They're doing a great job up there in the Twin Cities, and I'll still try to make it to some of their meetings, but I just have a feeling there is a community of developers here that don't get much of a chance to hang out with geeks and talk shop.&lt;/p&gt;  &lt;p&gt;So we have set up a &lt;a href="http://www.mankatodotnet.com"&gt;web site&lt;/a&gt;, and set the date and time for our kickoff meeting.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mankato .NET User Group Kickoff Meeting&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When: Tuesday, June 10, 7:00 - 9:00&lt;/p&gt;  &lt;p&gt;Where: Bethany College, &lt;a href="http://maps.live.com/?v=2&amp;amp;where1=700%20Luther%20Dr%2C%20Mankato%2C%20MN%2056001-6192&amp;amp;encType=1"&gt;700 Luther Dr, Mankato, Minnesota&lt;/a&gt; We'll be meeting in Meyer Hall room 130. If you park in the Meyer Hall lot, room 130 is the first door on the right when entering from the lower level entrance. Map can be found here, &lt;a href="http://www.blc.edu/facilities/map/"&gt;http://www.blc.edu/facilities/map/&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Agenda: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Introductions&lt;/li&gt;    &lt;li&gt;Discuss regular meeting times &amp;amp; format&lt;/li&gt;    &lt;li&gt;Discuss how to spread the word&lt;/li&gt;    &lt;li&gt;Brainstorm topics and presenters&lt;/li&gt;    &lt;li&gt;Presentation on new features in Visual Studio 2008 that make it a compelling upgrade&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Web site: &lt;a href="http://www.mankatodotnet.com"&gt;http://www.mankatodotnet.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you are a developer in south-central Minnesota, consider joining us. If you know a developer in our area, we'd much appreciate if you pass this on to them.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6210323" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="Community" scheme="http://weblogs.asp.net/lorenh/archive/tags/Community/default.aspx" /></entry><entry><title>Evoluent Vertical Mouse now available in wireless model</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/05/15/evoluent-vertical-mouse-now-available-in-wireless-model.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/05/15/evoluent-vertical-mouse-now-available-in-wireless-model.aspx</id><published>2008-05-15T15:02:00Z</published><updated>2008-05-15T15:02:00Z</updated><content type="html">&lt;P&gt;I've praised this mouse &lt;A href="http://weblogs.asp.net/lorenh/archive/2008/01/07/evoluent-verticalmouse-is-a-great-product.aspx" mce_href="http://weblogs.asp.net/lorenh/archive/2008/01/07/evoluent-verticalmouse-is-a-great-product.aspx"&gt;before&lt;/A&gt;, but just discovered that the &lt;A href="http://www.evoluent.com/vm3w.html" mce_href="http://www.evoluent.com/vm3w.html"&gt;wireless model of the Evoluent Vertical Mouse is now available&lt;/A&gt;. I have the wired version, and it is without a doubt the most comfortable mouse I've ever used. I throw it in my bag and drag it back and forth between the office and home. (I wonder how long before the cord gets a short?).&lt;/P&gt;
&lt;P&gt;The only modification I made was to physically disable the large bottom button closest to the desk by inserting a small rolled up piece of paper behind it because I kept hitting it inadvertently while just moving the mouse.&lt;/P&gt;
&lt;P&gt;The wireless one would be nice if anyone wants to buy it for me, my birthday is coming up.&amp;nbsp; Anybody have one yet?&amp;nbsp; How does it work?&amp;nbsp; How is the battery life?&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6192717" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx" /></entry><entry><title>Visual Studio Industry Partners (VSIP) program not needed to build a Domain Specific Languages (DSL)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lorenh/archive/2008/05/15/visual-studio-industry-partners-vsip-program-not-needed-to-build-a-domain-specific-languages-dsl.aspx" /><id>http://weblogs.asp.net/lorenh/archive/2008/05/15/visual-studio-industry-partners-vsip-program-not-needed-to-build-a-domain-specific-languages-dsl.aspx</id><published>2008-05-15T14:44:22Z</published><updated>2008-05-15T14:44:22Z</updated><content type="html">&lt;p&gt;After listening to a DotNetRocks podcast that interviewed &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=329"&gt;Kevin McNeish on DSLs and Software Factories&lt;/a&gt;, I was curious to check out the DSL toolkit for internal use by our developers. After installing the &lt;a href="http://msdn2.microsoft.com/en-au/vsx/default.aspx"&gt;Visual Studio 2008 SDK&lt;/a&gt;, I started seeing a &amp;#8220;VSIP License Required&amp;#8221; in the Visual Studio &lt;strong&gt;2005&lt;/strong&gt; splash screen, and &amp;#8220;A VSIP license is required to use this version of Microsoft Visual Studio&amp;#8221; in the about box of Visual Studio &lt;strong&gt;2005&lt;/strong&gt;.&amp;#160; However, within Visual Studio 2008&amp;#8217;s about box I see &amp;#8220;Visual Studio SDK License&amp;#8221;.&amp;#160; I was confused and wondered exactly when a VSIP license is required. I contacted someone at Microsoft and received clarification on this.&lt;/p&gt;  &lt;p&gt;The Microsoft person verified that it is &lt;strong&gt;not&lt;/strong&gt; necessary to join the VSIP program in order to build and use your own DSL implementation, internally or externally.&amp;#160; Apparently when Visual Studio 2005 was first released, extending Visual Studio was only allowed by licensed partners, but this restriction was later lifted, and licenses aren't necessary anymore. Unfortunately the messages in the splash screen and about box were not updated. Good to know.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6192652" width="1" height="1"&gt;</content><author><name>lorenh</name><uri>http://weblogs.asp.net/members/lorenh.aspx</uri></author><category term="Visual Studio" scheme="http://weblogs.asp.net/lorenh/archive/tags/Visual+Studio/default.aspx" /><category term="DSL" scheme="http://weblogs.asp.net/lorenh/archive/tags/DSL/default.aspx" /></entry></feed>