Задача сценария служб SSIS работает только в режиме отладки - PullRequest
0 голосов
/ 31 октября 2018

Я использую VS 2017 и SQL Server 2016 для выполнения этой работы. Я создаю задачу скрипта, которая пытается отправить электронную почту с помощью SendGrid. Если я поставлю точку останова внутри задачи скрипта, у меня не будет проблем с выполнением пакета служб SSIS и получением электронной почты. Однако, если я просто выполню пакет, весь пакет все еще может быть выполнен успешно, но я не смогу получить электронное письмо, которое, как я подозреваю, не выполнится. Ниже приведен код моей задачи сценария

    public void Main()
    {
        string User_Email = Dts.Variables["User::UserEmail"].Value.ToString();
        try
        {
            if (!File.Exists(Dts.Variables["User::OutputPath"].Value.ToString()))
                throw new FileNotFoundException();
            File.Copy(Dts.Variables["User::OutputPath"].Value.ToString(), Dts.Variables["User::DestinationPath"].Value.ToString() + Dts.Variables["User::co_num"].Value.ToString() + ".pdf", true);

            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

            SendGridMailHelper.SendOrderVerification(User_Email, "user name");

        }
        catch (FileNotFoundException)
        {
            MessageBox.Show("The file is not found in the specified location");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }
    static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        if (args.Name.Contains("SendGrid"))
        {
            string path = @"F:\DLL\";
            return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "SendGrid.dll"));
        }
        if (args.Name.Contains("System.Net.Http"))
        {
            string path = @"F:\DLL\";
            return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "System.Net.Http.dll"));
        }
        if (args.Name.Contains("Newtonsoft.Json"))
        {
            string path = @"F:\DLL\";
            return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "Newtonsoft.Json.dll"));
        }
        return null;
    }

На всякий случай я проверил журнал Windows, и он показал ошибку времени выполнения, когда я запускал пакет без добавления контрольных точек. Однако я не могу понять, что это значит. Любые мысли будут очень полезны. Спасибо.

Приложение: DtsDebugHost.exe Версия Framework: v4.0.30319 Описание: процесс был прерван из-за необработанного исключения. Информация об исключении: System.MissingMethodException в ST_b240be27e55248ea869be51aa06a2018.SendGridMailHelper + <_ SendEmail> d__7.MoveNext () at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start [[ST_b240be27e55248ea869be51aa06a2018.SendGridMailHelper + <_ SendEmail> d__7, ST_b240be27e55248ea_ea_e_t_0_1_0_1_1_1_1_0_1_1_1_1_1_1_1) =} в ST_b240be27e55248ea869be51aa06a2018.SendGridMailHelper._SendEmail (System.Collections.Generic.List`1, System.Object, System.String) в ST_b240be27e55248ea869be51aa06a2018.SendGridMailHelper + d__9.MoveNext () в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) в System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) в System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () в System.Threading.ThreadPoolWorkQueue.Dispatch ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...