WebJob не загружает сборку SendGridMail

Я пытаюсь использовать расширения SendGrid для веб-заданий Azure. Я попытался последовать примеру, но, к сожалению, приложение WebJob вылетает со следующей ошибкой:

Не удалось загрузить файл или сборку 'SendGridMail, версия = 6.1.0.0, культура = нейтральная, PublicKeyToken = 2ae73662c35d80e4' или одна из ее зависимостей. Система не может найти указанный файл.

Однажды столкнувшись с чем-то похожим, прежде чем задействовать Json из NewtonSoft, я попытался исправить проблему, добавив в app.config следующее:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="SendGridMail" publicKeyToken="2ae73662c35d80e4" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

К сожалению, это не помогло (то же сообщение об ошибке).

Я заметил, что пакет nuget расширения WebJobs SendGrid устанавливает старую версию SendGrid (v6.1). Но я пытаюсь следовать примерам расширений WebJob, и у них есть следующее выражение using:

using SendGrid.Helpers.Mail;

и, к сожалению, пространство имен SendGrid.Helpers.Mail не существует в v6.1 SendGrid.

дополнительные детали

Основываясь на отзывах Тома, я удалил пакет nuget расширений SendGrid и установил необходимые библиотеки «вручную», отредактировав project.json. Это дает мне последнюю стабильную версию каждой из библиотек ... но приложение все равно падает при запуске с той же ошибкой.

Вот код запуска:

public static void Main(string[] args)
{
    var config = new JobHostConfiguration()
    {
        NameResolver = new QueueNameResolver( new AzureContext() ),
    };

    if( config.IsDevelopment )
    {
            config.UseDevelopmentSettings();
    }

    config.Tracing.ConsoleLevel = TraceLevel.Info;

    // this is the line where the exception gets thrown
    config.UseSendGrid();

    JobHost host = new JobHost( config );

    host.RunAndBlock();
}

Я следую примеру SendGrid, изменяя подпись метода в Functions.cs следующим образом:

public static void ProcessPhoneFileMessage(
        [QueueTrigger( "%" + nameof( ContainerQueueConstants.PhoneFiles ) + "%" )] AgencyOutreachMessage msg,
        [SendGrid] out Mail message
        )
{
    StringWriter swLogger = new StringWriter();

    try
    {
        GeneratePhoneFileJob fmJob = new GeneratePhoneFileJob( swLogger, msg );

        fmJob.Execute();
    }
    catch( Exception e )
    {
        swLogger.WriteLine( $"{nameof( GeneratePhoneFileJob )} triggered an exception, message was: {e.Message}" );
    }

    message = new Mail();

    message.Subject = "Phone File Job";
    message.AddContent( new Content( "text/plain", "Completed the Phone File Job" ) );
    message.AddContent( new Content( "text/plain", swLogger.ToString() ) );

    Personalization personalization = new Personalization();
    personalization.AddTo(new Email("[email protected]", "Mark Olbert") );
    message.AddPersonalization( personalization );
}

Если я не выполняю вызов UseSendGrid () в коде запуска приложения, я получаю исключение, когда определение метода является синтаксическим анализом, сообщая, что я обязательно должен использовать UseSendGrid (). Но, как я уже отмечал выше, UseSendGrid () взрывается.

Нет исключений, но нет и электронной почты

Основываясь на примере Тома, я изменил функцию обработки сообщений, чтобы она не использовала параметр out Mail, а просто создал и отправил электронное письмо из тела метода:

SendGridAPIClient sg = new SendGridAPIClient( "redacted" );
Mail message = new Mail();

message.Subject = "Phone File Job";
message.AddContent( new Content( "text/plain", "Completed the Phone File Job" ) );
message.AddContent( new Content( "text/plain", swLogger.ToString() ) );

Personalization personalization = new Personalization();
personalization.AddTo(new Email("redacted", "Mark Olbert") );
message.AddPersonalization( personalization );

sg.client.mail.send.post( requestBody: message.Get() );

Консольное приложение теперь нормально запускается, а процессор сообщений работает нормально ... но электронная почта не отправляется. Или, скорее, ни один не приходит, и когда я проверяю свою панель мониторинга на SendGrid.com, нет никаких записей о какой-либо активности.

Успех!

Я наконец получил это, чтобы работать. Я считаю, что «последняя» проблема заключалась в том, что я не указывал адрес электронной почты, который я создавал. Как только я это сделал, это сработало как шарм.

Ответы на вопрос(1)

Ваш ответ на вопрос