<p>How can I get MSBuild to evaluate and print in a <code>&lt;Message /&gt;</code> task an absolute path given a relative path?</p>

<p><strong>Property Group</strong></p>

<pre><code>&lt;Source_Dir&gt;..\..\..\Public\Server\&lt;/Source_Dir&gt;
&lt;Program_Dir&gt;c:\Program Files (x86)\Program\&lt;/Program_Dir&gt;
</code></pre>

<p><strong>Task</strong></p>

<pre><code>&lt;Message Importance="low" Text="Copying '$(Source_Dir.FullPath)' to '$(Program_Dir)'" /&gt;
</code></pre>

<p><strong>Output</strong></p>

<blockquote>
  <p>Copying '' to 'c:\Program Files (x86)\Program\'</p>
</blockquote>

Wayne is correct that well-known metadata does not apply to properties - only to items. Using properties such as "MSBuildProjectDirectory" will work, but I'm not aware of a built in way to resolve the full path.
Another option is to write a simple, custom task that will take a relative path and spit out the fully-resolved path. It would look something like this:
```
```
public class ResolveRelativePath : Task
{
    [Required]
    public string RelativePath { get; set; }

    [Output]
    public string FullPath { get; private set; }

    public override bool Execute()
    {
        try
        {
            DirectoryInfo dirInfo = new DirectoryInfo(RelativePath);
            FullPath = dirInfo.FullName;
        }
        catch (Exception ex)
        {
            Log.LogErrorFromException(ex);
        }
        return !Log.HasLoggedErrors;
    }
}
```
```
And your MSBuild lines would look something like:
```
```
<PropertyGroup>
    <TaskAssembly>D:\BuildTasks\Build.Tasks.dll</TaskAssembly>
    <Source_Dir>..\..\..\Public\Server\</Source_Dir>
    <Program_Dir>c:\Program Files (x86)\Program\</Program_Dir>
</PropertyGroup>
<UsingTask AssemblyFile="$(TaskAssembly)" TaskName="ResolveRelativePath" />

<Target Name="Default">
    <ResolveRelativePath RelativePath="$(Source_Dir)">
    <Output TaskParameter="FullPath" PropertyName="_FullPath" />
    </ResolveRelativePath>
    <Message Importance="low" Text="Copying '$(_FullPath)' to '$(Program_Dir)'" />
</Target>
```
```