<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>CLR Hoser - Deployment</title>
    <link>http://hoser.lander.ca/</link>
    <description>(none)</description>
    <language>en-us</language>
    <copyright>Rich Lander</copyright>
    <lastBuildDate>Thu, 23 Oct 2008 17:40:49 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>rich@lander.ca</managingEditor>
    <webMaster>rich@lander.ca</webMaster>
    <item>
      <trackback:ping>http://hoser.lander.ca/Trackback.aspx?guid=25f1cfe6-f2e2-45f4-aabd-b1eee016fd17</trackback:ping>
      <pingback:server>http://hoser.lander.ca/pingback.aspx</pingback:server>
      <pingback:target>http://hoser.lander.ca/PermaLink,guid,25f1cfe6-f2e2-45f4-aabd-b1eee016fd17.aspx</pingback:target>
      <dc:creator>Rich Lander</dc:creator>
      <wfw:comment>http://hoser.lander.ca/CommentView,guid,25f1cfe6-f2e2-45f4-aabd-b1eee016fd17.aspx</wfw:comment>
      <wfw:commentRss>http://hoser.lander.ca/SyndicationService.asmx/GetEntryCommentsRss?guid=25f1cfe6-f2e2-45f4-aabd-b1eee016fd17</wfw:commentRss>
      <slash:comments>9</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://hoser.lander.ca/content/binary/WindowsLiveWriter/WhatdoIwantforv2Applications_938B/20081014%20028.jpg">
            <img style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 0px 5px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="20081014 028" border="0" alt="20081014 028" align="right" src="http://hoser.lander.ca/content/binary/WindowsLiveWriter/WhatdoIwantforv2Applications_938B/20081014%20028_thumb.jpg" width="308" height="207" />
          </a> I’m
addressing the v2 question first. It is hard to know what to do in v1 if you don’t
know where you want to end up when you go to build and deploy v2 (and later versions)
of your product.
</p>
        <p>
First, I'm going back to the three different product categories that I <a href="http://hoser.lander.ca/2008/09/26/LookingIntoDeploymentShippingYourV2.aspx">outlined
earlier</a>. I'm going to collapse the two different types of applications into just
one category. Today's post is about applications. The next one will be about components.
</p>
        <p>
          <strong>
            <font size="2">Applications</font>
          </strong>
        </p>
        <p>
For v2, you will want one of two situations: 
</p>
        <ul>
          <li>
my v2 application completely replaces my v1 version entirely, or 
</li>
          <li>
my v2 application installs side-by-side with v1 and the two versions do not affect
or interact with one another 
</li>
        </ul>
        <p>
In most cases, I suspect that folks want the former. As an example, almost no one
expects or wants to continue to use Office 2003 after installing Office 2007 on their
machine. Something like TurboTax is the example that breaks that rule.
</p>
        <p>
If you opt to install your application side-by-side with the older version of your
application, then you might need to consider the safety of side-by-side versions of
the various libraries that you depend on. The specific scenario that I’m imagining
is that v2 of your application might be perfectly side-by-side with the v1 version,
but the newer version of the MathLib library that you depend on might not be properly
designed for a side-by-side install. Let's assume that you purchased MathLib from
MathCorp, and that the versioning/servicing scheme of MathLib is different (naturally)
than what you employ for the libraries that you build for your own application.
</p>
        <p>
There are (at least) two obvious gotchas that I can imagine: 
</p>
        <ul>
          <li>
MathLib doesn’t install side-by-side, but always overwrites older library versions
with newer versions, and the MathLib developers made a breaking change this release
(oops!), or 
</li>
          <li>
MathLib reads mathematic constants from a file at a particular location, and the format
of the file changed, but the location did not (oops!), which will break the old version 
</li>
        </ul>
        <p>
And to the other option, if you opt to replace the earlier version of your application,
you don't risk breaking the earlier version of your app (since it is now gone), but
you still have the risk that you might affect another app on the machine that relies
on MathLib in the same ways described above.
</p>
        <p>
