<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Sayed Ibrahim Hashimi - MSBuild, C#, Visual Studio, Training, and more</title>
  <link rel="alternate" type="text/html" href="http://sedodream.com/" />
  <link rel="self" href="http://sedodream.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2010-03-10T22:04:47.754-08:00</updated>
  <author>
    <name>Sayed Ibrahim Hashimi</name>
  </author>
  <subtitle>MSBuild, C#, Visual Studio and more</subtitle>
  <id>http://sedodream.com/</id>
  <generator uri="http://dasblog.info/" version="2.3.9074.18820">DasBlog</generator>
  <entry>
    <title>Web Deployment Tool (MSDeploy) Custom Provider Take 1</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/03/11/WebDeploymentToolMSDeployCustomProviderTake1.aspx" />
    <id>http://sedodream.com/PermaLink,guid,bd37422c-41b7-450d-ada5-122251483b53.aspx</id>
    <published>2010-03-10T22:04:47.754-08:00</published>
    <updated>2010-03-10T22:04:47.754-08:00</updated>
    <category term="Custom Provider" label="Custom Provider" scheme="http://sedodream.com/CategoryView,category,CustomProvider.aspx" />
    <category term="MSDeploy" label="MSDeploy" scheme="http://sedodream.com/CategoryView,category,MSDeploy.aspx" />
    <category term="Web Deployment Tool" label="Web Deployment Tool" scheme="http://sedodream.com/CategoryView,category,WebDeploymentTool.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>Disclaimer: Take what you read here with a grain of salt, I’m not an expert at
providers … yet :)</em>
        </p>
        <p>
I’ve known for quite a while that the <a href="http://www.iis.net/expand/webdeploy">Web
Deployment Tool</a> supports custom providers but I’ve never really looked at what
it took to get actually write one. Tonight I wanted to write a simple provider to
just sync a file from one place to another, just to see what is involved in creating
that provider. In this post I describe how I created the provider. First you have
to have the <a href="http://www.iis.net/expand/webdeploy">Web Deployment Tool</a> installed,
I’ve got the RTM version installed, but recently they delivered <a href="http://blogs.iis.net/msdeploy/archive/2010/02/04/web-deploy-1-1-has-shipped.aspx">version
1.1</a> either should work. First things first, you need to create a class library
project in Visual Studio. For this example I used Visual Studio 2010 RC for the reason
that it’s the only version of Visual Studio that I have installed on this machine.
If you are using Visual Studio 2010 make sure that you specify to build for .NET 3.5
because MSDeploy won’t pickup any providers written in .NET 4.0. To specify that your
project should build for .NET 3.5 go to Project-&gt;Properties then on the Application
tab pick the Target Framework to be .NET 3.5. See the image below for clarification.
</p>
        <p>
          <a href="http://sedodream.com/content/binary/WindowsLiveWriter/WebDeploymentToolMSDeployCustomProviderT_328/targetframework-.net35_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="targetframework-.net35" border="0" alt="targetframework-.net35" src="http://sedodream.com/content/binary/WindowsLiveWriter/WebDeploymentToolMSDeployCustomProviderT_328/targetframework-.net35_thumb.png" width="794" height="280" />
          </a>
        </p>
        <p>
You will need to reference the two assemblies Microsoft.Web.Deployment.dll and Microsoft.Web.Delegation.dll.
You can find both in the <strong><em>%Program Files%\IIS\Microsoft Web Deploy </em></strong>folder.
</p>
        <p>
After this you need to create the class which is the provider. I called my CustomFileProvider
because it will only sync a single file. The class should extend the <a href="http://msdn.microsoft.com/en-us/library/dd543130.aspx">DeploymentObjectProvider</a> class.
There are a couple abstract items that you must implement those are.
</p>
        <p>
          <strong>
            <u>CreateKeyAttributeData</u>
          </strong>
        </p>
        <p>
From what I can see this method is used to indicate how the “key attribute” is used.
For instance when you use a contentPath provider you would use a statement like <em>msdeploy
–verb:sync –source:contentPath=C:\one\pathToSync –dest:…</em> So we can see that the
value C:\one\pathToSync is passed to the provider without a name. This is the key
attribute value. This method for my provider looks like the following.
</p>
        <pre class="brush: csharp;">public override DeploymentObjectAttributeData CreateKeyAttributeData()
{
    DeploymentObjectAttributeData attributeData = new DeploymentObjectAttributeData(
        CustomFileProvider.KeyAttributeName,
        this.FilePath,
        DeploymentObjectAttributeKind.CaseInsensitiveCompare);

    return attributeData;
}</pre>
        <p>
In this case CustomFileProvider.KeyAttributeName is a const whose value is <em>path</em> and
its value is provided from the FilePath property. The other item that you have to
override is the Name property.
</p>
        <p>
          <strong>
            <u>Name</u>
          </strong>
        </p>
        <p>
This property returns the name of the provider. In all the samples that I have seen
(which is <a href="http://blogs.iis.net/kateroh/archive/2009/06/19/msdeploy-custom-provider-to-execute-batch-files.aspx">not</a><a href="http://blogs.iis.net/msdeploy/archive/2010/02/04/writing-extensible-providers-for-webdeploy-v1-rtm.aspx">very</a><a href="http://blogs.iis.net/msdeploy/archive/2009/03/30/msdeploy-sample-custom-provider-to-sync-mysql-databases-dbfullmysql.aspx">much</a>)
this name always agrees with the name of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentproviderfactory.aspx">custom
provider factory</a>, more on that in a bit. So in their example I had mine return
the value customFile which my factory also returns.
</p>
        <p>
Outside of these two items there are some other methods that you need to know about
those are covered below.
</p>
        <p>
          <strong>
            <u>GetAttributes</u>
          </strong>
        </p>
        <p>
The <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentobjectprovider.getattributes.aspx">GetAttributes</a> method
is kinda interesting. This method will be called on both the source and destination
and you need to understand which context its being called in and act accordingly.
You can determine if you are executing on the source or dest by using the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentobjectprovider.basecontext.aspx">BaseContext</a>.<a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentbasecontext.isdestinationobject.aspx">IsDestinationObject</a> property.
So for this provider if you are in the source you want to ensure that the file specified
exists, if not then raise a <a href="DeploymentFatalException">DeploymentFatalExcepton</a>,
this will stop the sync. If you are on the destination you could perform some checks
to see if the file is up-to-date or not. For a simple provider you can force a sync
to occur. You would do this by raising a <a href="http://msdn.microsoft.com/en-us/library/system.deployment.application.deploymentexception.aspx">DeploymentException</a>.
When you raise this exception at this time it causes the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentobjectprovider.add.aspx">Add</a> method
to be called, which is exactly what we want. Here is my version of the GetAttributes
method.
</p>
        <pre class="brush: csharp;">public override void GetAttributes(DeploymentAddAttributeContext addContext)
{
    if (this.BaseContext.IsDestinationObject)
    {
        // if we are on the destination and the file doesn't exist then we need to throw an exception
        // to ensure that the file gets synced. This happens because the Add command will be called for us.

        // Since I'm throwing an exception here Add will always be called, we could check to see if this file
        // was up-to-date and if so then skip this exception.
        throw new DeploymentException();
    }
    else
    {
        // We are acting on the source object here, make sure that the file exists on disk
        if (!File.Exists(this.FilePath))
        {
            string message = string.Format("File &lt;{0}&gt; does not exist",this.FilePath);
            throw new DeploymentFatalException(message);
        }
    }

    base.GetAttributes(addContext);
}</pre>
        <p>
For the most part the only thing left for this simple provider to implement is to
override the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentobjectprovider.add.aspx">Add</a> method.
First I will show the method then discuss its content. Here is the method.
</p>
        <pre class="brush: csharp;">public override void Add(DeploymentObject source, bool whatIf)
{
    // This is called on the Destination so this.FilePath is the dest path not source path
    if (!whatIf &amp;&amp; File.Exists(source.ProviderContext.Path))
    {
        // We can let MSDeploy do the actual sync for us using existig provider
        DeploymentProviderOptions sourceProviderOptions = new DeploymentProviderOptions(DeploymentWellKnownProvider.FilePath);
        sourceProviderOptions.Path = source.ProviderContext.Path;

        using (DeploymentObject sourceObject = DeploymentManager.CreateObject(sourceProviderOptions, new DeploymentBaseOptions()))
        {
            DeploymentProviderOptions destProviderOptions = new DeploymentProviderOptions(DeploymentWellKnownProvider.FilePath);
            destProviderOptions.Path = this.FilePath;

            // Make the call to perform an actual sync
            sourceObject.SyncTo(destProviderOptions, new DeploymentBaseOptions(), new DeploymentSyncOptions());
        }
    }
}</pre>
        <p>
First I check to make sure that we are not doing a whatif run (i.e. a run where we
don’t want to physically perform the action) and that the source file exists. Take
note of the fact that I’m explicitly using <strong>source.ProviderContext.Path</strong> to
get the source path. This provider has a property, FilePath, which contains the path
but it could be either source path or dest path depending on which end you are executing
in. the source.ProviderContent.Path will always point to the source value. After that
you can see that I’m actually leveraging an existing provider the <a href="http://technet.microsoft.com/en-us/library/ee207414%28WS.10%29.aspx">FilePath
provider</a> to do the actual sync for me. So all the dirty work is his job! If you
are writing a provider make sure to re-use any existing providers that you can, because
the code for this part looks like it can get nasty. I’ll leave that for another post.
</p>
        <p>
