public string GetVariableValue(string prefix, string name)
        {
            if (String.IsNullOrEmpty(prefix))
            {
                throw new ArgumentNullException("prefix");
            }

            if (String.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }

            switch (prefix)
            {
            case "env":
                return(Environment.GetEnvironmentVariable(name));

            case "sys":
                switch (name)
                {
                case "CURRENTDIR":
                    return(String.Concat(Directory.GetCurrentDirectory(), Path.DirectorySeparatorChar));

                case "SOURCEFILEDIR":
                    return(String.Concat(Path.DirectorySeparatorChar));

                case "SOURCEFILEPATH":
                    return(null);

                case "PLATFORM":
                    Console.WriteLine("[Warning] Deprecated PreProc Variable: $(sys.PLATFORM), $(sys.BUILDARCH)");
                    goto case "BUILDARCH";

                case "BUILDARCH":
                    switch (this.currentPlatform)
                    {
                    case Platform.X86:
                        return("x86");

                    case Platform.X64:
                        return("x64");

                    case Platform.IA64:
                        return("ia64");

                    case Platform.ARM:
                        return("arm");

                    default:
                        throw new ArgumentException(this.currentPlatform.ToString());
                    }

                default:
                    return(null);
                }

            case "var":
                return((string)this.variables[name]);

            default:
                PreprocessorExtension extension = (PreprocessorExtension)this.extensionsByPrefix[prefix];
                if (null != extension)
                {
                    try
                    {
                        return(extension.GetVariableValue(prefix, name));
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message);
                    }
                }
                else
                {
                    return(null);
                }
            }
        }