What I’ve just described is essentially the well-known “dll hell” problem. I’d hope
that most developers are familiar with this problem and have enough information to
avoid it. However, it is sometimes non-obvious that you are about to walk off that
cliff. This post is really intended to get folks to think a little more about that
cliff.
</p>
        <p>
This whole scenario assumes that MathLib is installed in some global fashion, either
to the GAC, or to a global directory, such as "C:\Program Files\MathCorp\MathLib".
If MathLib is installed with the application, in the application directory, then this
whole problem goes away. At that point, you really are back to the monolithic application
that I discussed earlier where the entirety of the application is installed and serviced
uniformly, in time and location.
</p>
        <p>
To be clear, I'm not trying to push developers toward private installs. There are
downsides to approach that too. The meta-message is that you need to understand the
potential impact of deploying your v2, and align your v2 goals around avoiding those
impacts.
</p>
        <p>
What's with the picture in the post? I recently purchased a digital SLR and am getting
into photography as a hobby of sorts. The pic is just to add something extra to the
post. I like this particular picture since there is a lot to look at visually, and
because the focus is pretty narrow and well off center. It is also fun to see a child’s
toy as an artifact to study.
</p>
        <img width="0" height="0" src="http://hoser.lander.ca/aggbug.ashx?id=25f1cfe6-f2e2-45f4-aabd-b1eee016fd17" />
      </body>
      <title>What do I want for v2: Applications?</title>
      <guid isPermaLink="false">http://hoser.lander.ca/PermaLink,guid,25f1cfe6-f2e2-45f4-aabd-b1eee016fd17.aspx</guid>
      <link>http://hoser.lander.ca/2008/10/23/WhatDoIWantForV2Applications.aspx</link>
      <pubDate>Thu, 23 Oct 2008 17:40:49 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://hoser.lander.ca/content/binary/WindowsLiveWriter/WhatdoIwantforv2Applications_938B/20081014%20028.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 0px 5px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="20081014 028" border=0 alt="20081014 028" align=right src="http://hoser.lander.ca/content/binary/WindowsLiveWriter/WhatdoIwantforv2Applications_938B/20081014%20028_thumb.jpg" width=308 height=207&gt;&lt;/a&gt; I’m
