Я использую 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 ()