After I prepare the source options I create an instance of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentobject.aspx">DeploymentObject</a> class,
prepare the FilePath provider and call <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentobject.syncto.aspx">SyncTo</a> on
the object., this is where the physical sync occurs. That is basically it for the
provider itself now we need to create a provider factory class which is the guy who
knows how to create our providers for us.
</p>
        <p>
Fortunately creating custom provider factories is even easier then creating custom
providers themselves. I called mine CustomFileProviderFactory and the entire class
is shown below.
</p>
        <pre class="brush: csharp;">[DeploymentProviderFactory]
public class CustomFileProviderFactory : DeploymentProviderFactory
{
    protected override DeploymentObjectProvider Create(DeploymentProviderContext providerContext, DeploymentBaseContext baseContext)
    {
        return new CustomFileProvider(providerContext, baseContext);
    }

    public override string Description
    {
        get { return @"Custom provider to copy a file"; }
    }

    public override string ExamplePath
    {
        get { return @"c:\somefile.txt"; }
    }

    public override string FriendlyName
    {
        get { return "customFile"; }
    }
    public override string Name
    {
        get { return "customFile"; }
    }
}</pre>
        <p>
A few things to make note of; your class should extend the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentproviderfactory.aspx">DeploymentProviderFactory</a> class
and it should have the <a href="http://msdn.microsoft.com/en-us/library/microsoft.web.deployment.deploymentproviderfactoryattribute.aspx">DeploymentProviderFactory</a> attribute
attached to it. Besides that there are two properties FriendlyName and Name, once
again in all the samples I have seen they are always the same and always equal to
the Name property on the provider itself. I followed suit and copied them. I’m still
trying to figure out more about what each of these actually do, but for now I’m OK
with leaving them to be the same. So that is basically it.
</p>
        <p>
In order to have MSDeploy use the provider you have to create a folder named Extensibility
under the <strong><em>%Program Files%\IIS\Microsoft Web Deploy</em></strong> folder
if it doesn’t exist, and then copy the assembly into that folder. And then you are
good to go. Here is the snippet showing my custom provider in action!
</p>
        <pre class="brush: plain;">C:\temp\MSDeploy&gt;msdeploy -verb:sync -source:customFile=C:\temp\MSDeploy\Source\source.txt -dest:customFile=C:\temp
\MSDeploy\Dest\one.txt -verbose
Verbose: Performing synchronization pass #1.
Info: Adding MSDeploy.customFile (MSDeploy.customFile).
Info: Adding customFile (C:\temp\MSDeploy\Dest\one.txt).
Verbose: The dependency check 'DependencyCheckInUse' found no issues.
Verbose: The synchronization completed in 1 pass(es).
Total changes: 2 (2 added, 0 deleted, 0 updated, 0 parameters changed, 0 bytes copied)</pre>
        <p>
This was a pretty basic provider, but you have to start somewhere. I will post more
about custom providers as I find out more.
</p>
        <p>
          <font size="3">You can download the entire source at </font>
          <a title="http://sedotech.com/Resources#CustomProviders" href="http://sedotech.com/Resources#CustomProviders">
            <font size="3">http://sedotech.com/Resources#CustomProviders</font>
          </a>
          <font size="3"> under
the Custom Providers heading of the </font>
          <a href="http://sedotech.com/Resources#MSDeploy">
            <font size="3">MSDeploy</font>
          </a>
          <font size="3"> section.</font>
        </p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=bd37422c-41b7-450d-ada5-122251483b53" />
      </div>
    </content>
  </entry>
  <entry>
    <title>MSBuild 4.0 Reserved Properties</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/03/11/MSBuild40ReservedProperties.aspx" />
    <id>http://sedodream.com/PermaLink,guid,6d42739d-227e-472c-a94a-60a7875ea6cb.aspx</id>
    <published>2010-03-10T16:53:51.522-08:00</published>
    <updated>2010-03-10T16:57:47.687-08:00</updated>
    <category term="MSBuild" label="MSBuild" scheme="http://sedodream.com/CategoryView,category,MSBuild.aspx" />
    <category term="MSBuild 4.0" label="MSBuild 4.0" scheme="http://sedodream.com/CategoryView,category,MSBuild40.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://sedodream.com/CategoryView,category,VisualStudio2010.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
A while back I wrote about <a href="http://sedodream.com/2008/06/09/MSBuildReservedProperties.aspx">Reserved
Properties in MSBuild 3.5</a>, now its time to update that post to include reserved
properties for MSBuild 4.0. There are a number of new properties here is the list:
</p>
        <p>
•    MSBuild 
<br />
•    MSBuildBinPath 
<br />
•    MSBuildExtensionsPath 
<br />
•    MSBuildExtensionsPath32 
<br />
•    MSBuildExtensionsPath64 
<br />
•    MSBuildLastTaskResult 
<br />
•    MSBuildNodeCount 
<br />
•    MSBuildOverrideTasksPath 
<br />
•    MSBuildProgramFiles32 
<br />
•    MSBuildProjectDefaultTargets 
<br />
•    MSBuildProjectDirectory 
<br />
•    MSBuildProjectDirectoryNoRoot 
<br />
•    MSBuildProjectExtension 
<br />
•    MSBuildProjectFile 
<br />
•    MSBuildProjectFullPath 
<br />
•    MSBuildProjectName 
<br />
•    MSBuildStartupDirectory 
<br />
•    MSBuildThisFile 
<br />
•    MSBuildThisFileDirectory 
<br />
•    MSBuildThisFileDirectoryNoRoot 
<br />
•    MSBuildThisFileExtension 
<br />
•    MSBuildThisFileFullPath 
<br />
•    MSBuildThisFileName 
<br />
•    MSBuildToolsPath 
<br />
•    MSBuildToolsVersion
</p>
        <p>
If you want to see what the values are you can execute this simple proj file that
I created.
</p>
        <pre class="brush: xml;">&lt;Project DefaultTargets="PrintValues" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;

  &lt;Target Name="PrintValues"&gt;
    &lt;Message Text="MSBuild: $(MSBuild)"/&gt;
    &lt;Message Text="MSBuildBinPath: $(MSBuildBinPath)"/&gt;
    &lt;Message Text="MSBuildExtensionsPath: $(MSBuildExtensionsPath)"/&gt;
    &lt;Message Text="MSBuildExtensionsPath32: $(MSBuildExtensionsPath32)"/&gt;
    &lt;Message Text="MSBuildExtensionsPath64: $(MSBuildExtensionsPath64)"/&gt;
    &lt;Message Text="MSBuildLastTaskResult: $(MSBuildLastTaskResult)"/&gt;
    &lt;Message Text="MSBuildNodeCount: $(MSBuildNodeCount)"/&gt;
    &lt;Message Text="MSBuildOverrideTasksPath: $(MSBuildOverrideTasksPath)"/&gt;
    &lt;Message Text="MSBuildProgramFiles32: $(MSBuildProgramFiles32)"/&gt;
    &lt;Message Text="MSBuildProjectDefaultTargets: $(MSBuildProjectDefaultTargets)"/&gt;
    &lt;Message Text="MSBuildProjectDirectory: $(MSBuildProjectDirectory)"/&gt;
    &lt;Message Text="MSBuildProjectDirectoryNoRoot: $(MSBuildProjectDirectoryNoRoot)"/&gt;
    &lt;Message Text="MSBuildProjectExtension: $(MSBuildProjectExtension)"/&gt;
    &lt;Message Text="MSBuildProjectFile: $(MSBuildProjectFile)"/&gt;
    &lt;Message Text="MSBuildProjectFullPath: $(MSBuildProjectFullPath)"/&gt;
    &lt;Message Text="MSBuildProjectName: $(MSBuildProjectName)"/&gt;
    &lt;Message Text="MSBuildStartupDirectory: $(MSBuildStartupDirectory)"/&gt;
    &lt;Message Text="MSBuildThisFile: $(MSBuildThisFile)"/&gt;
    &lt;Message Text="MSBuildThisFileDirectory: $(MSBuildThisFileDirectory)"/&gt;
    &lt;Message Text="MSBuildThisFileDirectoryNoRoot: $(MSBuildThisFileDirectoryNoRoot)"/&gt;
    &lt;Message Text="MSBuildThisFileExtension: $(MSBuildThisFileExtension)"/&gt;
    &lt;Message Text="MSBuildThisFileFullPath: $(MSBuildThisFileFullPath)"/&gt;
    &lt;Message Text="MSBuildThisFileName: $(MSBuildThisFileName)"/&gt;
    &lt;Message Text="MSBuildToolsPath: $(MSBuildToolsPath)"/&gt;
    &lt;Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)"/&gt;
  &lt;/Target&gt;

&lt;/Project&gt;</pre>
        <p>