addressing the v2 question first. It is hard to know what to do in v1 if you don’t
know where you want to end up when you go to build and deploy v2 (and later versions)
of your product.
&lt;/p&gt;
&lt;p&gt;
First, I'm going back to the three different product categories that I &lt;a href="http://hoser.lander.ca/2008/09/26/LookingIntoDeploymentShippingYourV2.aspx"&gt;outlined
earlier&lt;/a&gt;. I'm going to collapse the two different types of applications into just
one category. Today's post is about applications. The next one will be about components.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size=2&gt;Applications&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
For v2, you will want one of two situations: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
my v2 application completely replaces my v1 version entirely, or 
&lt;li&gt;
my v2 application installs side-by-side with v1 and the two versions do not affect
or interact with one another 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In most cases, I suspect that folks want the former. As an example, almost no one
expects or wants to continue to use Office 2003 after installing Office 2007 on their
machine. Something like TurboTax is the example that breaks that rule.
&lt;/p&gt;
&lt;p&gt;
If you opt to install your application side-by-side with the older version of your
application, then you might need to consider the safety of side-by-side versions of
the various libraries that you depend on. The specific scenario that I’m imagining
is that v2 of your application might be perfectly side-by-side with the v1 version,
but the newer version of the MathLib library that you depend on might not be properly
designed for a side-by-side install. Let's assume that you purchased MathLib from
MathCorp, and that the versioning/servicing scheme of MathLib is different (naturally)
than what you employ for the libraries that you build for your own application.
&lt;/p&gt;
&lt;p&gt;
There are (at least) two obvious gotchas that I can imagine: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
MathLib doesn’t install side-by-side, but always overwrites older library versions
with newer versions, and the MathLib developers made a breaking change this release
(oops!), or 
&lt;li&gt;
MathLib reads mathematic constants from a file at a particular location, and the format
of the file changed, but the location did not (oops!), which will break the old version 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And to the other option, if you opt to replace the earlier version of your application,
you don't risk breaking the earlier version of your app (since it is now gone), but
you still have the risk that you might affect another app on the machine that relies
on MathLib in the same ways described above.
&lt;/p&gt;
&lt;p&gt;
What I’ve just described is essentially the well-known “dll hell” problem. I’d hope
that most developers are familiar with this problem and have enough information to
avoid it. However, it is sometimes non-obvious that you are about to walk off that
cliff. This post is really intended to get folks to think a little more about that
cliff.
&lt;/p&gt;
&lt;p&gt;
This whole scenario assumes that MathLib is installed in some global fashion, either
to the GAC, or to a global directory, such as "C:\Program Files\MathCorp\MathLib".
If MathLib is installed with the application, in the application directory, then this
whole problem goes away. At that point, you really are back to the monolithic application
that I discussed earlier where the entirety of the application is installed and serviced
uniformly, in time and location.
&lt;/p&gt;
&lt;p&gt;
To be clear, I'm not trying to push developers toward private installs. There are
downsides to approach that too. The meta-message is that you need to understand the
potential impact of deploying your v2, and align your v2 goals around avoiding those
impacts.
&lt;/p&gt;
&lt;p&gt;
What's with the picture in the post? I recently purchased a digital SLR and am getting
into photography as a hobby of sorts. The pic is just to add something extra to the
post. I like this particular picture since there is a lot to look at visually, and
because the focus is pretty narrow and well off center. It is also fun to see a child’s
toy as an artifact to study.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://hoser.lander.ca/aggbug.ashx?id=25f1cfe6-f2e2-45f4-aabd-b1eee016fd17" /&gt;</description>
      <comments>http://hoser.lander.ca/CommentView,guid,25f1cfe6-f2e2-45f4-aabd-b1eee016fd17.aspx</comments>
      <category>Deployment</category>
      <category>Loader</category>
      <category>Versioning</category>
    </item>
    <item>
      <trackback:ping>http://hoser.lander.ca/Trackback.aspx?guid=731a3383-6d88-40fa-967b-19c3a3e6fe7c</trackback:ping>
      <pingback:server>http://hoser.lander.ca/pingback.aspx</pingback:server>
      <pingback:target>http://hoser.lander.ca/PermaLink,guid,731a3383-6d88-40fa-967b-19c3a3e6fe7c.aspx</pingback:target>
      <dc:creator>Rich Lander</dc:creator>
      <wfw:comment>http://hoser.lander.ca/CommentView,guid,731a3383-6d88-40fa-967b-19c3a3e6fe7c.aspx</wfw:comment>
      <wfw:commentRss>http://hoser.lander.ca/SyndicationService.asmx/GetEntryCommentsRss?guid=731a3383-6d88-40fa-967b-19c3a3e6fe7c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">Lately, I’ve been thinking about the
overall .NET deployment and servicing story. There are a number of aspects of deployment
that one can consider. The particular issues that are salient for your product depend
a lot on the kind of code you deploy onto end-user machines. </font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">First, let’s look at the different kinds
of products that developers might build, and need to deploy:</font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpFirst">
          <font color="#000000">
            <span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">
              <span style="mso-list: Ignore">
                <font size="3" face="Calibri">-</font>
                <span style="FONT: 7pt 'Times New Roman'">          </span>
              </span>
            </span>
            <font size="3" face="Calibri">Monolithic
applications</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class="MsoListParagraphCxSpMiddle">
          <font color="#000000">
            <span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'">
              <span style="mso-list: Ignore">
                <font size="3">o</font>
                <span style="FONT: 7pt 'Times New Roman'">   </span>
              </span>
            </span>
            <font size="3" face="Calibri">A
single exe that is not dependent on any libraries, other than the .NET Framework itself,
or</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class="MsoListParagraphCxSpMiddle">
          <font color="#000000">
            <span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'">
              <span style="mso-list: Ignore">
                <font size="3">o</font>
                <span style="FONT: 7pt 'Times New Roman'">   </span>
              </span>
            </span>
            <font size="3" face="Calibri">Solely
