Пример #1
0
        /// <summary>
        /// Evaluate a function.
        /// </summary>
        /// <param name="sourceLineNumbers">The source line information for the function.</param>
        /// <param name="prefix">The function prefix.</param>
        /// <param name="function">The function name.</param>
        /// <param name="args">The arguments for the function.</param>
        /// <returns>The function value or null if the function is not defined.</returns>
        public string EvaluateFunction(SourceLineNumberCollection sourceLineNumbers, string prefix, string function, string[] args)
        {
            if (String.IsNullOrEmpty(prefix))
            {
                throw new ArgumentNullException("prefix");
            }

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

            switch (prefix)
            {
            case "fun":
                switch (function)
                {
                case "AutoVersion":
                    // Make sure the base version is specified
                    if (args.Length == 0 || args[0].Length == 0)
                    {
                        throw new WixException(WixErrors.InvalidPreprocessorFunctionAutoVersion(sourceLineNumbers));
                    }

                    // Build = days since 1/1/2000; Revision = seconds since midnight / 2
                    DateTime now        = DateTime.Now.ToUniversalTime();
                    TimeSpan tsBuild    = now - new DateTime(2000, 1, 1);
                    TimeSpan tsRevision = now - new DateTime(now.Year, now.Month, now.Day);

                    return(String.Format("{0}.{1}.{2}", args[0], (int)tsBuild.TotalDays, (int)(tsRevision.TotalSeconds / 2)));

                // Add any core defined functions here
                default:
                    return(null);
                }

            default:
                PreprocessorExtension extension = (PreprocessorExtension)this.extensionsByPrefix[prefix];
                if (null != extension)
                {
                    try
                    {
                        return(extension.EvaluateFunction(prefix, function, args));
                    }
                    catch (Exception e)
                    {
                        throw new WixException(WixErrors.PreprocessorExtensionEvaluateFunctionFailed(sourceLineNumbers, prefix, function, String.Join(",", args), e.Message));
                    }
                }
                else
                {
                    return(null);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Evaluate a function.
        /// </summary>
        /// <param name="sourceLineNumbers">The source line information for the function.</param>
        /// <param name="prefix">The function prefix.</param>
        /// <param name="function">The function name.</param>
        /// <param name="args">The arguments for the function.</param>
        /// <returns>The function value or null if the function is not defined.</returns>
        public string EvaluateFunction(SourceLineNumberCollection sourceLineNumbers, string prefix, string function, string[] args)
        {
            if (null == prefix)
            {
                throw new ArgumentNullException("prefix");
            }

            if (null == function)
            {
                throw new ArgumentNullException("name");
            }

            if (0 == function.Length)
            {
                throw new ArgumentException("Empty function call.", "function");
            }

            switch (prefix)
            {
            case "fun":
                switch (function)
                {
                // Add any core defined functions here
                default:
                    return(null);
                }

            default:
                PreprocessorExtension extension = (PreprocessorExtension)this.extensionsByPrefix[prefix];
                if (null != extension)
                {
                    try
                    {
                        return(extension.EvaluateFunction(prefix, function, args));
                    }
                    catch (Exception e)
                    {
                        throw new WixException(WixErrors.PreprocessorExtensionEvaluateFunctionFailed(sourceLineNumbers, prefix, function, String.Join(",", args), e.Message));
                    }
                }
                else
                {
                    return(null);
                }
            }
        }