static void Main(string[] args)
        {
            XML_DIR_PATH = Path.Combine(XML_DIR_PATH, "Documents");

            var xmlDocs = XmlLoaderHelper.LoadXMLDocuments(XML_DIR_PATH);

            if (File.Exists(VALIDATION_ERRORS_FILE_PATH))
            {
                File.Delete(VALIDATION_ERRORS_FILE_PATH);
            }

            var validators = FetchSortedValidators();

            foreach (var validatorItem in validators)
            {
                var type = validatorItem.Value;

                IValidationMessagesCollector errorCollector = (IValidationMessagesCollector)Activator.CreateInstance(type, xmlDocs);

                using (StreamWriter sw = File.AppendText(VALIDATION_ERRORS_FILE_PATH))
                {
                    XadesTValidator valAttr = (XadesTValidator)type.GetCustomAttributes(typeof(XadesTValidator), true)[0];
                    sw.WriteLine("[" + valAttr.ExecutionOrder + "]");
                    sw.WriteLine("###### " + valAttr.ValidationTaskName + " ######\n");

                    foreach (var valError in errorCollector.CollectValidationErrors())
                    {
                        sw.WriteLine("\t" + valError);
                    }
                }
            }
        }
        private static SortedList <int, Type> FetchSortedValidators()
        {
            SortedList <int, Type> validators = new SortedList <int, Type>();

            foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
            {
                if (type.GetCustomAttributes(typeof(XadesTValidator), true).Length > 0)
                {
                    XadesTValidator valAttr = (XadesTValidator)type.GetCustomAttributes(typeof(XadesTValidator), true)[0];
                    validators.Add(valAttr.ExecutionOrder, type);
                }
            }
            return(validators);
        }