WebJob SendGridMail Assembly wird nicht geladen

Ich versuche, die SendGrid-Erweiterungen für Azure WebJobs zu verwenden. Ich habe versucht, dem Beispiel zu folgen, aber leider stürzt die WebJob-App mit folgendem Fehler ab:

Datei oder Assembly 'SendGridMail, Version = 6.1.0.0, Culture = neutral, PublicKeyToken = 2ae73662c35d80e4' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die angegebene Datei wurde vom System nicht gefunden

achdem ich vor dem Einsatz von NewtonSofts Json auf etwas Ähnliches gestoßen war, habe ich versucht, das Problem zu beheben, indem ich app.config Folgendes hinzufügte:

<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>

Leider hat das nicht geholfen (selbe Fehlermeldung).

Ich habe festgestellt, dass das WebJobs SendGrid-Erweiterungs-Nuget-Paket eine alte Version von SendGrid (Version 6.1) installiert. Ich versuche jedoch, den Beispielen für WebJob-Erweiterungen zu folgen, und sie haben die folgende using-Anweisung:

using SendGrid.Helpers.Mail;

und leider ist der SendGrid.Helpers.Mail-Namespace in Version 6.1 von SendGrid nicht vorhanden.

Zusätzliche Detail

Basierend auf Toms Feedback deinstallierte ich das SendGrid-Erweiterungs-Nuget-Paket und installierte die erforderlichen Bibliotheken "manuell", indem ich project.json bearbeitete. Das bringt mir die neueste stabile Version jeder Bibliothek ... aber die App stürzt beim Start immer noch mit demselben Fehler ab.

Hier ist der Startcode:

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();
}

Ich folge dem SendGrid-Beispiel und ändere eine Methodensignatur in Functions.cs wie folgt:

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 );
}

Wenn ich UseSendGrid () im App-Startcode nicht aufrufe, erhalte ich eine Ausnahme, wenn die Methodendefinition syntaktisch analysiert wird, und fordere mich auf, UseSendGrid () unbedingt aufzurufen. Aber, wie ich oben erwähnt habe, sprengt UseSendGrid ().

Keine Ausnahme, aber auch keine E-Mail

Basierend auf Toms Beispiel habe ich die Nachrichtenverarbeitungsfunktion so geändert, dass kein out Mail-Parameter verwendet wurde. Die E-Mail wurde einfach innerhalb des Methodentexts erstellt und gesendet:

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() );

Die Konsolen-App wird nun ordnungsgemäß gestartet und der Nachrichtenprozessor wird ordnungsgemäß ausgeführt. Es wird jedoch keine E-Mail gesendet. Besser gesagt, es kommt keine an, und wenn ich mein Dashboard auf SendGrid.com überprüfe, werden keine Aktivitäten aufgezeichnet.

Erfolg

Ich habe es endlich geschafft. Ich glaube, das "letzte" Problem war, dass ich es versäumt hatte, eine Absenderadresse für die E-Mail anzugeben, die ich gerade erstellte. Sobald ich das getan habe, hat es wie ein Zauber funktioniert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage