You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core部署至Windows Server遇程序集加载失败问题求助

解决ASP.NET Core部署Windows Server时SendGrid类库加载失败的问题

我之前在部署ASP.NET Core应用到Windows Server时,也碰到过类似的类库加载问题,尤其是涉及SendGrid这类第三方NuGet包的情况。结合我的排查经验,给你几个实用的解决方向:

  • 检查部署模式与依赖拷贝配置
    ASP.NET Core有框架依赖(FDD)和独立部署(SCD)两种模式:

    • 如果是框架依赖部署,先确认服务器上安装的.NET Core运行时版本和你本地开发环境完全一致;
    • 如果是独立部署,要么发布时勾选**“包含所有项目依赖项”**,要么直接在项目的.csproj文件里添加以下配置,确保所有NuGet依赖的DLL都能被拷贝到发布目录:
      <PropertyGroup>
        <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
      </PropertyGroup>
      
  • 核对程序集版本是否匹配
    有时候本地开发用的SendGrid版本和实际发布到服务器的版本不一致,或者项目里其他依赖间接引用了不同版本的SendGrid。你可以:

    1. 打开项目的obj/project.assets.json文件,搜索SendGrid确认实际引用的版本是不是9.11.0.0;
    2. 去服务器的发布目录里找到SendGrid.dll,右键→属性→详细信息,查看文件版本是否和报错里的一致;
    3. 如果版本不匹配,先执行dotnet clean清理解决方案,再重新发布试试。
  • 排查程序集绑定冲突
    Windows Server可能存在GAC(全局程序集缓存)里的旧版本SendGrid和你项目依赖版本冲突的情况,或者需要手动配置程序集绑定重定向。可以在项目的web.config里添加以下配置:

    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="SendGrid" publicKeyToken="4f047e93159395ca" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-9.11.0.0" newVersion="9.11.0.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    

    同时确认服务器的GAC里没有安装SendGrid,避免系统优先加载GAC里的旧版本。

  • 启用详细日志定位根因
    如果上面的方法都没解决,可以开启程序集加载的详细日志,看看是不是SendGrid的依赖DLL缺失了。在Program.cs里添加日志配置:

    using System.Diagnostics;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(logging =>
            {
                logging.AddDebug();
                logging.SetMinimumLevel(LogLevel.Trace);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    

    然后查看服务器事件查看器里的应用程序日志,或者.NET Core的跟踪日志,里面会显示程序集加载时的详细路径和错误细节。

  • 重新发布并验证文件完整性
    有时候手动拷贝或者FTP上传发布文件时,会出现文件缺失的情况。建议用dotnet publish命令重新生成发布包,然后把整个发布目录完整复制到服务器,覆盖原有文件,确保所有依赖文件都被正确拷贝。


内容的提问来源于stack exchange,提问作者Gabriel Hermida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:26:06