.net core .NET Core 3-SmtpClient在MVC项目中失败,PublishTrimmed=true

.net core .NET Core 3-SmtpClient在MVC项目中失败,PublishTrimmed=true,.net-core,visual-studio-code,asp.net-core-mvc,csproj,.net Core,Visual Studio Code,Asp.net Core Mvc,Csproj,具体内容: 使用SmtpClient的dot net core 3 mvc项目 作为单个文件发布,已修剪(在csproj文件中为PublishTrimmed true) 步骤: 创建新的dotnetcore 3项目: dotnet新mvc 在HomeController.cs中,在Index()下添加一个空白SmtpClient命令: public IActionResult Index() { 使用(SmtpClient=new SmtpClient()) { } 返回视图(); }

具体内容:

  • 使用SmtpClient的dot net core 3 mvc项目
  • 作为单个文件发布,已修剪(在csproj文件中为PublishTrimmed true)
步骤: 创建新的dotnetcore 3项目:

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

public IActionResult Index()
{
使用(SmtpClient=new SmtpClient())
{
}
返回视图();
}
修改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>
<ItemGroup>
  <TrimmerRootAssembly Include="System.Net.Mail" />
</ItemGroup>
运行,然后导航到/

错误消息:

System.TypeLoadException:无法从程序集“Microsoft.AspNetCore,版本=3.0.0.0,区域性=中性,PublicKeyToken=adb9793829ddae60”加载类型“System.Net.Mail.SmtpClient”。
在PubTrimmedSmtpIssue.Controllers.HomeController.Index()处
如果在csproj中删除PublishTrimmed或将其切换为false,则项目将正常运行。

你知道为什么PublishTrimmed会导致错误吗?

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

您可以在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>
<ItemGroup>
  <TrimmerRootAssembly Include="System.Net.Mail" />
</ItemGroup>


您使用的是System.Net.Mail还是MailKit?我确实知道System.Net.Mail已被Microsoft弃用。事实上,它已被弃用。感谢您提供的信息,我将继续研究使用MailKit,但仍然保留此选项,因为SmtpClient仍然是核心和dn标准框架的一部分。@R.StackUser我看到
System.Net.Mail
尚未被弃用。这是文档中的一个bug。谢谢你澄清这一点。不确定这是你的问题的一部分。我希望你能找到一个解决问题的办法。@TanvirArjeI,微软文档声明它已经过时了:谢谢,这解决了原来的问题。太好了。您可能仍然应该报告它,例如,以确保它对致力于使运行时更为链接器友好的团队具有一定的可见性。即使它会被标记为其他东西的复制品。