public static void Dotfuscator(this ICakeContext context, string assembly, DotfuscatorSettings settings)
 {
     if (assembly == null)
     {
         throw new ArgumentNullException("assembly");
     }
     Dotfuscator(context, new string[] { assembly }, settings);
 }
        public static void Dotfuscator(this ICakeContext context, IEnumerable <string> assemblies, DotfuscatorSettings settings)
        {
            if (assemblies == null)
            {
                throw new ArgumentNullException("assemblies");
            }
            if (assemblies.Count() == 0)
            {
                throw new ArgumentNullException("assemblies");
            }

            if (settings.WorkingDirectory == null || !context.FileSystem.Exist(settings.WorkingDirectory))
            {
                throw new CakeException("Dotfuscator : WorkingDirectory is required but not specified.");
            }

            if (settings.OutputDir == null || !context.FileSystem.Exist(settings.OutputDir))
            {
                throw new CakeException("Dotfuscator : OutputDir is required but not specified.");
            }


            if (settings.OutputDir.IsRelative)
            {
                settings.OutputDir = settings.OutputDir.MakeAbsolute(context.Environment);
            }

            var runner = new DotfuscatorRunner(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools, context.Log);

            foreach (var assembly in assemblies)
            {
                var path = settings.WorkingDirectory.CombineWithFilePath(new FilePath(assembly));
                if (!context.FileSystem.Exist(path))
                {
                    const string format  = "{0}: The assembly '{1}' do not exist.";
                    var          message = string.Format(CultureInfo.InvariantCulture, format, "dotfuscator", path);
                    throw new CakeException(message);
                }
            }

            runner.Run(assemblies, settings);
        }