【问题标题】:.NET Core 3 - SmtpClient fails in MVC project with PublishTrimmed=true.NET Core 3 - SmtpClient 在 MVC 项目中失败,PublishTrimmed=true
【发布时间】:2019-11-15 00:36:17
【问题描述】:

具体说明:

  • dot net core 3 mvc 项目使用 SmtpClient
  • 作为单个文件发布,修剪(在 csproj 文件中发布修剪为 true)

步骤: 创建新的 dotnetcore 3 项目:

dotnet new mvc

在 HomeController.cs 中,在 Index() 下添加一个空白的 SmtpClient 命令:

public IActionResult Index()
        {
            using (SmtpClient client = new SmtpClient())
            {
            }
            return View();
        }

为单个文件修改 csproj 文件,修剪,输出运行时。 csproj 文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishTrimmed>false</PublishTrimmed>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  </PropertyGroup>


  <ItemGroup>
  </ItemGroup>

</Project>

发布命令:

dotnet publish

运行,然后导航到 /

错误信息:

System.TypeLoadException: Could not load type 'System.Net.Mail.SmtpClient' from assembly 'Microsoft.AspNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
at PubTrimmedSmtpIssue.Controllers.HomeController.Index()

如果我在 csproj 中删除 PublishTrimmed 或将其切换为 false,则项目可以正常运行。


关于 PublishTrimmed 为什么会导致错误的任何想法?

【问题讨论】:

  • 您使用的是 System.Net.Mail 还是 MailKit?我知道 System.Net.Mail 已被 Microsoft 弃用。
  • 确实,它已被弃用。感谢您提供的信息,我会考虑继续使用 MailKit,但仍然保持开放状态,因为 SmtpClient 仍然是核心和 dn 标准框架的一部分。
  • @R.StackUser 我看到System.Net.Mail 没有被弃用。这是文档中的一个错误。 github.com/dotnet/dotnet-api-docs/issues/2986
  • 谢谢你的澄清。不确定这是您问题的一部分。希望您能找到问题的解决方案。
  • @TanvirArjeI,微软文档声明它已过时:docs.microsoft.com/en-us/dotnet/api/…

标签: .net-core visual-studio-code asp.net-core-mvc csproj


【解决方案1】:

显然,在你的情况下,修剪器修剪得太多了。

您可以在 csproj 文件中自定义修剪行为:

<ItemGroup>
  <TrimmerRootAssembly Include="System.Net.Mail" />
</ItemGroup>

【讨论】:

  • 谢谢,这解决了原来的问题。
  • 太棒了。您可能仍然应该报告它,例如github.com/dotnet/corefx 以确保它对致力于使运行时更加链接器友好的团队有所了解。即使它会被标记为其他内容的副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2023-04-03
  • 2017-03-31
  • 2017-10-19
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多