For me the results are:
</p>
        <pre class="brush: plain;">Build started 3/10/2010 7:48:47 PM.
     1&gt;Project "C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj" on node 1 (default targets).
     1&gt;PrintValues:
         MSBuild:
         MSBuildBinPath: C:\Windows\Microsoft.NET\Framework\v2.0.50727
         MSBuildExtensionsPath: C:\Program Files (x86)\MSBuild
         MSBuildExtensionsPath32: C:\Program Files (x86)\MSBuild
         MSBuildExtensionsPath64: C:\Program Files\MSBuild
         MSBuildLastTaskResult: true
         MSBuildNodeCount: 8
         MSBuildOverrideTasksPath:
         MSBuildProgramFiles32: C:\Program Files (x86)
         MSBuildProjectDefaultTargets: PrintValues
         MSBuildProjectDirectory: C:\Data\Development\My Code\Community\MSBuild
         MSBuildProjectDirectoryNoRoot: Data\Development\My Code\Community\MSBuild
         MSBuildProjectExtension: .proj
         MSBuildProjectFile: ReservedProps02.proj
         MSBuildProjectFullPath: C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj
         MSBuildProjectName: ReservedProps02
         MSBuildStartupDirectory: C:\Data\Development\My Code\Community\MSBuild
         MSBuildThisFile: ReservedProps02.proj
         MSBuildThisFileDirectory: C:\Data\Development\My Code\Community\MSBuild\
         MSBuildThisFileDirectoryNoRoot: Data\Development\My Code\Community\MSBuild\
         MSBuildThisFileExtension: .proj
         MSBuildThisFileFullPath: C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj
         MSBuildThisFileName: ReservedProps02
         MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v2.0.50727
         MSBuildToolsVersion: 2.0
     1&gt;Done Building Project "C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj" (default targets
       ).
If you want to see the correct valus for MSBuildNodeCount make sure to use the /m switch when you invoke msbuild.exe.</pre>
I won’t go over these properties in detail here, because they are mostly obvious but
I would like to point out a couple really useful properties, those include. 
<p><strong><u>MSBuildThisFile 
<br />
MSBuildThisFileDirectory 
<br />
MSBuildThisFileDirectoryNoRoot</u></strong></p><p>
These properties can be used to locate the path to the file that you are currently
in. So if you have a shared .targets file and it will execute an .exe in the same
folder you can use the MSBuildThisFileDirectory property to resolve the full path
to that tool reliably. This has historically been difficult. See a recent question
on <a href="http://www.stackoverflow.com">Stackoverflow.com</a> about it at <a href="http://stackoverflow.com/questions/2418874/how-can-i-get-the-path-of-the-current-msbuild-file/2421596#2421596">How
can I get the path of the current msbuild file?</a> If you are not using MSBuild 4.0
and need to resolve the location to a .targets file then see that post for what you
will need to do.
</p><img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=6d42739d-227e-472c-a94a-60a7875ea6cb" /></div>
    </content>
  </entry>
  <entry>
    <title>Web Deployment Tool: Including other Files</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/03/10/WebDeploymentToolIncludingOtherFiles.aspx" />
    <id>http://sedodream.com/PermaLink,guid,317a6dbd-fdc6-4238-bda4-916e208fe702.aspx</id>
    <published>2010-03-09T21:26:14.733-08:00</published>
    <updated>2010-03-09T21:26:35.326-08:00</updated>
    <category term="Deployment" label="Deployment" scheme="http://sedodream.com/CategoryView,category,Deployment.aspx" />
    <category term="MSDeploy" label="MSDeploy" scheme="http://sedodream.com/CategoryView,category,MSDeploy.aspx" />
    <category term="Web Deployment Tool" label="Web Deployment Tool" scheme="http://sedodream.com/CategoryView,category,WebDeploymentTool.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just received a message from a reader asking about how he can extend the package
process in Visual Studio 2010 RC to include files that his web project doesn't contain
or reference. If you are not familiar with this Visual Studio 2010 has support for
creating Web Packages now. These packages can be used with the <a href="http://www.iis.net/expand/WebDeploy">Web
Deployment Tool</a> to simply deployments. The Web Deployment Tool is also known as
MSDeploy.
</p>
        <p>
He was actually asking about including external dependencies, but in this post I will
show how to include some text files which are already written to disk. To extend this
to use those dependencies should be pretty easy. Here is what I did: 
</p>
        <ol>
          <li>
Created a new ASP.NET MVC 2 Project (because he stated this is what he has) 
</li>
          <li>
Added a folder named Extra Files one folder above where the .csproj file is located
and put a few files there 
</li>
          <li>
In Visual Studio right clicked on the project selected “Unload Project” 
</li>
          <li>
In Visual Studio right clicked on the project selected “Edit project” 
</li>
        </ol>
        <p>
Then at the bottom of the project file (<em>right above the &lt;/Project&gt; statement</em>).
I inserted the following XML fragments.
</p>
        <pre class="brush: xml;">&lt;PropertyGroup&gt;
  &lt;CopyAllFilesToSingleFolderForPackageDependsOn&gt;
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  &lt;/CopyAllFilesToSingleFolderForPackageDependsOn&gt;
&lt;/PropertyGroup&gt;
&lt;Target Name="CustomCollectFiles"&gt;
  &lt;ItemGroup&gt;
    &lt;_CustomFiles Include="..\Extra Files\**\*"&gt;
      &lt;DestinationRelativePath&gt;%(RecursiveDir)%(Filename)%(Extension)&lt;/DestinationRelativePath&gt;
    &lt;/_CustomFiles&gt;

    &lt;FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)"&gt;
      &lt;DestinationRelativePath&gt;Extra Files\%(RecursiveDir)%(Filename)%(Extension)&lt;/DestinationRelativePath&gt;
    &lt;/FilesForPackagingFromProject&gt;
  &lt;/ItemGroup&gt;
&lt;/Target&gt;</pre>
        <p>
Here I do a few things. First I extend the <strong>CopyAllFilesToSingleFolderForPackage</strong> target
by extending its DependsOn property to include my target <strong>CustomCollectFiles</strong>.
This will inject my target at the right time into the Web Publishing Pipeline. Inside
that target I need to add my files into the <strong>FilesForPackagingFromProject</strong> item
group, but I must do so in a particular manner. Specifically I have to define the
relative path to where it should be written. This captured inside the DestinationRelativePath
metadata item. This is required because sometimes you may have a file which is named,
or in a different folder, than it was originally. After you do that you will see that
the web package that is created when you create a web package from Visual Studio (or
from the command line using msbuild.exe for that matter) contains your custom files.
</p>
        <p>
I just posted a blog about my upcoming talk discussing <a href="http://sedodream.com/2010/03/10/SpeakingOnAutomatingWebDeploymentsAndASPNETMVC.aspx">Web
Deployments and ASP.NET MVC</a>, once again check it out :)
</p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=317a6dbd-fdc6-4238-bda4-916e208fe702" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Speaking on Automating Web Deployments and ASP.NET MVC</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/03/10/SpeakingOnAutomatingWebDeploymentsAndASPNETMVC.aspx" />
    <id>http://sedodream.com/PermaLink,guid,b00f5c6b-40a2-4107-99f2-4db0b38bbd8d.aspx</id>
    <published>2010-03-09T19:29:22.911-08:00</published>
    <updated>2010-03-09T19:36:03.895-08:00</updated>
    <category term="MSDeploy" label="MSDeploy" scheme="http://sedodream.com/CategoryView,category,MSDeploy.aspx" />
    <category term="speaking" label="speaking" scheme="http://sedodream.com/CategoryView,category,speaking.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://sedodream.com/CategoryView,category,VisualStudio2010.aspx" />
    <category term="Web Deployment Tool" label="Web Deployment Tool" scheme="http://sedodream.com/CategoryView,category,WebDeploymentTool.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I will be speaking at the <a href="http://orlandocodecamp.com">Orlando Code Camp</a> on
Saturday March 27. I will be giving two session; one on <strong>Simplifying deployments
with MSDeploy and Visual Studio 2010</strong> and the other on <strong>ASP.NET MVC
View Helpers</strong>. By the way, the other name for MSDeploy is the Web Deployment
Tool.
</p>
        <p>
If you have ever had issues with deploying web applications (<em>which includes everyone
who has ever deployed a web app :) </em>) then you need to attend my session. I will
discuss the three major scenarios of deploying web applications:
</p>
        <ul>
          <li>
Deploying to a local IIS server</li>
          <li>
Deploying to an IIS server on the intranet</li>
          <li>
Deploying to a 3rd party host</li>
        </ul>
        <p>
I will be demonstrating how to perform 2 of the 3; deploying to local IIS server and
to a 3rd party host. Since I won’t have any other machines besides my notebook I will
not be demoing how to deploy to an IIS server on the intranet, but it is very similar
to the other 2 scenarios. There has been a lot of work in the area of web deployment
(<em>deployment in general actually</em>) recently which could really help spare you
of a lot of headache. I presented this at the <a href="http://www.fladotnet.com/codecamp/">South
Florida Code Camp</a> a couple weeks ago and a person actually stated in the session
“<strong>There are a lot of people who wish they were in here right now</strong>”!
If you are in the area then you should attend my session, you won’t regret it.
</p>
        <p>
Here is the abstract:
</p>
        <p>
          <em>Visual Studio 2010 will be shipped including integration with Microsoft’s Web
Deployment Tool, MSDeploy. For quite a while web deployments have been very difficult
to manage and automate. With MSDeploy you can manage the complexities of web deployments.
One of the great aspects of the Web Deployment Tool is that it is integrated into
Visual Studio with MSBuild tasks and targets. Since Team Foundation Build can leverage
MSBuild we can take advantage of those tasks and targets to automate web deployments
using Team Build.</em>
        </p>
        <p>
