public bool Execute(string modulePackagesConfig, string propsFile, string targetsFile, string[] inputs, string[] modulePaths)
        {
            if (File.Exists(PropsFile) && File.Exists(TargetsFile) && IsFileUpToDate(propsFile, inputs) && IsFileUpToDate(targetsFile, inputs))
            {
                return true;
            }

            BuildEngine = new CBTBuildEngine();

            ModulePackagesConfig = modulePackagesConfig;
            PropsFile = propsFile;
            TargetsFile = targetsFile;
            ModulePaths = modulePaths;

            return Execute();
        }
        public bool Execute(string file, string msBuildVersion, string packagesDirectory, bool requireConsent, string solutionDirectory, bool disableParallelProcessing, string[] fallbackSources, bool noCache, string packageSaveMode, string[] sources, string configFile, bool nonInteractive, string verbosity, int timeout, string toolPath, bool enableOptimization, string markerPath, string[] inputs)
        {
            BuildEngine = new CBTBuildEngine();

            if (enableOptimization && IsFileUpToDate(markerPath, inputs))
            {
                Log.LogMessage(MessageImportance.Low, "NuGet packages are up-to-date");

                return true;
            }

            File = file;
            MsBuildVersion = msBuildVersion;
            PackagesDirectory = packagesDirectory;
            RequireConsent = RequireConsent;
            SolutionDirectory = !String.IsNullOrWhiteSpace(solutionDirectory) ? solutionDirectory : null;
            DisableParallelProcessing = disableParallelProcessing;
            FallbackSource = fallbackSources.Any() ? fallbackSources.Where(i => !String.IsNullOrWhiteSpace(i)).Select(i => new TaskItem(i)).Cast<ITaskItem>().ToArray() : null;
            NoCache = noCache;
            PackageSaveMode = !String.IsNullOrWhiteSpace(packageSaveMode) ? packageSaveMode : null;
            Source = sources.Any() ? sources.Where(i => !String.IsNullOrWhiteSpace(i)).Select(i => new TaskItem(i)).Cast<ITaskItem>().ToArray() : null;
            ConfigFile = !String.IsNullOrWhiteSpace(configFile) ? configFile : null;
            NonInteractive = nonInteractive;
            Verbosity = verbosity;

            if (timeout > 0)
            {
                Timeout = timeout;
            }

            if (!String.IsNullOrEmpty(toolPath))
            {
                ToolPath = toolPath;
            }

            bool ret = false;

            try
            {
                ret = Execute();

                if (enableOptimization)
                {
                    Log.LogMessage(MessageImportance.Low, "Creating marker file for NuGet package restore optimization: '{0}'", markerPath);

                    string dir = Path.GetDirectoryName(markerPath);

                    using (Mutex mutex = new Mutex(false, markerPath.ToUpper().GetHashCode().ToString("X")))
                    {
                        if (!mutex.WaitOne(TimeSpan.FromMinutes(30)))
                        {
                            return false;
                        }

                        if (!System.IO.File.Exists(markerPath))
                        {
                            if (!String.IsNullOrWhiteSpace(dir) && !Directory.Exists(dir))
                            {
                                Directory.CreateDirectory(dir);
                            }

                            System.IO.File.WriteAllText(markerPath, String.Empty);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.LogErrorFromException(e);
            }

            return ret;
        }
        public bool GenerateNuGetProperties(string file, string[] inputs, string propsFile, string propertyNamePrefix, string propertyValuePrefix)
        {
            BuildEngine = new CBTBuildEngine();

            if (IsFileUpToDate(propsFile, inputs))
            {
                return true;
            }

            NuGetPropertyGenerator nuGetPropertyGenerator = new NuGetPropertyGenerator(file);

            Log.LogMessage(MessageImportance.Low, "Generating MSBuild property file '{0}' for NuGet packages", propsFile);

            nuGetPropertyGenerator.Generate(propsFile, propertyNamePrefix, propertyValuePrefix);

            return true;
        }