public string GetMetadataValue(string name)
        {
            // First of all check if the metadata is explicitly set
            if (itemMetadata != null && itemMetadata.HasProperty(name))
            {
                return(itemMetadata.GetValue(name, ""));
            }

            // Now check for file metadata. We avoid a FromMSBuildPath call by checking after item metadata
            if (itemFile == null && itemInclude != null)
            {
                itemFile = MSBuildProjectService.FromMSBuildPath(project.BaseDirectory, itemInclude);
            }

            if (itemFile == null)
            {
                return("");
            }

            try {
                switch (name.ToLower())
                {
                case "fullpath": return(ToMSBuildPath(Path.GetFullPath(itemFile)));

                case "rootdir": return(ToMSBuildDir(Path.GetPathRoot(itemFile)));

                case "filename": return(Path.GetFileNameWithoutExtension(itemFile));

                case "extension": return(Path.GetExtension(itemFile));

                case "relativedir": return(ToMSBuildDir(new FilePath(itemFile).ToRelative(project.BaseDirectory).ParentDirectory));

                case "directory": {
                    var root = Path.GetPathRoot(itemFile);
                    if (!string.IsNullOrEmpty(root))
                    {
                        return(ToMSBuildDir(Path.GetFullPath(itemFile).Substring(root.Length)));
                    }
                    return(ToMSBuildDir(Path.GetFullPath(itemFile)));
                }

                case "recursivedir": return(recursiveDir != null?ToMSBuildDir(recursiveDir) : "");

                case "identity": return(ToMSBuildPath(itemFile));

                case "modifiedtime": {
                    if (!File.Exists(itemFile))
                    {
                        return("");
                    }
                    return(File.GetLastWriteTime(itemFile).ToString("yyyy-MM-dd hh:mm:ss"));
                }

                case "createdtime": {
                    if (!File.Exists(itemFile))
                    {
                        return("");
                    }
                    return(File.GetCreationTime(itemFile).ToString("yyyy-MM-dd hh:mm:ss"));
                }

                case "accessedtime": {
                    if (!File.Exists(itemFile))
                    {
                        return("");
                    }
                    return(File.GetLastAccessTime(itemFile).ToString("yyyy-MM-dd hh:mm:ss"));
                }
                }
            } catch (Exception ex) {
                LoggingService.LogError("Failure in MSBuild file", ex);
                return("");
            }

            return("");
        }
        public string GetMetadataValue(string name)
        {
            if (itemFile == null)
            {
                return("");
            }

            try {
                switch (name.ToLower())
                {
                case "fullpath": return(ToMSBuildPath(Path.GetFullPath(itemFile)));

                case "rootdir": return(ToMSBuildDir(Path.GetPathRoot(itemFile)));

                case "filename": return(Path.GetFileNameWithoutExtension(itemFile));

                case "extension": return(Path.GetExtension(itemFile));

                case "relativedir": return(ToMSBuildDir(new FilePath(itemFile).ToRelative(project.BaseDirectory).ParentDirectory));

                case "directory": {
                    var root = Path.GetPathRoot(itemFile);
                    if (!string.IsNullOrEmpty(root))
                    {
                        return(ToMSBuildDir(Path.GetFullPath(itemFile).Substring(root.Length)));
                    }
                    return(ToMSBuildDir(Path.GetFullPath(itemFile)));
                }

                case "recursivedir": return(recursiveDir != null?ToMSBuildDir(recursiveDir) : "");

                case "identity": return(ToMSBuildPath(itemFile));

                case "modifiedtime": {
                    if (!File.Exists(itemFile))
                    {
                        return("");
                    }
                    return(File.GetLastWriteTime(itemFile).ToString("yyyy-MM-dd hh:mm:ss"));
                }

                case "createdtime": {
                    if (!File.Exists(itemFile))
                    {
                        return("");
                    }
                    return(File.GetCreationTime(itemFile).ToString("yyyy-MM-dd hh:mm:ss"));
                }

                case "accessedtime": {
                    if (!File.Exists(itemFile))
                    {
                        return("");
                    }
                    return(File.GetLastAccessTime(itemFile).ToString("yyyy-MM-dd hh:mm:ss"));
                }
                }
                if (itemMetadata != null)
                {
                    return(itemMetadata.GetValue(name, ""));
                }
            } catch (Exception ex) {
                LoggingService.LogError("Failure in MSBuild file", ex);
                return("");
            }

            return("");
        }