My other talk will be on creating leaner views with ASP.NET MVC View Helpers. If you
are using ASP.NET MVC then this is one of the sessions you’ll be interested in. I
will be getting in depth about ASP.NET View Helpers, and just talking ASP.NET MVC
in general. I gave this talk at the <a href="http://jaxdug.com/">Jacksonville Developers
User Group</a> last week and it was great. I’m very excited about these two talks,
I’m sure they will be great. Here is the abstract.
</p>
        <p>
If you have been using ASP.NETMVC then you certainly have been using some of the built
in view helper methods that are available, you know those expressions like Html.TextBox("textBoxName")
and Html.ValidationMessage("Required"). View helpers are nothing more than
extension methods which create HTML that is injected into your views based on the
method and its parameters. Creating your own view helpers is very simple and can be
extremely beneficial. By writing your own custom view helpers you will benefit in
at least the following ways 
</p>
        <ul>
          <li>
Simplifies Your Views 
</li>
          <li>
Eases Re-hydrating HTML Elements with ModelState Values 
</li>
          <li>
Standardizes the Creation of Common HTML Components 
</li>
          <li>
Helps you Implement the DRY (Don’t Repeat Yourself) Principal 
</li>
        </ul>
        <p>
I have published a 22 page paper discussing custom ASP.NET MVC view helpers along
with a sample app at <a title="http://mvcviewhelpers.codeplex.com/" href="http://mvcviewhelpers.codeplex.com/">http://mvcviewhelpers.codeplex.com/</a> if
you are interested.
</p>
        <p>
 
</p>
        <p>
If you are in the area this weekend its going to be a great event. I think there were
&gt;400 people there last year, so it should be a good turn out this year as well.
I hope to see you there.
</p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=b00f5c6b-40a2-4107-99f2-4db0b38bbd8d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>MSBuild 4.0: Property Functions Part 1</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/03/07/MSBuild40PropertyFunctionsPart1.aspx" />
    <id>http://sedodream.com/PermaLink,guid,7da42fd8-a0e0-4082-9526-9bc30b5ac558.aspx</id>
    <published>2010-03-06T16:35:29.934-08:00</published>
    <updated>2010-03-06T16:35:29.934-08:00</updated>
    <category term="MSBuild" label="MSBuild" scheme="http://sedodream.com/CategoryView,category,MSBuild.aspx" />
    <category term="MSBuild 4.0" label="MSBuild 4.0" scheme="http://sedodream.com/CategoryView,category,MSBuild40.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have previously blogged about some new features in MSBuild 4.0 at:
</p>
        <ul>
          <li>
            <a href="http://sedodream.com/2010/01/20/MSBuild40InlineTasks.aspx">MSBuild 4.0: Inline
Tasks Part 1</a>
          </li>
          <li>
            <a href="http://sedodream.com/2010/01/22/MSBuild40InlineTasksPart2.aspx">MSBuild 4.0:
Inline Tasks Part 2</a>
          </li>
        </ul>
        <p>
Besides inline tasks there are a set of other new features including <a href="http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx">Property
Functions</a>. In this post we will discuss property functions and how you might use
them in your build scripts. With property functions you can call an instance <a href="http://msdn.microsoft.com/en-us/library/system.string_methods%28v=VS.90%29.aspx">method
of the string object</a> on properties now.
</p>
        <p>
The syntax will be in the format <font color="#008000" face="Consolas"><strong>$(PropertyName.MethodName([<em>Parameters</em>]))</strong></font> when
you want to invoke a string method. <em><font color="#008000">Parameters</font></em> in
the previous expression is optional. For instance if you need to call the <a href="http://msdn.microsoft.com/en-us/library/system.string.trim%28v=VS.90%29.aspx">Trim</a> method
then you do not need to supply any arguments. Take a look at the snippet below to
get a better feel for how to use these new features.
</p>
        <pre class="brush: xml;">&lt;Project ToolsVersion="4.0" 
<br />
DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;
&lt;PropertyGroup&gt; &lt;SampleString&gt;This is a sample string&lt;/SampleString&gt;
&lt;SampleString2&gt; This is a sample string &lt;/SampleString2&gt; &lt;!-- Here
we now can call instance methods on the String class --&gt; &lt;Sub04&gt;$(SampleString.Substring(0,4))&lt;/Sub04&gt;
&lt;Contains01&gt;$(SampleString.Contains("This"))&lt;/Contains01&gt; &lt;Contains02&gt;$(SampleString.Contains("this"))&lt;/Contains02&gt;
&lt;CompareTo01&gt;$(SampleString.CompareTo($(SampleString)))&lt;/CompareTo01&gt;
&lt;EndsWith01&gt;$(SampleString.CompareTo("string"))&lt;/EndsWith01&gt;
&lt;Insert01&gt;$(SampleString.Insert(2,"INSERTED"))&lt;/Insert01&gt; &lt;Trim01&gt;$(SampleString2.Trim())&lt;/Trim01&gt;
&lt;/PropertyGroup&gt; &lt;Target Name="Demo"&gt; &lt;Message Text="SampleString:
$(SampleString)" Importance="high"/&gt; &lt;Message Text="Sub04:
$(Sub04)" Importance="high"/&gt; &lt;Message Text="Contains01:
$(Contains01)" Importance="high"/&gt; &lt;Message Text="Contains02:
$(Contains02)" Importance="high"/&gt; &lt;Message Text="CompareTo01:
$(CompareTo01)" Importance="high"/&gt; &lt;Message Text="EndsWith01:
$(EndsWith01)" Importance="high"/&gt; &lt;Message Text="Insert01:
$(Insert01)" Importance="high"/&gt; &lt;Message Text="Trim01:
$(Trim01)" Importance="high"/&gt; &lt;/Target&gt; &lt;/Project&gt;</pre>
        <p>
In this snippet I am calling various string methods on the properties defined. The
results of executing this are shown in the fragment below.
</p>
        <pre class="brush: plain;">Demo:
  SampleString: This is a sample string
  Sub04: This
  Contains01: True
  Contains02: False
  CompareTo01: 0
  EndsWith01: 1
  Insert01: ThINSERTEDis is a sample string
  Trim01: This is a sample string</pre>
        <p>
This is just one way that you can use property functions. We can also call a static
methods (<em>and properties</em>) on a known set of classes. See <a title="http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx" href="http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx">http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx</a> for
the list of complete classes that you can call static methods on. The syntax is as
follows<font color="#008000"><strong>$([Full-Class-Name]::Method(<em>Parameters</em>))</strong></font> or
if you are calling a property you just leave off the <strong><em><font color="#008000">(Parameters)</font></em></strong>.
To demonstrate this I have created the following file.
</p>
        <pre class="brush: xml;">&lt;Project 
    ToolsVersion="4.0" 
    DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;

  &lt;PropertyGroup&gt;
    &lt;!-- 
      Here we Now01 can call static methods/properties on many types 
      See http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx
      for the list of classes that we can call static methods/properties on.
    --&gt;
    &lt;Now01&gt;$([System.DateTime]::Now)&lt;/Now01&gt;
    &lt;Pow01&gt;$([System.Math]::Pow(2,3))&lt;/Pow01&gt;
    &lt;TempFile01&gt;$([System.IO.Path]::GetTempFileName())&lt;/TempFile01&gt;
  &lt;/PropertyGroup&gt;
  
  &lt;Target Name="Demo"&gt;
    &lt;Message Text="Now01: $(Now01)" Importance="high"/&gt;
    &lt;Message Text="Pow01: $(Pow01)" Importance="high"/&gt;
    &lt;Message Text="TempFile01: $(TempFile01)" Importance="high"/&gt;
  &lt;/Target&gt;

&lt;/Project&gt;</pre>
        <p>
And the result is:
</p>
        <pre class="brush: plain;">Demo:
  Now01: 3/6/2010 7:31:23 PM
  Pow01: 8
  TempFile01: C:\Users\Ibrahim\AppData\Local\Temp\tmp4C1.tmp</pre>
        <p>
Similar to this you can call a handful of <strong><em>MSBuild</em></strong> methods.
Those methods are documented at <a title="http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx" href="http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx">http://msdn.microsoft.com/en-us/library/dd633440%28VS.100%29.aspx</a>.
You would use a similar syntax to access those which is <strong><em><font color="#008000">$([MSBuild]::Method(Parameters))</font></em></strong>.
To show you those take a look at the follwing sample file.
</p>
        <pre class="brush: xml;">&lt;Project 
  ToolsVersion="4.0" 
  DefaultTargets="Demo" 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;

  &lt;PropertyGroup&gt;
    &lt;Add&gt;$([MSBuild]::Add(5,9))&lt;/Add&gt;
    &lt;Subtract01&gt;$([MSBuild]::Subtract(90,768))&lt;/Subtract01&gt;
    &lt;Mult01&gt;$([MSBuild]::Multiply(4,9))&lt;/Mult01&gt;
    &lt;Div01&gt;$([MSBuild]::Divide(100,5.2))&lt;/Div01&gt;
  &lt;/PropertyGroup&gt;
  
  &lt;Target Name="Demo"&gt;
    &lt;Message Text="Add: $(Add)" Importance="high"/&gt;
    &lt;Message Text="Subtract01: $(Subtract01)" Importance="high"/&gt;
    &lt;Message Text="Mult01: $(Mult01)" Importance="high"/&gt;
    &lt;Message Text="Div01: $(Div01)" Importance="high"/&gt;
  &lt;/Target&gt;

