/// <inheritdoc />
        public bool Execute()
        {
            try
            {
                if (!Directory.Exists(DestinationFolder))
                {
                    Directory.CreateDirectory(DestinationFolder);
                }

                AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve;

                LoadDependentAssemblies(SourceAssemblyPath, GetIgnoreFiles());

                //load target assembly
                var assembly = Assembly.ReflectionOnlyLoadFrom(SourceAssemblyPath);

                var types = GetTypesWithSqlTypeAttribute(assembly);

                var headerText = GetHeaderText();

                foreach (var type in types)
                {
                    var generatedType = SqlGenerator.GenerateUserType(type.UserType, type.SqlUserTypeAttributeData);

                    var generatedSql = BuildSqlText(generatedType);

                    var targetFile = Path.ChangeExtension(Path.Combine(DestinationFolder, GetSafeFilename(generatedType.TypeName)), "sql");

                    File.WriteAllText(targetFile, headerText + generatedSql, Encoding.UTF8);
                }

                return(true);
            }
            catch (ReflectionTypeLoadException exc)
            {
                var msg = FaultHelper.GetMessage(exc);
                BuildEngine.LogErrorEvent(FaultHelper.CreateErrorEvent(FaultHelper.AssemblyLoadError, SourceAssemblyPath, msg));
            }
            catch (Exception exc)
            {
                var msg = FaultHelper.GetMessageCore(exc);
                BuildEngine.LogErrorEvent(FaultHelper.CreateErrorEvent(FaultHelper.GeneralError, SourceAssemblyPath, msg));
            }

            return(false);
        }