public static void CallGacUtil(GacUtilOperation operation, string assemblyOrDll)
        {
            if (string.IsNullOrWhiteSpace(assemblyOrDll)) throw new ArgumentNullException("assemblyOrDll", "Assembly/Dll argument cannot be null");
            if (operation == GacUtilOperation.Install && !assemblyOrDll.EndsWith(".dll")) throw new ArgumentException("assemblyOrDll", "Dll file must be supplied when installing with gacutil");

            using (var p = Process.Start(new ProcessStartInfo()
            {
                FileName = Constants.DefaultGacUtilPath,
                Arguments = string.Format("/{0} \"{1}\"", Constants.OperationArgs[operation], assemblyOrDll),
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                RedirectStandardInput = true,
                CreateNoWindow = true,
            }))
            {
                var gacoutput = string.Empty;
                while (!p.StandardOutput.EndOfStream) gacoutput += "\n" + p.StandardOutput.ReadLine();
                if (string.IsNullOrWhiteSpace(gacoutput))
                {
                    string error = p.StandardError.ReadToEnd();
                    if (!string.IsNullOrWhiteSpace(error)) throw new Exception("GacUtil error: " + error);
                }
                if (operation == GacUtilOperation.Install && !gacoutput.Contains("Assembly successfully added to the cache") ||
                    (operation != GacUtilOperation.Install && !gacoutput.Contains("Number of failures = 0")))
                {
                    throw new Exception("GacUtil failure, please check output:\n" + gacoutput);
                }
            }
        }
        public static void CallGacUtil(GacUtilOperation operation, string assemblyOrDll)
        {
            if (string.IsNullOrWhiteSpace(assemblyOrDll))
            {
                throw new ArgumentNullException("assemblyOrDll", "Assembly/Dll argument cannot be null");
            }
            if (operation == GacUtilOperation.Install && !assemblyOrDll.EndsWith(".dll"))
            {
                throw new ArgumentException("assemblyOrDll", "Dll file must be supplied when installing with gacutil");
            }

            using (var p = Process.Start(new ProcessStartInfo()
            {
                FileName = Constants.DefaultGacUtilPath,
                Arguments = string.Format("/{0} \"{1}\"", Constants.OperationArgs[operation], assemblyOrDll),
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                RedirectStandardInput = true,
                CreateNoWindow = true,
            }))
            {
                var gacoutput = string.Empty;
                while (!p.StandardOutput.EndOfStream)
                {
                    gacoutput += "\n" + p.StandardOutput.ReadLine();
                }
                if (string.IsNullOrWhiteSpace(gacoutput))
                {
                    string error = p.StandardError.ReadToEnd();
                    if (!string.IsNullOrWhiteSpace(error))
                    {
                        throw new Exception("GacUtil error: " + error);
                    }
                }
                if (operation == GacUtilOperation.Install && !gacoutput.Contains("Assembly successfully added to the cache") ||
                    (operation != GacUtilOperation.Install && !gacoutput.Contains("Number of failures = 0")))
                {
                    throw new Exception("GacUtil failure, please check output:\n" + gacoutput);
                }
            }
        }