&lt;/Project&gt;</pre>
        <p>
I will leave it up to you to execute that file to see the result, but you can probably
figure it out :)
</p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=7da42fd8-a0e0-4082-9526-9bc30b5ac558" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Speaking at South Florida Code Camp</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/02/25/SpeakingAtSouthFloridaCodeCamp.aspx" />
    <id>http://sedodream.com/PermaLink,guid,c3029c1e-82cc-4221-92ac-270221595d54.aspx</id>
    <published>2010-02-24T20:01:47.359-08:00</published>
    <updated>2010-02-24T20:03:26.225-08:00</updated>
    <category term="MSBuild" label="MSBuild" scheme="http://sedodream.com/CategoryView,category,MSBuild.aspx" />
    <category term="speaking" label="speaking" scheme="http://sedodream.com/CategoryView,category,speaking.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This weekend I will be speaking at the <a href="http://www.fladotnet.com/codecamp/">South
Florida Code Camp</a>. This has historically been a very popular event (&gt;500 people)
with a lot of good speakers. 
</p>
        <p>
I will be presenting 2 topics there, the abstracts are below.
</p>
        <p>
          <strong>
            <u>
              <font size="4">MSBuild 4.0 What’s New</font>
            </u>
          </strong>
        </p>
        <p>
MSBuild, the Microsoft Build Engine, was first introduced with Visual Studio 2005.
This was MSBuild 2.0, and it was delivered along with the .NET Framework 2.0. The
next major release of MSBuild, version 3.5, was introduced for Visual Studio 2008
and was deployed with the .NET Framework 3.5. Now the third major version, 4.0, is
being introduced with Visual Studio 2010, and in concert with previous releases is
being shipped with the .NET Framework 4.0. In this session we will talk about the
new features included with MSBuild 4.0 and how it can make your MSBuild files better.
The topics we will talk about will include. 
<br />
•    Inline Tasks 
<br />
•    Property Functions 
<br />
•    Item Functions 
<br />
•    Before / After Targets 
<br />
•    Support for C++ projects (both native and managed) 
<br />
•    New Object Model
</p>
        <p>
          <a href="http://www.fladotnet.com/codecamp/SpeakerEditSession.aspx?SessionID=316">
          </a>
          <strong>
            <u>
              <font size="4">Simplifying
deployments with MSDeploy and Visual Studio 2010</font>
            </u>
          </strong>
        </p>
        <p>
In this session we will demonstrate how to greatly simplify deployments of web applications
using MSDeploy. MSDeploy is shipped with Visual Studio 2010 and is available as a
separate download. Visual Studio 2010 has enhances support for MSDeploy and we will
go over many of those details in this session. We will also be discussing how MSDeploy
can be used as a stand alone tool outside of Visual Studio 2010. So if you are not
able to upgrade to Visual Studio 2010 but developing web applications this is still
a great for you.
</p>
        <p>
If you are in the South Florida area this is definitely an event that you don’t want
to miss out. Please stop by and see me!
</p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=c3029c1e-82cc-4221-92ac-270221595d54" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual Studio 2010 RC and TFS 2010 RC Now Available</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/02/09/VisualStudio2010RCAndTFS2010RCNowAvailable.aspx" />
    <id>http://sedodream.com/PermaLink,guid,216f8d26-6a17-4b2e-8a63-6c31cad022f4.aspx</id>
    <published>2010-02-08T19:44:10.616-08:00</published>
    <updated>2010-02-08T19:44:10.616-08:00</updated>
    <category term="TFS 2010" label="TFS 2010" scheme="http://sedodream.com/CategoryView,category,TFS2010.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://sedodream.com/CategoryView,category,VisualStudio2010.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you are an MSDN subscriber you can now download Visual Studio 2010 Release Candidate
as well as the TFS 2010 Release Candidate. You can read Brian Hurry's <a href="http://blogs.msdn.com/bharry/archive/2010/02/08/vs-2010-net-4-release-candidate-is-available-for-msdn-subscribers.aspx">post
about the release</a>. Here are some key dates, if you are an MSDN subscriber you
can get it now, and if not then you will have to wait until Feb 10. Still no word
on when the RTM will ship, but hopefully it will be soon so that more organizations
will begin adopting it and we can leave VS 2008 in the dust. Since the <a href="http://blogs.msdn.com/robcaron/archive/2010/01/13/9948172.aspx">Visual
Studio 2010 Launch</a> is on April 12, 2010 it should be just around the corner. You
should be aware that the launch date doesn't always equal the release date. Launch
date is set by marketing to start the launch events, but the RTM date can vary, but
will typically be in that same ball park. 
</p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=216f8d26-6a17-4b2e-8a63-6c31cad022f4" />
      </div>
    </content>
  </entry>
  <entry>
    <title>MSBuild 4.0: Inline Tasks Part 2</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/01/22/MSBuild40InlineTasksPart2.aspx" />
    <id>http://sedodream.com/PermaLink,guid,1d80a062-e571-49ee-b7ad-fb8256299d2e.aspx</id>
    <published>2010-01-21T20:01:46.936-08:00</published>
    <updated>2010-01-21T20:04:23.361-08:00</updated>
    <category term="MSBuild" label="MSBuild" scheme="http://sedodream.com/CategoryView,category,MSBuild.aspx" />
    <category term="MSBuild 4.0" label="MSBuild 4.0" scheme="http://sedodream.com/CategoryView,category,MSBuild40.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://sedodream.com/CategoryView,category,VisualStudio2010.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="html">&lt;p&gt;
