<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: The Art of Assembly Versions</title>
	<atom:link href="http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/</link>
	<description></description>
	<lastBuildDate>Tue, 16 Mar 2010 14:19:47 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: trasa</title>
		<link>http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/comment-page-1/#comment-38409</link>
		<dc:creator>trasa</dc:creator>
		<pubDate>Sun, 30 Nov 2008 21:02:36 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/#comment-38409</guid>
		<description>I intentionally deviate from what MSDN says there - how do you get a revision out the door without building it?  A build # is the smallest conceptual unit we&#039;re working with, particularly if you&#039;re automating your build.</description>
		<content:encoded><![CDATA[<p>I intentionally deviate from what MSDN says there &#8211; how do you get a revision out the door without building it?  A build # is the smallest conceptual unit we&#8217;re working with, particularly if you&#8217;re automating your build.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adam</title>
		<link>http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/comment-page-1/#comment-38406</link>
		<dc:creator>Adam</dc:creator>
		<pubDate>Sun, 30 Nov 2008 20:34:05 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/#comment-38406</guid>
		<description>Woops, you&#039;ve got your revision/build numbers around the wrong way.
The version format is:

...

see msdn: http://tinyurl.com/5pd4xo</description>
		<content:encoded><![CDATA[<p>Woops, you&#8217;ve got your revision/build numbers around the wrong way.<br />
The version format is:</p>
<p>&#8230;</p>
<p>see msdn: <a href="http://tinyurl.com/5pd4xo" rel="nofollow">http://tinyurl.com/5pd4xo</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reflective Perspective - Chris Alcock &#187; The Morning Brew #110</title>
		<link>http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/comment-page-1/#comment-23326</link>
		<dc:creator>Reflective Perspective - Chris Alcock &#187; The Morning Brew #110</dc:creator>
		<pubDate>Mon, 09 Jun 2008 07:28:21 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/#comment-23326</guid>
		<description>[...]  The Art of Assembly Versions - Tony Rasa talks version numbers, and why its important to ensure that they get updated. [...]</description>
		<content:encoded><![CDATA[<p>[...]  The Art of Assembly Versions &#8211; Tony Rasa talks version numbers, and why its important to ensure that they get updated. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dew Drop &#8211; June 6, 2008 &#124; Alvin Ashcraft's Morning Dew</title>
		<link>http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/comment-page-1/#comment-23047</link>
		<dc:creator>Dew Drop &#8211; June 6, 2008 &#124; Alvin Ashcraft's Morning Dew</dc:creator>
		<pubDate>Fri, 06 Jun 2008 12:40:20 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/#comment-23047</guid>
		<description>[...] The Art of Assembly Versions (Tony Rasa) [...]</description>
		<content:encoded><![CDATA[<p>[...] The Art of Assembly Versions (Tony Rasa) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Hanney</title>
		<link>http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/comment-page-1/#comment-22959</link>
		<dc:creator>Michael Hanney</dc:creator>
		<pubDate>Thu, 05 Jun 2008 18:35:48 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2008/06/05/the-art-of-assembly-versions/#comment-22959</guid>
		<description>I completely agree it is important to to have a version naming method, and one that integrates well with the automated build process as well as visual studio. 

I doubt there is one convention that suits all projects.  Here is a scheme I&#039;m currently using on one project. I am not saying it is better, (in many ways it is not). It is just an alternative idea because of the limitation imposed by one particular web hosting environment.

In some of our larger deployments we have multiple versions of the same assembly in the GAC to serve many customer websites hosted on one machine (I won&#039;t bore you with the details of why the assemblies cannot be the same, or why they cannot go in the website bin dir). The point is, we are required to keep the {major}.{minor}.{revision}.{build} numbers constant between upgrades, but there are other properties available in the assembly manifest meta-data we can use to identify the release.

We stamp the assemblies with revision and build information using the AssemblyInformationalVersion, and AssemblyFileVersion properties. These are informational only and don&#039;t affect the GAC or linker. 

We use AssemblyInformationalVersion to identify the product. This is a constant. 

The AssemblyFileVersion is used to store the {major}.{minor}.{revision}.{build} numbers. The value in AssemblyFileVersion corresponds directly to the tag used to label the source code in the subversion repository at the time the release was created. 

I am not sure if this is the intended purpose for AssemblyFileVersion, but the name is appropriate considering it ties in with the source files. We can recreate a release from a tag in subversion, or checkout a branch for an already deployed release if it needs a bug fixed and re-deployed.

AssemblyInformationalVersion, AssemblyFileVersion and AssemblyVersion are defined in a single VersionInfo.cs file for the build and referenced by each MSBuild project in the solution as a linked file in the Properties directory. There is a also an AssemblyInfo.cs file for each project, as usual, but this contains constant values. When working in visual studio, VersionInfo.cs never changes. 

When doing a release, a custom MSBuild task creates a new VersionInfo.cs file and proceeds to compile the entire source. The build task is responsible for keeping the values in VersionInfo.cs in sync with subversion tags. Our MSBuild tasks are based on the open source MSBuild Community task which include an AssemblyInfo task. Very much worth checking out, http://msbuildtasks.tigris.org/</description>
		<content:encoded><![CDATA[<p>I completely agree it is important to to have a version naming method, and one that integrates well with the automated build process as well as visual studio. </p>
<p>I doubt there is one convention that suits all projects.  Here is a scheme I&#8217;m currently using on one project. I am not saying it is better, (in many ways it is not). It is just an alternative idea because of the limitation imposed by one particular web hosting environment.</p>
<p>In some of our larger deployments we have multiple versions of the same assembly in the GAC to serve many customer websites hosted on one machine (I won&#8217;t bore you with the details of why the assemblies cannot be the same, or why they cannot go in the website bin dir). The point is, we are required to keep the {major}.{minor}.{revision}.{build} numbers constant between upgrades, but there are other properties available in the assembly manifest meta-data we can use to identify the release.</p>
<p>We stamp the assemblies with revision and build information using the AssemblyInformationalVersion, and AssemblyFileVersion properties. These are informational only and don&#8217;t affect the GAC or linker. </p>
<p>We use AssemblyInformationalVersion to identify the product. This is a constant. </p>
<p>The AssemblyFileVersion is used to store the {major}.{minor}.{revision}.{build} numbers. The value in AssemblyFileVersion corresponds directly to the tag used to label the source code in the subversion repository at the time the release was created. </p>
<p>I am not sure if this is the intended purpose for AssemblyFileVersion, but the name is appropriate considering it ties in with the source files. We can recreate a release from a tag in subversion, or checkout a branch for an already deployed release if it needs a bug fixed and re-deployed.</p>
<p>AssemblyInformationalVersion, AssemblyFileVersion and AssemblyVersion are defined in a single VersionInfo.cs file for the build and referenced by each MSBuild project in the solution as a linked file in the Properties directory. There is a also an AssemblyInfo.cs file for each project, as usual, but this contains constant values. When working in visual studio, VersionInfo.cs never changes. </p>
<p>When doing a release, a custom MSBuild task creates a new VersionInfo.cs file and proceeds to compile the entire source. The build task is responsible for keeping the values in VersionInfo.cs in sync with subversion tags. Our MSBuild tasks are based on the open source MSBuild Community task which include an AssemblyInfo task. Very much worth checking out, <a href="http://msbuildtasks.tigris.org/" rel="nofollow">http://msbuildtasks.tigris.org/</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
