在 ASP.NET 核心应用程序中安装包时出错

Error while installing package in ASP.NET core app

我正在使用 VS 2017 创建 ASP.NET 核心 Web 应用程序。安装 Sendgrid 包时,出现以下错误。

Package Sendgrid 8.0.5 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Sendgrid 8.0.5 supports: net (.NETFramework,Version=v0.0) Package Microsoft.AspNet.WebApi.Client 5.2.3 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Microsoft.AspNet.WebApi.Client 5.2.3 supports: net45 (.NETFramework,Version=v4.5) portable-net45+netcore45+wp8+wp81+wpa81 (.NETPortable,Version=v0.0,Profile=wp8+netcore45+net45+wp81+wpa81) Package SendGrid.CSharp.HTTP.Client 3.0.0 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package SendGrid.CSharp.HTTP.Client 3.0.0 supports: net (.NETFramework,Version=v0.0) One or more packages are incompatible with .NETCoreApp,Version=v1.0.`

这个错误有什么解决办法吗?

您可能需要使用 pre-release 版本。

https://www.nuget.org/packages/SendGrid.NetCore/

该错误为您提供了 SendGrid 8.0.5 及其依赖项的支持矩阵。

                                net     net45   portable-net45+netcore45+wp8+wp81+wpa81
SendGrid                         1
Microsoft.AspNet.WebApi.Client            1             1
SendGrid.CSharp.HTTP.Client      1

您可以看到其中 none 个支持核心框架 (netcoreapp) 而需要完整框架 (net)。

如果您要求您的应用在核心框架上 运行,则不能使用 SendGrid 8.0.5。您的选择包括(但不限于)使用 SendGrid.NetCore 或使用 MailKit.

如果您的应用不需要 运行 在核心框架上,并且可以只支持完整框架 (net),那么您可以使用 SendGrid 8.0.5。

对于我们自己的应用程序,我们选择使用 MailKit 版本 1.10.0,因为它比 SendGrid.NetCore 更成熟并且支持核心框架。我们按如下方式使用它:

project.json

"dependencies": {                                                        
    "MailKit": "1.10.0"                                                  
},                                                                       
"frameworks": {                                                          
    "netcoreapp1.1": {}                                                  
}

使用 SendGrid 和 MailKit 发送电子邮件。

var mimeMessage = new MimeMessage();
mimeMessage.From.Add(new MailboxAddress("Admin", "admin@mailbox.com"));
mimeMessage.To.Add(new MailboxAddress("Jon Doe", "jon@doe.com"));
mimeMessage.Subject = "An Email for You!";
mimeMessage.Body = new TextPart("html")
{
    Text = "This is the message.";
};

using (var client = new SmtpClient())
{
    client.ServerCertificateValidationCallback = (s, c, h, e) => true;
    client.Connect("smtp.sendgrid.net", 587);
    await client.AuthenticateAsync("myuser@foobar.com", "ASD43234GDX");    
    await client.SendAsync(mimeMessage);
    client.Disconnect(true);  
}