&lt;em&gt;This post contains based on .NET 4.0 Beta 2 and Visual Studio 2010 Beta 2 which
may change. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
The other day I wrote my first post on &lt;a href="http://sedodream.com/2010/01/20/MSBuild40InlineTasks.aspx"&gt;Inline
Tasks&lt;/a&gt; in MSBuild 4.0, this post will add onto that topic. In the previous post
we covered some basics, but there were a lot that was skipped. Last time we demonstrated
how to pass parameters but we never declared what type those parameters were. If you
declare a parameter and leave off the type, then it will be declared as a string.
If you need to declare parameters of other types then you need to use the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;ParameterType&lt;/strong&gt;&lt;/span&gt; attribute
on the parameter. You have to pass in the full name of the type to be used. For example
if you need to declare an int you must use System.Int32, not int and not Int32 but
System.Int32. It would be good if they supported aliases like int, string, long, etc
but right now they don't. Below you'll find a new inline task which can be used to
perform a substring. I've placed this in a file named IT-Substring-01.proj. 
&lt;/p&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt; 
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpFirst&gt;
&lt;font size=3&gt;&amp;lt;!--&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;Sample Demonstrates Inline Tasks&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;© 2010 Sayed Ibrahim Hashimi &lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;--&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;UsingTask&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskName="Substring"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskFactory="CodeTaskFactory"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Input
Required="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;StartIndex
Required="true" ParameterType="System.Int32" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Length
ParameterType="System.Int32" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Result
Output="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Code
Type="Fragment" Language="cs"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;![CDATA[&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(Length &amp;gt; 0)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Result
= Input.Substring(StartIndex, Length);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;else&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Result
= Input.Substring(StartIndex);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;]]&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Code&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/UsingTask&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target Name="Demo"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Substring
StartIndex="8" Input="Demo of Inline Tasks"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
PropertyName="taskValue" TaskParameter="Result"/&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Substring&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Value from task: $(taskValue)" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Substring
StartIndex="0" Length="4" Input="Demo of Inline Tasks"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
PropertyName="taskValue" TaskParameter="Result"/&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Substring&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Value from task: $(taskValue)" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpLast&gt;
&lt;font size=3&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/span&gt; 
&lt;p&gt;
In the task above I have declared 4 parameters, from those two have the type specified
to be int. If we execute the Demo target here is the result. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="" src="http://www.sedodream.com/content/binary/012210_0401_MSBuild40In1.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
From the above image you can see that the task performs the actions requested. One
thing to make a mental note of above is my usage of a &lt;a href="http://en.wikipedia.org/wiki/CDATA"&gt;CDATA&lt;/a&gt; tag
to wrap the definition of the task. I would suggest that you do so for all inline
tasks that you write. 
&lt;/p&gt;
&lt;p&gt;
The types supported for parameters on inline types are the same for normal types.
For a detailed account of that see my &lt;a href="http://www.amazon.com/gp/product/0735626286?ie=UTF8&amp;amp;tag=sedodream-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0735626286"&gt;book&lt;/a&gt;,
but as a general guideline it accepts string, primitive types, &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.build.framework.itaskitem.aspx"&gt;ITaskItem&lt;/a&gt;,
and arrays of all three. 
&lt;/p&gt;
&lt;p&gt;
Let's see how we can use an array in an inline task. I created a simple task which
will create a list of &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;Guid&lt;/strong&gt;&lt;/span&gt;s
and place them into an array and return the result back to the calling MSBuild script,
the file I placed this is in named IT-CreateGuid-02.proj. The contents of that file
are shown in the snippet below. 
&lt;/p&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt; 
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 2pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 10pt 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpFirst&gt;
&lt;font size=3&gt;&amp;lt;!--&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;Sample Demonstrates Inline Tasks&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;© 2010 Sayed Ibrahim Hashimi &lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;--&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;UsingTask&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskName="CreateGuid02"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskFactory="CodeTaskFactory"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;NumToCreate
ParameterType="System.Int32" Required="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Guids
ParameterType="System.String[]" Output="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Code
Type="Fragment" Language="cs"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;![CDATA[&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List&amp;lt;string&amp;gt;
guids = new List&amp;lt;string&amp;gt;();&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;for
(int i = 0; i &amp;lt; NumToCreate; i++)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;guids.Add(Guid.NewGuid().ToString());&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Guids
= guids.ToArray();&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;]]&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Code&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/UsingTask&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target Name="Demo"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;CreateGuid02
NumToCreate="1"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
ItemName="Id01" TaskParameter="Guids" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/CreateGuid02&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Id01: @(Id01)" Importance="high" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;CreateGuid02
NumToCreate="4"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
ItemName="Id02" TaskParameter="Guids" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/CreateGuid02&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text=" " Importance="high" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Id02: @(Id02)" Importance="high" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 10pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-padding-alt: 1.0pt 4.0pt 1.0pt 2.0pt" class=Code-BlockCxSpLast&gt;
&lt;font size=3&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/span&gt; 
&lt;p&gt;
Above you can see that I declared the parameter &lt;span style="BACKGROUND-COLOR: #d9d9d9; FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;Guids&lt;/strong&gt;&lt;/span&gt; as &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;System.String[]&lt;/strong&gt;&lt;/span&gt;.
I typically prefer to use generic lists instead of arrays so in my task definitions
I will use a list and then just call &lt;a href="http://msdn.microsoft.com/en-us/library/x303t819%28VS.100%29.aspx"&gt;ToArray&lt;/a&gt; when
I assign the output parameter. Here is a nifty, but very simplistic task. Given an
item list, it will filter them based on &lt;a href="http://en.wikipedia.org/wiki/Regular_expression"&gt;a
Regular Expression&lt;/a&gt; passed in. 
&lt;/p&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt; 
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpFirst&gt;
&lt;font size=3&gt;&amp;lt;!--&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;Sample Demonstrates Inline Tasks&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;© 2010 Sayed Ibrahim Hashimi &lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;--&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;UsingTask&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskName="FilterList"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskFactory="CodeTaskFactory"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ListToFilter
ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Filter
Required="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;FilteredList
ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Using
Namespace="System.Text.RegularExpressions" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Code
Type="Fragment" Language="cs"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;![CDATA[&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;var
results = (from l in ListToFilter&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;where
Regex.IsMatch(l.ItemSpec, Filter)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;select
l).ToList();&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;FilteredList
= results.ToArray();&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;]]&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Code&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/UsingTask&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;ItemGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Source
Include="src\01.cs" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Source
Include="src\02.cs" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Source
Include="test\test01.cs" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Source
Include="test\sub\test02.cs" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Source
Include="test\sub\test03.cs" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Source
Include="test\sub\sub2\test04.cs" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target Name="Demo"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;FilterList
ListToFilter="@(Source)" Filter="test"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
ItemName="_filteredList" TaskParameter="FilteredList" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/FilterList&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Filter: test. Results: @(_filteredList)" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;!-- Clear
the list before calling again --&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ItemGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;_filteredList
Remove="@(_filteredList)" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="======" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;FilterList
ListToFilter="@(Source)" Filter="sub\\"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
ItemName="_filteredList" TaskParameter="FilteredList" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/FilterList&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Filter: .\sub. Results: @(_filteredList)" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpLast&gt;
&lt;font size=3&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/span&gt; 
&lt;p&gt;
Here you see that you can you can perform &lt;a href="http://en.wikipedia.org/wiki/Language_Integrated_Query"&gt;LINQ&lt;/a&gt; queries
inside of inline tasks without any additional setup. Here is the result of executing
the Demo target on this script. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="" src="http://www.sedodream.com/content/binary/012210_0401_MSBuild40In2.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
Another thing to notice is the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;Using&lt;/strong&gt;&lt;/span&gt; element
under the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/span&gt; element.
This injects a &lt;a href="http://msdn.microsoft.com/en-us/library/yh598w02%28VS.100%29.aspx"&gt;Using&lt;/a&gt; statement
into the generated class for the given namespace. If you need to reference another
assembly you can do this with the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/span&gt; element
under the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/span&gt; element. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Sayed Ibrahim Hashimi
&lt;/p&gt;
&lt;img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=1d80a062-e571-49ee-b7ad-fb8256299d2e" /&gt;</content>
  </entry>
  <entry>
    <title>MSBuild 4.0: Inline Tasks</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2010/01/20/MSBuild40InlineTasks.aspx" />
    <id>http://sedodream.com/PermaLink,guid,aa37e1c0-e4c4-4c5d-806b-4926a8d57e03.aspx</id>
    <published>2010-01-20T14:31:12.306-08:00</published>
    <updated>2010-01-20T14:33:52.378-08:00</updated>
    <category term="MSBuild" label="MSBuild" scheme="http://sedodream.com/CategoryView,category,MSBuild.aspx" />
    <category term="MSBuild 4.0" label="MSBuild 4.0" scheme="http://sedodream.com/CategoryView,category,MSBuild40.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://sedodream.com/CategoryView,category,VisualStudio2010.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="html">&lt;p&gt;