dependent on libraries that are serviced/upgraded with the application</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle">
          <font color="#000000">
            <span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">
              <span style="mso-list: Ignore">
                <font size="3" face="Calibri">-</font>
                <span style="FONT: 7pt 'Times New Roman'">          </span>
              </span>
            </span>
            <font size="3" face="Calibri">Aggregate
applications</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class="MsoListParagraphCxSpMiddle">
          <font color="#000000">
            <span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'">
              <span style="mso-list: Ignore">
                <font size="3">o</font>
                <span style="FONT: 7pt 'Times New Roman'">   </span>
              </span>
            </span>
            <font size="3" face="Calibri">Dependent
(at least partially) on libraries (or controls or components) that are installed/serviced/upgraded
separately (in ‘time’ and/or ‘location’) from the application</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class="MsoListParagraphCxSpMiddle">
          <font color="#000000">
            <span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'">
              <span style="mso-list: Ignore">
                <font size="3">o</font>
                <span style="FONT: 7pt 'Times New Roman'">   </span>
              </span>
            </span>
            <font face="Calibri">
              <font size="3">These
libraries are likely sourced from a 3<sup>rd</sup></font>
              <font size="3"> party</font>
            </font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle">
          <font color="#000000">
            <span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">
              <span style="mso-list: Ignore">
                <font size="3" face="Calibri">-</font>
                <span style="FONT: 7pt 'Times New Roman'">          </span>
              </span>
            </span>
            <font size="3" face="Calibri">Components,
controls or class libraries</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class="MsoListParagraphCxSpLast">
          <font color="#000000">
            <span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'">
              <span style="mso-list: Ignore">
                <font size="3">o</font>
                <span style="FONT: 7pt 'Times New Roman'">   </span>
              </span>
            </span>
            <font size="3" face="Calibri">You
build assemblies that other developers reference in their applications (both ‘Monolithic’
and ‘Aggregate’ applications as described above) or other libraries</font>
          </font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">While we’re thinking broadly, one is
left wondering what the critical questions are to think about for each of the deployment
cases above. There are a lot of questions that one can imagine looking into. They
range from .NET Framework and application deployment, to servicing multiple versions
of your applications out in the wild, to safely deploying a new version of your API
(class libraries) onto end-user machines w/o any adverse impact.</font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">The first one that I’d like to look
at is: “Am I building my product correctly for the future?” This question, though,
really boils down into two important questions:</font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpFirst">
          <font color="#000000">
            <span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">
              <span style="mso-list: Ignore">
                <font size="3" face="Calibri">-</font>
                <span style="FONT: 7pt 'Times New Roman'">          </span>
              </span>
            </span>
            <font size="3" face="Calibri">What
do I need to think about when shipping v1 of my product?</font>
          </font>
        </p>
        <p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpLast">
          <font color="#000000">
            <span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">
              <span style="mso-list: Ignore">
                <font size="3" face="Calibri">-</font>
                <span style="FONT: 7pt 'Times New Roman'">          </span>
              </span>
            </span>
            <font size="3" face="Calibri">What
do I need to do to safely, correctly and seamlessly ship v2 of my product?</font>
          </font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">Those questions seem very simple, and
they are on the surface. The answers are not overly complicated, but do require some
up-front thought to ensure that you end up where you want to. </font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">We have had folks come to us after a
successful v1, not quite sure what to do for v2. You may be wondering what the crux
of this is … you just hit ‘go’ on csc/vbc another time and you’re done, right? Maybe.
It all depends on how you want your code to behave when you ship your second version.</font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">Note that I call out v2 specifically
(and not v3 and v4) since v2 is the first version after your initial one, and will
be the time when you need to address any issues that come up with shipping again.
Once you’ve got a plan in place, you’ll be able to rinse and repeat for each subsequent
version (provided that you have a good plan).</font>
        </p>
        <p style="MARGIN: 0in 0in 10pt" class="MsoNormal">
          <font color="#000000" size="3" face="Calibri">In my next posts, I’ll answer this question
