<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Trimagination &#187; Visual Studio</title>
	<atom:link href="http://www.trimagination.info/category/entwicklung/visual-studio/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.trimagination.info</link>
	<description>...far beyond</description>
	<lastBuildDate>Mon, 19 Oct 2009 13:46:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Brian the Build Bunny &#8211; Part II</title>
		<link>http://www.trimagination.info/2009/01/29/brian-the-build-bunny-part-ii/</link>
		<comments>http://www.trimagination.info/2009/01/29/brian-the-build-bunny-part-ii/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 07:01:31 +0000</pubDate>
		<dc:creator>cjacob</dc:creator>
				<category><![CDATA[Interessantes]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.trimagination.info/?p=183</guid>
		<description><![CDATA[On December, 4th, I posted a small article containing a youtube video of Brian the Build Bunny and simply the comment that I wished I had one (update on this: maybe I&#8217;ll get myself one&#8230;). What was most fascinating on this was, that two weeks later, I suddenly got over 300 hits on my blog [...]]]></description>
			<content:encoded><![CDATA[<p>On December, 4th, I posted a <a href="http://www.trimagination.info/2008/12/04/brain-the-build-bunny/" target="_blank">small article</a> containing a youtube video of <a href="http://www.woodwardweb.com/vsts/behind_brian_th.html" target="_blank">Brian the Build Bunny</a> and simply the comment that I wished I had one (update on this: maybe I&#8217;ll get myself one&#8230;). What was most fascinating on this was, that two weeks later, I suddenly got over 300 hits on my blog (which usually has around 10 to 20 hits per day). I had a quick look at the stats and noticed that all of them went directly to my Build Bunny post.</p>
<p><a href="http://www.trimagination.info/wp-content/uploads/2009/01/nabaztag.jpg" target="_new"><img class="size-medium wp-image-186 alignright" title="nabaztag" src="http://www.trimagination.info/wp-content/uploads/2009/01/nabaztag-248x300.jpg" alt="nabaztag" width="248" height="300" /></a></p>
<p>However, the article didnt actually contain anything of any interest. And the referers didn&#8217;t show how those people got to my blog. Today, I noticed that there are still visitors looking for Brian (did you notice, that I had a typo in the headline?). This time I got curious. Where did those people come from anyway. So I had a closer look into the stats.</p>
<p>And guess what: From Redmond. Microsoft Corp.</p>
<p>This is so typical. I post really interesting stuff about <a href="http://www.trimagination.info/2009/01/12/quitting-microsoft-windows-live-onecare-part-iii-finally/" target="_blank">how to quit Microsoft Windows Live OneCare</a>, <a href="http://www.trimagination.info/2009/01/13/why-windows-7-calculator-does-change-peoples-minds/" target="_blank">why Microsoft Windows 7 will kick ass</a>, the all new Microsoft Team Foundation Server 2008 <a href="http://www.trimagination.info/2009/01/05/team-foundation-server-branching-guide-20/" target="_blank">Branching Guide 2.0</a>, <a href="http://www.trimagination.info/2009/01/23/automatically-generate-release-notes-textfile-from-team-foundation-build/" target="_blank">how to generate Release Notes</a> with Microsoft Team Foundation Server 2008 Team Build and automate the <a href="http://www.trimagination.info/2009/01/28/how-to-let-team-build-automatically-increment-the-assemblys-version-information/" target="_blank">incrementing of Assembly version numbers</a> (thanks again, <a href="http://blogs.msdn.com/cbinder/archive/2007/03/15/wie-inkrementiere-ich-meine-assembly-versionen-automatisch-mit-tfs-build.aspx" target="_blank">Chris</a>!). And they come for looking at a youtube video about Brian the Build Bunny.</p>
<p>Time to get one and do something with it, they really find interesting.</p>
<p>Since I can safely assume, that you guys from Microsoft still visit my blog for Brian, could you please add comments about why and where you got the link from? <img src='http://www.trimagination.info/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.trimagination.info/2009/01/29/brian-the-build-bunny-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to let Team Build automatically increment the Assemblys&#8217; version information</title>
		<link>http://www.trimagination.info/2009/01/28/how-to-let-team-build-automatically-increment-the-assemblys-version-information/</link>
		<comments>http://www.trimagination.info/2009/01/28/how-to-let-team-build-automatically-increment-the-assemblys-version-information/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 18:27:50 +0000</pubDate>
		<dc:creator>cjacob</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.trimagination.info/?p=179</guid>
		<description><![CDATA[First of all let me say that credit goes to Christian Binder whose blog article was the reason why I got things working in the first place. Thank Chris! Since his howto is in german, I will translate most of it here. For reference, please visit his blog!
So this is what this article is about: [...]]]></description>
			<content:encoded><![CDATA[<p>First of all let me say that credit goes to Christian Binder whose blog article was the reason why I got things working in the first place. Thank Chris! Since his howto is in german, I will translate most of it here. For reference, please visit his <a href="http://blogs.msdn.com/cbinder/archive/2007/03/15/wie-inkrementiere-ich-meine-assembly-versionen-automatisch-mit-tfs-build.aspx" target="_blank">blog</a>!</p>
<p><span id="more-179"></span>So this is what this article is about: Imagine you were doing nightly builds of your software. Sure enough you wouldn&#8217;t want to touch every AssemblyInfo.cs or .vb every day only for manually incrementing the version number. The Assembly version number basically looks like this:</p>
<p>MajorVersion.MinorVersion.BuildNumber.Revision.</p>
<p>What you want to achieve is that you can see the Assembly version in the file properties in explorer so that you know which release build it refers to.</p>
<p>To know which release build the Assembly refers to, you need the buildnumber Team Build assigned to the release. The naming convention looks like this: Buildname + Date + Revision. So if you built your FooBar application today already the third time, its buildnumber would be FooBar_20090128.3. Easy, huh?</p>
<p>While FooBar&#8217;s sources are labled with that buildnumber, the Assembly properties are not altered.</p>
<p>The settings you would want Team Build to alter are these:</p>
<p><span style="font-size: x-small;"><span style="color: #008080;"><span style="font-family: Tahoma;">// Version information for an assembly consists of the following four values:<br />
//<br />
// Major Version<br />
// Minor Version<br />
// Build Number<br />
// Revision<br />
//<br />
// You can specify all the values or you can default the Revision and Build Numbers<br />
// by using the &#8216;*&#8217; as shown below:<br />
[assembly: AssemblyVersion("1.0.0.0")]<br />
[assembly: AssemblyFileVersion("1.0.0.0")]</span></span><span style="font-family: Courier New;"> </span></span></p>
<p>Before I go into details about what Chris did to get things working, let me add the following:</p>
<p>My project consists of several solutions. I have libraries for example that are shared amongst several projects. This is why I only wanted to have build definitions that contained the main project and the referenced libraries. However, for automatically checking out and back in the AssemblyInfo files while editing them at build time, Chris uses the <strong>/recursive</strong> argument to recursively go through all subdirectories and touch all AssemblyInfo files. When having more than one workspace in your build definition that explicitly copy only specific projects to Team Builds&#8217; local workspace, that does not work.</p>
<p>However, he also shows how to create a list of all AssemblyInfo files within the folder structure. And I changed his TFS tasks so that instead of the recursive argument the list generated earlier is used. That works like a charm!</p>
<p>And this is how you extend the build process to let Team Build automatically set the version information:</p>
<h3> 1. Download and install AssemblyInfoTask</h3>
<p>You need to get this custom build task. Chris references the original source at gotdotnet.com which does not exist anymore. Either search for the text AssemblyInfoTaskvers with google or try <a href="http://code.msdn.microsoft.com/AssemblyInfoTaskvers/Release/ProjectReleases.aspx?ReleaseId=232" target="_blank">this</a> link. It should redirect you to the download area on MSDN where you can get the lates setup release.</p>
<h3>2. Import the task into your build project</h3>
<p>Open Source Control in Visual Studio and make sure you have a local copy of the build project in your workspace. Then check out the TFSBuild.proj file (<em>Unchanged, keep any existing lock</em>) and open it. Add the following line right after the import of Microsoft.TeamFoundation.Build.targets: </p>
<div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New">
<p style="MARGIN: 0px"><span style="COLOR: blue">&lt;</span><span style="COLOR: #a31515">Import</span><span style="COLOR: blue"> </span><span style="COLOR: red">Project</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(MSBuildExtensionsPath)\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.Targets</span>&#8220;<span style="COLOR: blue">/&gt;</span> </p>
</div>
<h3>3. Use a custom task for retrieving the revision number</h3>
<p>Each buildnumber contains a revision: FooBar_20090128.<span style="color: #ff0000;">3 </span>What we want to do is using this revision number also as revision in our Assembly version. So we need to implement a custom build task that is able to extract the revision number from the buildnumber so that we can assign it to the Assemblys&#8217; revision number. At the end of this article, I will post the sources you will need.</p>
<p>Right after the import statement from above, register this custom build task by adding the following line: </p>
<div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New">
<p style="MARGIN: 0px"><span style="COLOR: blue">&lt;</span><span style="COLOR: #a31515">UsingTask</span><span style="COLOR: blue"> </span><span style="COLOR: red">TaskName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">ExtractRevision.ExtractRevisionTask</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">AssemblyFile</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">ExtractRevision.dll</span>&#8220;<span style="COLOR: blue">/&gt;</span> </p>
</div>
<h3> 4. Add a property group for setting the assembly information</h3>
<p>To configure all assembly properties and format the number formats respectively, add the following lines to your project file:</p>
<div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New">
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;</span><span style="COLOR: #a31515">PropertyGroup</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green"> Assembly version properties. Add others here </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyMajorVersion</span><span style="COLOR: blue">&gt;</span>4<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyMajorVersion</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyMinorVersion</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyMinorVersion</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyBuildNumber</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyBuildNumber</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyRevision</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyRevision</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileMajorVersion</span><span style="COLOR: blue">&gt;</span>4<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileMajorVersion</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileMinorVersion</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileMinorVersion</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileBuildNumber</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileBuildNumber</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileRevision</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileRevision</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyBuildNumberType</span><span style="COLOR: blue">&gt;</span>DateString<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyBuildNumberType</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyBuildNumberFormat</span><span style="COLOR: blue">&gt;</span>MMdd<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyBuildNumberFormat</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyRevisionType</span><span style="COLOR: blue">&gt;</span>NoIncrement<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyRevisionType</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyRevisionFormat</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyRevisionFormat</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileBuildNumberType</span><span style="COLOR: blue">&gt;</span>DateString<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileBuildNumberType</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileBuildNumberFormat</span><span style="COLOR: blue">&gt;</span>MMdd<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileBuildNumberFormat</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileRevisionType</span><span style="COLOR: blue">&gt;</span>NoIncrement<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileRevisionType</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyFileRevisionFormat</span><span style="COLOR: blue">&gt;</span>0<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyFileRevisionFormat</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green"> Dump the TFS BuildNumber to the Assembly Comment Prop </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyDescription</span><span style="COLOR: blue">&gt;</span>$(BuildNumber)<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyDescription</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green"> TF.exe </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">TF</span><span style="COLOR: blue">&gt;</span><span style="COLOR: red">&amp;quot;</span>$(TeamBuildRefPath)\..\tf.exe<span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">TF</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green"> AssemblyInfo file </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">AssemblyInfoSpec</span><span style="COLOR: blue">&gt;</span>AssemblyInfo.*<span style="COLOR: blue">&lt;/</span><span style="COLOR: #a31515">AssemblyInfoSpec</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;/</span><span style="COLOR: #a31515">PropertyGroup</span><span style="COLOR: blue">&gt;</span> </p>
</div>
<h3>5. Set the revision number</h3>
<p>By altering the target CheckSettingsForEndToEndIteration, you can use the custom build task you have yet to implement for extracting the revision number from the buildnumber and add it to the assembly version:</p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;!&#8211;</span><span style="COLOR: green"> Use the ExtractRevionTask to get the RevionNumber out of the BuildNumber. </span></p>
<p style="MARGIN: 0px"><span style="COLOR: green">       Update the AssemblyInfoTask Properties with the result BuildRevision. </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue"> </span><span style="COLOR: red">Name</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">CheckSettingsForEndToEndIteration</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green">for 2008 use the GetBuildProperties Task to get the BuildNumber </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">GetBuildProperties</span><span style="COLOR: blue"> </span><span style="COLOR: red">TeamFoundationServerUrl</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(TeamFoundationServerUrl)</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">BuildUri</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(BuildUri)</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">      &lt;</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue"> </span><span style="COLOR: red">TaskParameter</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">BuildNumber</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">PropertyName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">BuildNumber</span>&#8220;<span style="COLOR: blue">&gt;&lt;/</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;/</span><span style="COLOR: #a31515">GetBuildProperties</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green">  extract the BuildRevision </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">ExtractRevisionTask</span><span style="COLOR: blue"> </span><span style="COLOR: red">BuildNumber</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(BuildNumber)</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">      &lt;</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue"> </span><span style="COLOR: red">TaskParameter</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">BuildRevision</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">PropertyName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">BuildRevision</span>&#8220;<span style="COLOR: blue"> /&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;/</span><span style="COLOR: #a31515">ExtractRevisionTask</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green">  update the AssemblyInfo Props </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">CreateProperty</span><span style="COLOR: blue"> </span><span style="COLOR: red">Value</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(BuildRevision)</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">      &lt;</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue"> </span><span style="COLOR: red">TaskParameter</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">Value</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">PropertyName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">AssemblyRevision</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;/</span><span style="COLOR: #a31515">CreateProperty</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">CreateProperty</span><span style="COLOR: blue"> </span><span style="COLOR: red">Value</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(BuildRevision)</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">      &lt;</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue"> </span><span style="COLOR: red">TaskParameter</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">Value</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">PropertyName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">AssemblyFileRevision</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;/</span><span style="COLOR: #a31515">CreateProperty</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green">  just needed if you populate the AssemblyDescription  too like in the sample  </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">CreateProperty</span><span style="COLOR: blue"> </span><span style="COLOR: red">Value</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(BuildNumber)</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">      &lt;</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue"> </span><span style="COLOR: red">TaskParameter</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">Value</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">PropertyName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">AssemblyDescription</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;/</span><span style="COLOR: #a31515">CreateProperty</span><span style="COLOR: blue">&gt;</span></p>
<h3 style="MARGIN: 0px"><span style="COLOR: blue">  &lt;/</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue">&gt;</span></h3>
<p><!--EndFragment--></p>
<h3>6. Check out and back in all AssemblyInfo.[cs|vb] files from your workspaces</h3>
<p>Before you can alter the AssemblyInfo files, you need to let Team Build check them out:</p>
<div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New">
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;!&#8211;</span><span style="COLOR: green"> Use TF to check-out/In the assemblyinfo files to persist updated Version Info </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue"> </span><span style="COLOR: red">Name</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">AfterGet</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">Condition</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">&#8216;$(IsDesktopBuild)&#8217;!=&#8217;true&#8217;</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;!&#8211;</span><span style="COLOR: green"> Set the AssemblyInfoFiles items dynamically </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">CreateItem</span><span style="COLOR: blue"> </span><span style="COLOR: red">Include</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(SolutionRoot)\**\$(AssemblyInfoSpec)</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">      &lt;</span><span style="COLOR: #a31515">Output</span><span style="COLOR: blue"> </span><span style="COLOR: red">ItemName</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">AssemblyInfoFiles</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">TaskParameter</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">Include</span>&#8220;<span style="COLOR: blue"> /&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;/</span><span style="COLOR: #a31515">CreateItem</span><span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">Message</span><span style="COLOR: blue"> </span><span style="COLOR: red">Text</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">These AssemblyInfo.* files were found:</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">Message</span><span style="COLOR: blue"> </span><span style="COLOR: red">Text</span><span style="COLOR: blue"> =</span>&#8220;<span style="COLOR: blue">@(AssemblyInfoFiles)</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">Exec</span><span style="COLOR: blue"> </span><span style="COLOR: red">WorkingDirectory</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(SolutionRoot)</span>&#8220;</p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    </span><span style="COLOR: red">Command</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(TF) checkout </span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">@(AssemblyInfoFiles, &#8216;</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue"> </span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">&#8216;)</span><span style="COLOR: red">&amp;quot;</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;/</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue">&gt;</span></p>
</div>
<p><!--EndFragment--></p>
<p> Right after the altered files have been compiled, you can check them back in:</p>
<div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New">
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue"> </span><span style="COLOR: red">Name</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">AfterCompile</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">Condition</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">&#8216;$(IsDesktopBuild)&#8217;!=&#8217;true&#8217;</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">Exec</span><span style="COLOR: blue"> </span><span style="COLOR: red">WorkingDirectory</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(SolutionRoot)</span>&#8220;</p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    </span><span style="COLOR: red">Command</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(TF) checkin /comment:</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">Auto-Build: Version Update</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue"> /noprompt /override:</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">Auto-Build: Version Update</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue"> </span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">@(AssemblyInfoFiles, &#8216;</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue"> </span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">&#8216;)</span><span style="COLOR: red">&amp;quot;</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;/</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue">&gt;</span><span style="color: #008080;"> </span></p>
</div>
<p>Just in case anything bad happens, there is a way of undoing the changes:</p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;!&#8211;</span><span style="COLOR: green"> In case of Build failure, the AfterCompile target is not executed. Undo the changes </span><span style="COLOR: blue">&#8211;&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue"> </span><span style="COLOR: red">Name</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">BeforeOnBuildBreak</span>&#8220;<span style="COLOR: blue"> </span><span style="COLOR: red">Condition</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">&#8216;$(IsDesktopBuild)&#8217;!=&#8217;true&#8217;</span>&#8220;<span style="COLOR: blue">&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    &lt;</span><span style="COLOR: #a31515">Exec</span><span style="COLOR: blue"> </span><span style="COLOR: red">WorkingDirectory</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(SolutionRoot)</span>&#8220;</p>
<p style="MARGIN: 0px"><span style="COLOR: blue">    </span><span style="COLOR: red">Command</span><span style="COLOR: blue">=</span>&#8220;<span style="COLOR: blue">$(TF) undo /noprompt </span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">@(AssemblyInfoFiles, &#8216;</span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue"> </span><span style="COLOR: red">&amp;quot;</span><span style="COLOR: blue">&#8216;)</span><span style="COLOR: red">&amp;quot;</span>&#8220;<span style="COLOR: blue">/&gt;</span></p>
<p style="MARGIN: 0px"><span style="COLOR: blue">  &lt;/</span><span style="COLOR: #a31515">Target</span><span style="COLOR: blue">&gt;</span></p>
<h3><!--EndFragment--> 7. Implement the ExtractRevision custom build task</h3>
<p>Simply create a new C# library project with the following class (and add a strong name to it by signing it in the project properties):</p>
<div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New">
<p style="MARGIN: 0px"><span style="COLOR: blue">namespace</span> ExtractRevision</p>
<p style="MARGIN: 0px">{</p>
<p style="MARGIN: 0px">    <span style="COLOR: blue">using</span> Microsoft.Build.Framework;</p>
<p style="MARGIN: 0px">    <span style="COLOR: blue">using</span> Microsoft.Build.Utilities;</p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px">    <span style="COLOR: blue">public</span> <span style="COLOR: blue">class</span> <span style="COLOR: #2b91af">ExtractRevisionTask</span> : <span style="COLOR: #2b91af">Task</span></p>
<p style="MARGIN: 0px">    {</p>
<p style="MARGIN: 0px">        <span style="COLOR: blue">public</span> <span style="COLOR: blue">override</span> <span style="COLOR: blue">bool</span> Execute()</p>
<p style="MARGIN: 0px">        {</p>
<p style="MARGIN: 0px">            <span style="COLOR: blue">int</span> indexOfDot = buildNumber.LastIndexOf(<span style="COLOR: #a31515">&#8220;.&#8221;</span>);</p>
<p style="MARGIN: 0px">            <span style="COLOR: blue">if</span> (indexOfDot != -1 &amp; indexOfDot != buildNumber.Length &#8211; 1)</p>
<p style="MARGIN: 0px">            {</p>
<p style="MARGIN: 0px">                buildRevision = buildNumber.Substring(indexOfDot + 1, buildNumber.Length &#8211; (indexOfDot + 1));</p>
<p style="MARGIN: 0px">            }</p>
<p style="MARGIN: 0px">            <span style="COLOR: blue">else</span></p>
<p style="MARGIN: 0px">            {</p>
<p style="MARGIN: 0px">                <span style="COLOR: green">//there is no char following the dot or we can&#8217;t find a dot </span></p>
<p style="MARGIN: 0px">                buildRevision = <span style="COLOR: #a31515">&#8220;0&#8243;</span>;</p>
<p style="MARGIN: 0px">            }</p>
<p style="MARGIN: 0px">            <span style="COLOR: blue">return</span> <span style="COLOR: blue">true</span>;</p>
<p style="MARGIN: 0px">        }</p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px">        <span style="COLOR: blue">private</span> <span style="COLOR: blue">string</span> buildRevision;</p>
<p style="MARGIN: 0px">        <span style="COLOR: blue">private</span> <span style="COLOR: blue">string</span> buildNumber;</p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px">        <span style="COLOR: blue">public</span> <span style="COLOR: blue">string</span> BuildNumber</p>
<p style="MARGIN: 0px">        {</p>
<p style="MARGIN: 0px">            <span style="COLOR: blue">set</span> { buildNumber = <span style="COLOR: blue">value</span>; }</p>
<p style="MARGIN: 0px">        }</p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px">        [<span style="COLOR: #2b91af">Output</span>]</p>
<p style="MARGIN: 0px">        <span style="COLOR: blue">public</span> <span style="COLOR: blue">string</span> BuildRevision</p>
<p style="MARGIN: 0px">        {</p>
<p style="MARGIN: 0px">            <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> buildRevision; }</p>
<p style="MARGIN: 0px">        }</p>
<p style="MARGIN: 0px">    }</p>
<p style="MARGIN: 0px">}</p>
<p style="MARGIN: 0px"> </p>
<p style="MARGIN: 0px">You need to check in the .dll file directly into your TeamBuildTypes folder on TFS.</p>
</div>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trimagination.info/2009/01/28/how-to-let-team-build-automatically-increment-the-assemblys-version-information/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Automatically generate release notes textfile from Team Foundation Build</title>
		<link>http://www.trimagination.info/2009/01/23/automatically-generate-release-notes-textfile-from-team-foundation-build/</link>
		<comments>http://www.trimagination.info/2009/01/23/automatically-generate-release-notes-textfile-from-team-foundation-build/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 12:22:04 +0000</pubDate>
		<dc:creator>cjacob</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.trimagination.info/?p=161</guid>
		<description><![CDATA[I recently found out about a blog entry written by Grant Holliday, that describes how to extend an MS Build process within an automated Team Foundation Build so that a release notes textfile is generated and copied to the drop location.
This basically goes something like this:

Download and install the MS Build Community Tasks from tigris
Download [...]]]></description>
			<content:encoded><![CDATA[<p>I recently found out about a <a href="http://ozgrant.com/2008/02/19/building-a-release-notes-text-file-with-team-build/" target="_blank">blog entry</a> written by Grant Holliday, that describes how to extend an MS Build process within an automated Team Foundation Build so that a release notes textfile is generated and copied to the drop location.</p>
<p>This basically goes something like this:</p>
<ol>
<li>Download and install the <a href="http://msbuildtasks.tigris.org/" target="_blank">MS Build Community Tasks from tigris</a></li>
<li>Download and install the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2FB55371-C94E-4373-B0E9-DB4816552E41&amp;displaylang=en" target="_blank">MSXSL.exe tool from Microsoft</a></li>
<li>Extend the build.proj file</li>
</ol>
<p>This process involves the WebDownload build tasks that retrieves the buildlog.xml file from the respective TFS webservice after the build is done. Nex step is transforming the xml file to generate a releasenotes.txt file.</p>
<p>Everything you need to know to get things done is very well documented on Hollidays blog.</p>
<p>However, there are two things to notice: First, you need to download the Community Tasks msi file directly from tigris. The link, Holliday provides, leads to an outdated version that does not include the UseDefaultCredentials property. The result ist, that the process will terminate with a 401 error due to missing authorization.</p>
<p>Second, Holliday does not provide an example xsl file for transformation of the xml file.</p>
<p>To achieve the same result as Holliday does (and shows on the blurry screenshot), you can try using the following xsl file: <a href="http://www.trimagination.info/wp-content/uploads/2009/01/releasenotes1.xsl">ReleaseNotes.xsl</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trimagination.info/2009/01/23/automatically-generate-release-notes-textfile-from-team-foundation-build/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Team Foundation Server Branching Guide 2.0</title>
		<link>http://www.trimagination.info/2009/01/05/team-foundation-server-branching-guide-20/</link>
		<comments>http://www.trimagination.info/2009/01/05/team-foundation-server-branching-guide-20/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 21:18:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.trimagination.info/?p=143</guid>
		<description><![CDATA[The TFS Rangers recently releases a revised version of their popular Branching Guide. The new version contains several pdf files with information about branching in Team Foundation Server 2008 and different scenarious as well as a Q&#38;A, a poster, branching drawins and a couple of examples with hands on labs.
Learn everything about it here: TFS Branching [...]]]></description>
			<content:encoded><![CDATA[<p>The TFS Rangers recently releases a revised version of their popular Branching Guide. The new version contains several pdf files with information about branching in Team Foundation Server 2008 and different scenarious as well as a Q&amp;A, a poster, branching drawins and a couple of examples with hands on labs.</p>
<p>Learn everything about it here: <a href="http://www.codeplex.com/TFSBranchingGuideII">TFS Branching Guide 2.0 &#8211; Home </a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trimagination.info/2009/01/05/team-foundation-server-branching-guide-20/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008 Database Edition for free</title>
		<link>http://www.trimagination.info/2008/10/02/visual-studio-2008-database-edition-for-free/</link>
		<comments>http://www.trimagination.info/2008/10/02/visual-studio-2008-database-edition-for-free/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 20:17:46 +0000</pubDate>
		<dc:creator>cjacob</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio Database Edition]]></category>

		<guid isPermaLink="false">http://www.trimagination.info/2008/10/02/visual-studio-2008-database-edition-for-free/</guid>
		<description><![CDATA[Nunja. Natürlich nicht ganz kostenlos.
Aber während Besitzer der Team Development Edition sich bisher darüber ärgerten, dass sie nicht in den Genuß der Database Edition kamen ohne dafür noch einmal eine ordentliche Stange Geld hinlegen zu müssen, hat sich Microsoft jetzt dazu entschlossen, für die Besitzer der beiden Editionen die jeweils andere Edition kostenfrei zur Verfügung [...]]]></description>
			<content:encoded><![CDATA[<p>Nunja. Natürlich nicht ganz kostenlos.</p>
<p>Aber während Besitzer der Team Development Edition sich bisher darüber ärgerten, dass sie nicht in den Genuß der Database Edition kamen ohne dafür noch einmal eine ordentliche Stange Geld hinlegen zu müssen, hat sich Microsoft jetzt dazu entschlossen, für die Besitzer der beiden Editionen die jeweils andere Edition kostenfrei zur Verfügung zu stellen.</p>
<p>Ein besonderer Vorteil ergibt sich hierdurch für alle Microsoft Certified Partner, die über die ISV Kompetenz verfügen. Die durften bisher nämlich eine Instanz des Team Foundation Server nebst fünf Lizenzen der Team Developer Edition kostenfrei einsetzen; Gold Partner sogar 25 (<a target="_blank" href="https://partner.microsoft.com/germany/program/competencies/isvsolutions/40011919">link</a>). Jetzt dürfen sie aus dem Subscriber Portal von Microsoft auch endlich die Database Edition herunterladen.</p>
<p>Hintergrund ist übrigens, dass die Developer Edition und die Database Edition mit Visual Studio 2010 miteinander verschmelzen und Microsoft diesen Vorteil bereits jetzt zum Endkunden durchreichen will.</p>
<blockquote><p><strong>Better Together – Visual Studio Team System Development Edition and Database Edition</strong>      <br />In recognition of the increased need to integrate more of the lifecycle members together, we will provide a unified Development and Database product in Visual Studio Team System 2010. Beginning October 1, 2008 Development Edition and Database Edition MSDN subscribers will have access to both products. (<a target="_blank" href="http://msdn.microsoft.com/de-de/vs2008/products/cc948977(en-us).aspx">link</a>)</p>
</blockquote>
<p>Was bekommen sie dadurch?</p>
<ul>
<li>Datenbankprojekttyp mit Skripten zum Erstellen von Datenbanken und Aktualisierung vorhandener Instanzen </li>
<li>Komponententests auf Datenbankebene </li>
<li>Automatische Generierung von Testdaten zum Füllen einer Datenbank ohne die Notwendigkeit einer Produktionsumgebung </li>
<li>Automatische Aktualisierung von Referenzen bei umbenannten Datenbankobjekten </li>
<li>Funktionen zum Vergleich von Schemata und Daten </li>
</ul>
<ul>Das ist noch weit nicht alles (<a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=73ba5038-8e37-4c8e-812b-db14ede2c354&amp;displaylang=en">link</a>), macht aber schon einmal den Mund wässrig…</ul>
<h3>Nachtrag:</h3>
<p><a target="_blank" href="http://www.vitalygorn.com/blog/post/2008/01/Handling-Database-easily-with-Visual-Studio-2008.aspx">Hier</a> gibt es einen sehr schönen Beitrag, der die Features der Database Edition mit einigen Bildern und Erläuterungen zeigt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trimagination.info/2008/10/02/visual-studio-2008-database-edition-for-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