&lt;em&gt;This post contains based on .NET 4.0 Beta 2 and Visual Studio 2010 Beta 2 which
may change. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
If you didn't already know, MSBuild will have a new version shipped with .NET 4.0
(Visual Studio 2010 will use this new version). I will cover many of those features
here. This is the first in a series of posts that I will make regarding &lt;a href="http://msdn.microsoft.com/en-us/library/dd393574%28VS.100%29.aspx"&gt;MSBuild
4.0&lt;/a&gt;. One of the big additions to MSBuild 4.0 is &lt;a href="http://msdn.microsoft.com/en-us/library/dd722601%28VS.100%29.aspx"&gt;Inline
Tasks&lt;/a&gt;. I'm pretty excited about this new addition. The story before was if you
wanted to perform any action it was always through a &lt;a href="http://msdn.microsoft.com/en-us/library/7z253716%28VS.100%29.aspx"&gt;Task&lt;/a&gt;.
Which worked pretty well, but the major drawback is that the tasks needed to be written
in code and then compiled into an assembly in order for it to be used. What this meant
was if you wanted to perform an action (&lt;em&gt;however simple&lt;/em&gt;) that wasn't covered
out of the box you would have to look for 3&lt;sup&gt;rd&lt;/sup&gt; party tasks or write one
yourself. This is time consuming and can be tricky from a "&lt;em&gt;deployment&lt;/em&gt;" perspective.
Now with Inline Tasks you can declare the behavior of the task right inside of the
MSBuild file itself. 
&lt;/p&gt;
&lt;h1&gt;Inline Task 
&lt;/h1&gt;
&lt;p&gt;
The way that Inline Tasks are supported is by using the &lt;a href="http://msdn.microsoft.com/en-us/library/t41tzex2%28VS.100%29.aspx"&gt;UsingTask&lt;/a&gt; XML
element. This element was around before but it has some new options. If you read my &lt;a href="http://www.amazon.com/gp/product/0735626286?ie=UTF8&amp;amp;tag=sedodream-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0735626286"&gt;book&lt;/a&gt;,
you probably saw a few different Hello World tasks that I created. In order to demonstrate
Inline Tasks I have taken a similar set of examples. Take a look at the project file
(&lt;em&gt;IT-HelloWorld-01.proj&lt;/em&gt;) below. 
&lt;/p&gt;
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt" class=Code-BlockCxSpFirst&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;lt;!--&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;Sample Demonstrates Inline Tasks&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;© 2010 Sayed Ibrahim Hashimi &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;--&amp;gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Demo"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;UsingTask&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskName="HelloWorld"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskFactory="CodeTaskFactory"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Task&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Code
Type="Fragment" Language="cs"&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Log.LogMessage("Hello
World!");&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/Code&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Task&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/UsingTask&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target
Name="Demo"&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;HelloWorld
/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=Code-BlockCxSpLast&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
For this basic inline task here are the key things to note, the name of the task is
specified in the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;TaskName&lt;/strong&gt;&lt;/span&gt; attribute.
You will use this like you would any other task inside of targets. The definition
of the task will be contained in the Code XML element. In order to call that task,
I use the syntax &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;&amp;lt;HelloWorld
/&amp;gt;&lt;/strong&gt;&lt;/span&gt; inside of the Demo target. The same exact way "classic" tasks
are called. Here is the result. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="" src="http://www.sedodream.com/content/binary/012010_2231_MSBuild40In1.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
The result shown above is as expected. 
&lt;/p&gt;
&lt;h1&gt;Inline Task with Parameters 
&lt;/h1&gt;
&lt;p&gt;
You can also make inline tasks with parameters, both required and optional. Here is
an example (IT-HelloWorld-02.proj) with a lone required parameter. 
&lt;/p&gt;
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt" class=Code-BlockCxSpFirst&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;lt;!--&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;Sample Demonstrates Inline Tasks&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;© 2010 Sayed Ibrahim Hashimi &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;--&amp;gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Demo"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;UsingTask&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskName="HelloWorld"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskFactory="CodeTaskFactory"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ParameterGroup&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Name
Required="true"/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/ParameterGroup&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Task&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Code
Type="Fragment" Language="cs"&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Log.LogMessage(string.Format("Hello
{0}",Name));&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Code&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Task&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/UsingTask&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;YourName
Condition=" '$(YourName)'=='' "&amp;gt;Sayed&amp;lt;/YourName&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp; &lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target
Name="Demo"&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;HelloWorld
Name="$(YourName)" /&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target
Name="DemoWithNoName"&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;!--
This shows the result if you don't pass in a required param --&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;HelloWorld
/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font size=3&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;nbsp; &lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=Code-BlockCxSpLast&gt;
&lt;strong&gt;&lt;font color=#008000 size=3 face=Consolas&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
If you take a look at the UsingTask declaration above you will see that I included
a &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;ParameterGroup&lt;/strong&gt;&lt;/span&gt; element.
All parameters must be included under that element. In this case we just have one.
If we execute the Demo target the result will be as follows. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="" src="http://www.sedodream.com/content/binary/012010_2231_MSBuild40In2.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
We can see that the message was sent to the console as we expected. You can execute
the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;DemoWithNoName&lt;/strong&gt;&lt;/span&gt; if
you are interested in verifying that MSBuild will ensure that required parameters
are set. 
&lt;/p&gt;
&lt;h1&gt;Inline Tasks with Output Parameter 
&lt;/h1&gt;
&lt;p&gt;
You can also create your own inline tasks which have one or more output parameters.
You will define those output parameters under the ParameterGroup element and use the
Output="true" attribute. Take a look at IT-HelloWorld-03.proj below. 
&lt;/p&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt; 
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt" class=Code-BlockCxSpFirst&gt;
&lt;font size=3&gt;&amp;lt;!--&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;Sample Demonstrates Inline Tasks&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;© 2010 Sayed Ibrahim Hashimi &lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;--&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;UsingTask&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskName="HelloWorld"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskFactory="CodeTaskFactory"&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Name
Required="true"/&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;TaskMessage
Output="true"/&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/ParameterGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Code
Type="Fragment" Language="cs"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TaskMessage
= string.Format("Hello {0}",Name);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Log.LogMessage(TaskMessage);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Code&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/Task&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/UsingTask&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;YourName
Condition=" '$(YourName)'=='' "&amp;gt;Sayed&amp;lt;/YourName&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;Target Name="Demo"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;HelloWorld
Name="$(YourName)"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Output
PropertyName="MsgFromTask" TaskParameter="TaskMessage"/&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/HelloWorld&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;Message
Text="Message from task: $(MsgFromTask)" Importance="high" /&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font size=3&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=Code-BlockCxSpLast&gt;
&lt;font size=3&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;
&lt;/strong&gt;&lt;/span&gt;&gt;
&gt;
&lt;p&gt;
In this example I created a &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;HelloWorld&lt;/strong&gt;&lt;/span&gt; task
to output the entire message back to the calling MSBuild task invocation inside the
target. This output parameter is the &lt;span style="FONT-FAMILY: Consolas; COLOR: green"&gt;&lt;strong&gt;TaskMessage&lt;/strong&gt;&lt;/span&gt; parameter.
Inside the Demo target I call the task and then print the value that was passed back
from the task. Here is the result of that. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="" src="http://www.sedodream.com/content/binary/012010_2231_MSBuild40In3.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
From here we can see that the value was correctly sent back to the script. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
There is a lot more to inline tasks and I plan on covering more features very soon
here, but this should get you started. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Sayed Ibrahim Hashimi
&lt;/p&gt;
&lt;img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=aa37e1c0-e4c4-4c5d-806b-4926a8d57e03" /&gt;</content>
  </entry>
  <entry>
    <title>Unit testing and ASP.NET MVC Comments</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2009/12/09/UnitTestingAndASPNETMVCComments.aspx" />
    <id>http://sedodream.com/PermaLink,guid,b3a497b2-916f-4190-a13f-8120a06b3eea.aspx</id>
    <published>2009-12-08T22:37:17.38-08:00</published>
    <updated>2009-12-08T22:47:27.123-08:00</updated>
    <category term="ASP.NET MVC" label="ASP.NET MVC" scheme="http://sedodream.com/CategoryView,category,ASPNETMVC.aspx" />
    <category term="unit testing" label="unit testing" scheme="http://sedodream.com/CategoryView,category,unitTesting.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="html">&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Unit_testing"&gt;Unit testing&lt;/a&gt; has been around
for quite a while and a lot of developers have created their own unit tests. Even
being a simple concept and having been around for some time I still think that unit
tests are misunderstood, poorly written and don't follow best practices by a majority
of developers. I'm not a unit testing expert but there are some guidelines that I
try to follow when I create unit tests some of those are listed below (&lt;em&gt;in no particular
order&lt;/em&gt;). 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Make them small 
&lt;li&gt;
Make them self contained 
&lt;li&gt;
Make the names describe what the test case tests (&lt;em&gt;at the price of a long name&lt;/em&gt;) 
&lt;li&gt;
Follow the arrange/act/assert pattern, i.e. don't do something like arrange/act/assert/act/assert,
etc. 
&lt;li&gt;
Don't make database calls! 
&lt;li&gt;
Use mocks when necessary to ensure that you test the correct piece of code 
&lt;li&gt;
Consider making methods/properties to be internal instead of private. You can use
the &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx"&gt;InternalsVisibleTo&lt;/a&gt; attribute
to allow testing of internal items. 
&lt;li&gt;
Don't have app.config for your unit tests. Unit test should "arrange" the configuration
in code. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you make your unit tests too long and to test more than one item then they will
become a pain to maintain, which leads to them being ignored and eventually to a complete
breakdown to your testing effort in general. 
&lt;/p&gt;
&lt;p&gt;
I have recently been thinking more about how unit tests are being used throughout
software development. Also I've been reading &lt;a href="http://www.amazon.com/gp/product/1933988622?ie=UTF8&amp;amp;tag=sedodream-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=1933988622"&gt;ASP.NET
MVC in Action&lt;/a&gt; which coincidently puts a lot of emphasis on unit testing. I found
a few quotes in Chapter 3 of that book, which covers Controllers, and thought that
I would share them here because I agree with statements whole heartedly. Text in &lt;em&gt;italics&lt;/em&gt; are
my own comments. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Unit tests run fast because they do not call out of process (i.e. no database calls,
no web service calls, etc)&lt;em&gt; &lt;/em&gt; 
&lt;li&gt;
It is very difficult to test poorly designed code. &lt;em&gt;(Do you ever have a set of
code and think to yourself, "I can't write unit tests for this, it's impossible",
at this point you should consider to refactor it because this is a red flag for bad
code!) &lt;/em&gt; 
&lt;li&gt;
&lt;em&gt;(While discussing mocking)&lt;/em&gt;… unit testing becomes easy and soon becomes a
repetitive pattern of faking dependencies and writing assertions. Over time, if you
employ this technique, you will see a marked improvement in the quality of your code. 
&lt;li&gt;
A good controller unit test runs fast. We are talking 2000 unit tests all running
within 10 seconds. 
&lt;li&gt;
It's nearly impossible to test-drive code that ends up with a bad design. &lt;em&gt;(Once
again bad code is hard to test)&lt;/em&gt; 
&lt;li&gt;
Pay attention to pain. If your tests become painful to maintain, there's something
wrong. 
&lt;li&gt;
Correctly managed design and tests enable sustained speed of development whereas poor
testing techniques cause development to slow down to a point where testing is abandoned. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Some of the key take aways: use mocks, and testing should be helpful to your development
process not a hindrance. 
&lt;/p&gt;
&lt;p&gt;
Don't write unit tests just to write them or just to get the necessary coverage. Make
sure that you write the test cases with a specific intent and that they are written
well so that you will continue to maintain and execute them as a part of your &lt;a href="http://www.martinfowler.com/articles/continuousIntegration.html"&gt;CI&lt;/a&gt; build
process. 
&lt;/p&gt;
&lt;p&gt;
Here are some unit tests that I've recently written that I'd like to use to show some
concrete cases. 
&lt;/p&gt;
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt" class=Code-BlockCxSpFirst&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[Test]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void TestGetConfigValue_ValueExistsRequiredTrue()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
key = "83F216CD-1B3E-4fc1-9DA5-4A7D506AF7E8";&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
expectedValue = "C2D4E7CA-BE6B-4976-BFA9-50F5223C603A";&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ConfigurationManager.AppSettings[key]
= expectedValue;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
actualValue = ServiceConfigHelper.Instance.GetConfigValue(key, true);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Assert.AreEqual(expectedValue,
actualValue);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[Test]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void TestGetConfigValue_ValueExistsRequiredFalse()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
key = "0601AB1F-C78C-4c72-8648-B140D50BDDEC";&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
expectedValue = "92DCADBC-9618-49f3-A412-5C90A945903D";&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ConfigurationManager.AppSettings[key]
= expectedValue;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
actualValue = ServiceConfigHelper.Instance.GetConfigValue(key, false);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Assert.AreEqual(expectedValue,
actualValue);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[Test]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void TestGetConfigValue_ValueDoesntExistRequiredFalse()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
key = "2D4B5C66-BA37-4ab8-9B51-3F17CF348E6D";&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
actualValue = ServiceConfigHelper.Instance.GetConfigValue(key, false);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Assert.IsNull(actualValue);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[ExpectedException(typeof(ConfigurationErrorsException))]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[Test]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void TestGetConfigValue_ValueDoesntExistRequiredTrue()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
key = "0511216E-3AA6-4b80-B215-E980A459466D";&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
ConfigurationErrorsException here&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
actualValue = ServiceConfigHelper.Instance.GetConfigValue(key, true);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[ExpectedException(typeof(ArgumentNullException))]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[Test]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void TestGetConfigValue_KeyIsNull_RequiredFalse()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
actualValue = ServiceConfigHelper.Instance.GetConfigValue(null, false);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[ExpectedException(typeof(ArgumentNullException))]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[Test]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void TestGetConfigValue_KeyIsNull_RequiredTrue()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
actualValue = ServiceConfigHelper.Instance.GetConfigValue(null, true);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;// Setup method here&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;[SetUp]&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;public void Reset()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;{&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ServiceConfigHelper.Instance.Reset();&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(ConfigurationManager.AppSettings.HasKeys())&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List&amp;lt;string&amp;gt;
allKeys = new List&amp;lt;string&amp;gt;();&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;foreach
(string key in ConfigurationManager.AppSettings.Keys)&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;allKeys.Add(key);&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;o:p&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;foreach
(string key in allKeys)&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ConfigurationManager.AppSettings[key]
= string.Empty;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt" class=Code-BlockCxSpMiddle&gt;
&lt;strong&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=Code-BlockCxSpLast&gt;
&lt;strong&gt;&lt;font color=#008000 face=Consolas&gt;}&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Notice that each of these has a very descriptive name, if you saw the name of the
test in the list of failed test cases you immediately know what to work on; you don't
even have to look at the test. Notice that all of the tests are pretty small, and
that each test case tests a very specific piece of functionality. Also you might have
noticed that I use Guids in test cases I like to do this just to make sure that I
have random data and that test cases don't conflict with each other. 
&lt;/p&gt;
&lt;p&gt;
Also I'd like to note that in the &lt;a href="http://www.amazon.com/gp/product/1933988622?ie=UTF8&amp;amp;tag=sedodream-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=1933988622"&gt;book&lt;/a&gt; the
guys recommend reading &lt;a href="http://www.amazon.com/gp/product/0131177052?ie=UTF8&amp;amp;tag=sedodream-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0131177052"&gt;Working
Effectively with Legacy Code&lt;/a&gt; for good coverage of unit testing, I haven't read
it but I might grab a copy. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Sayed Ibrahim Hashimi 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=b3a497b2-916f-4190-a13f-8120a06b3eea" /&gt;</content>
  </entry>
  <entry>
    <title>MSDeploy Syncing 2 or More Folders</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2009/12/07/MSDeploySyncing2OrMoreFolders.aspx" />
    <id>http://sedodream.com/PermaLink,guid,76a85963-5401-4b12-b103-3c5c71d23fbf.aspx</id>
    <published>2009-12-06T20:50:37.385-08:00</published>
    <updated>2009-12-06T20:53:39.777-08:00</updated>
    <category term="MSDeploy" label="MSDeploy" scheme="http://sedodream.com/CategoryView,category,MSDeploy.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="html">&lt;p&gt;
A while back someone asked me if you could sync 2 or more folders with one statement
using &lt;a href="http://www.iis.net/expand/WebDeploymentTool"&gt;MSDeploy&lt;/a&gt;. I said of
course, if you perform the sync using &lt;a href="http://technet.microsoft.com/en-us/library/dd568976(WS.10).aspx"&gt;manifest&lt;/a&gt; files.
Manifest files allow you to "group" sync operations into a file. When you invoke msdeploy.exe
and point it to a manifest file, each provider will be executed in the order in which
it appears inside the manifest file. A common scenario for using manifest files is
to sync websites. This way you can specify the files that should be synced, the website
(application) name, ACL values, etc. But you are not limited to using manifest files
for web related sync operations. When using manifest files, you would specify the
provider to be &lt;strong&gt;&lt;em&gt;manifest&lt;/em&gt;&lt;/strong&gt;. We will see this in the command
used to snyc two folders. Often times when using a manifest file for the source you
will also use one for the destination. Here are the two files. 
&lt;/p&gt;
&lt;h2&gt;SourceManifest.xml 
&lt;/h2&gt;
&lt;p style="BACKGROUND: #d9d9d9"&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 9pt"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h2&gt;
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpFirst&gt;
&lt;font color=#008000 size=2 face=Consolas&gt;&amp;lt;sitemanifest&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=2&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;contentPath
path="C:\temp\MSDeploy\Source01"/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;font size=2&gt;&lt;font color=#008000&gt;&lt;font face=Consolas&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;contentPath
path="C:\temp\MSDeploy\Source02" /&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpLast&gt;
&lt;font color=#008000 size=2 face=Consolas&gt;&amp;lt;/sitemanifest&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/h2&gt;
&lt;h2&gt;DestManifest.xml 
&lt;/h2&gt;
&lt;p style="BACKGROUND: #d9d9d9"&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 9pt"&gt;&lt;strong&gt;
&lt;/p&gt;
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpFirst&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&amp;lt;sitemanifest&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;contentPath path="E:\temp\MSDeploy\Source01"
/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;contentPath path="E:\temp\MSDeploy\Source02"
/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpLast&gt;
&amp;lt;/sitemanifest&amp;gt;
&lt;/p&gt;
&lt;/div&gt;
&gt;&gt; 
&lt;p&gt;
In this example I am syncing two folders C:\temp\MSDeploy\Source01 and C:\temp\MSDeploy\Source02
to another drive location on E. The command to perform the sync would be 
&lt;/p&gt;
&lt;p style="BACKGROUND: #d9d9d9"&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 9pt"&gt;&lt;strong&gt;msdeploy
-verb:sync -source:manifest=sourceManifest.xml -dest:manifest=destManifest.xml &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
And here are the results of that sync operation, when the destination directories
don't exist. 
&lt;/p&gt;
&lt;span style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 9pt"&gt;&lt;strong&gt; 
&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #d9d9d9; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt; mso-background-themecolor: background1; mso-background-themeshade: 217"&gt;
&lt;p style="MARGIN: 10pt 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpFirst&gt;
C:\temp\MSDeploy&amp;gt;msdeploy -verb:sync -source:manifest=sourceManifest.xml -dest:manifest=destManifest.xml&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding sitemanifest (sitemanifest).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding contentPath (E:\temp\MSDeploy\Source01).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding dirPath (E:\temp\MSDeploy\Source01).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source01\01.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source01\02.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source01\03.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source01\04.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding contentPath (E:\temp\MSDeploy\Source02).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding dirPath (E:\temp\MSDeploy\Source02).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source02\01.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source02\02.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source02\03.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpMiddle&gt;
Info: Adding child filePath (E:\temp\MSDeploy\Source02\04.txt).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt; BACKGROUND: #d9d9d9; mso-background-themecolor: background1; mso-background-themeshade: 217" class=Code-BlockCxSpLast&gt;
Total changes: 13 (13 added, 0 deleted, 0 updated, 0 parameters changed, 0 bytes copied)
&lt;/p&gt;
&lt;/strong&gt;&lt;/span&gt;&gt;
&lt;p&gt;
As you can see the destination directories were created and the files synced into
the destination folders. First all the content of the Source01 folder is synced and
then the Source02 folder as expected. If you perform the sync operation and all files
are up-to-date then no changes will be made. 
&lt;/p&gt;
&lt;p&gt;
This is just a very basic example of how you can use MSDeploy manifest files to perform
a sync operation, but you can create manifest files that perform many different actions.
Visual Studio 2010 uses manifest files when it creates the web packages for deployment. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Sayed Ibrahim Hashimi
&lt;/p&gt;
&lt;img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=76a85963-5401-4b12-b103-3c5c71d23fbf" /&gt;</content>
  </entry>
  <entry>
    <title>MSBuild Video</title>
    <link rel="alternate" type="text/html" href="http://sedodream.com/2009/11/19/MSBuildVideo.aspx" />
    <id>http://sedodream.com/PermaLink,guid,abe77d44-300a-400e-b50a-10fd57429e78.aspx</id>
    <published>2009-11-18T19:20:40.382-08:00</published>
    <updated>2009-11-18T19:20:40.382-08:00</updated>
    <category term="dnrTV" label="dnrTV" scheme="http://sedodream.com/CategoryView,category,dnrTV.aspx" />
    <category term="MSBuild" label="MSBuild" scheme="http://sedodream.com/CategoryView,category,MSBuild.aspx" />
    <category term="Video" label="Video" scheme="http://sedodream.com/CategoryView,category,Video.aspx" />
    <author>
      <name>Ibrahim</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have a new video posted discussing MSBuild, you can see this video at <a href="http://www.dnrtv.com/default.aspx?showNum=158">http://www.dnrtv.com/default.aspx?showNum=158</a>.
This is a continuation of my <a href="http://www.dnrtv.com/default.aspx?showNum=145">first
appearance</a> discussing on <a href="http://www.dnrtv.com">dnrtv.com</a>. Take a
look and let me know if there are any particular topics you'd like for me to discuss.
One of the topics I discuss in this video is Open Source MSBuild tasks. One of the
most useful task libraries is the <a href="http://msbuildextensionpack.codeplex.com/">MSBuild
Extension Pack</a>, there is a great set of tasks there. If you haven't seen it already
you should take a look. 
</p>
        <p>
Sayed Ibrahim Hashimi
</p>
        <img width="0" height="0" src="http://sedodream.com/aggbug.ashx?id=abe77d44-300a-400e-b50a-10fd57429e78" />
      </div>
    </content>
  </entry>
</feed>