for each of the product types listed at the top of the post.</font>
        </p>
        <img width="0" height="0" src="http://hoser.lander.ca/aggbug.ashx?id=731a3383-6d88-40fa-967b-19c3a3e6fe7c" />
      </body>
      <title>Looking into Deployment – Shipping your v2</title>
      <guid isPermaLink="false">http://hoser.lander.ca/PermaLink,guid,731a3383-6d88-40fa-967b-19c3a3e6fe7c.aspx</guid>
      <link>http://hoser.lander.ca/2008/09/26/LookingIntoDeploymentShippingYourV2.aspx</link>
      <pubDate>Fri, 26 Sep 2008 16:57:56 GMT</pubDate>
      <description>&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Lately, I’ve been thinking about the overall
.NET deployment and servicing story. There are a number of aspects of deployment that
one can consider. The particular issues that are salient for your product depend a
lot on the kind of code you deploy onto end-user machines. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;First, let’s look at the different kinds of
products that developers might build, and need to deploy:&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;
&lt;font color=#000000&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3 face=Calibri&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&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&gt;&lt;font size=3 face=Calibri&gt;Monolithic
applications&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3&gt;o&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3 face=Calibri&gt;A
single exe that is not dependent on any libraries, other than the .NET Framework itself,
or&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3&gt;o&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3 face=Calibri&gt;Solely
dependent on libraries that are serviced/upgraded with the application&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;
&lt;font color=#000000&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3 face=Calibri&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&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&gt;&lt;font size=3 face=Calibri&gt;Aggregate
applications&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3&gt;o&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3 face=Calibri&gt;Dependent
(at least partially) on libraries (or controls or components) that are installed/serviced/upgraded
separately (in ‘time’ and/or ‘location’) from the application&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3&gt;o&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face=Calibri&gt;&lt;font size=3&gt;These
libraries are likely sourced from a 3&lt;sup&gt;rd&lt;/sup&gt;&lt;/font&gt;&lt;font size=3&gt; party&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;
&lt;font color=#000000&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3 face=Calibri&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&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&gt;&lt;font size=3 face=Calibri&gt;Components,
controls or class libraries&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3&gt;o&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3 face=Calibri&gt;You
build assemblies that other developers reference in their applications (both ‘Monolithic’
and ‘Aggregate’ applications as described above) or other libraries&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;While we’re thinking broadly, one is left
wondering what the critical questions are to think about for each of the deployment
cases above. There are a lot of questions that one can imagine looking into. They
range from .NET Framework and application deployment, to servicing multiple versions
of your applications out in the wild, to safely deploying a new version of your API
(class libraries) onto end-user machines w/o any adverse impact.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;The first one that I’d like to look at is:
“Am I building my product correctly for the future?” This question, though, really
boils down into two important questions:&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;
&lt;font color=#000000&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3 face=Calibri&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&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&gt;&lt;font size=3 face=Calibri&gt;What
do I need to think about when shipping v1 of my product?&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;
&lt;font color=#000000&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font size=3 face=Calibri&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&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&gt;&lt;font size=3 face=Calibri&gt;What
do I need to do to safely, correctly and seamlessly ship v2 of my product?&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Those questions seem very simple, and they
are on the surface. The answers are not overly complicated, but do require some up-front
thought to ensure that you end up where you want to. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;We have had folks come to us after a successful
v1, not quite sure what to do for v2. You may be wondering what the crux of this is
… you just hit ‘go’ on csc/vbc another time and you’re done, right? Maybe. It all
depends on how you want your code to behave when you ship your second version.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Note that I call out v2 specifically (and
not v3 and v4) since v2 is the first version after your initial one, and will be the
time when you need to address any issues that come up with shipping again. Once you’ve
got a plan in place, you’ll be able to rinse and repeat for each subsequent version
(provided that you have a good plan).&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;In my next posts, I’ll answer this question
for each of the product types listed at the top of the post.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://hoser.lander.ca/aggbug.ashx?id=731a3383-6d88-40fa-967b-19c3a3e6fe7c" /&gt;</description>
      <comments>http://hoser.lander.ca/CommentView,guid,731a3383-6d88-40fa-967b-19c3a3e6fe7c.aspx</comments>
      <category>Loader</category>
      <category>Versioning</category>
      <category>Deployment</category>
    </item>
  </channel>
</rss>