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

为何ASP.NET Core 2在.NET 4.7.1环境下无法自动加载依赖程序集?

解决ASP.NET Core 2无法自动加载完整.NET Framework依赖项目中控制器的问题

这个问题我之前也碰到过,确实是ASP.NET Core 2在程序集扫描逻辑上的一个小差异——它对.NET Standard程序集的控制器发现是默认启用的,但针对基于完整.NET Framework的依赖程序集,就需要我们手动配置一下ApplicationPartManager来让它识别这些程序集里的控制器。

为什么会出现这个差异?

ASP.NET Core 2的控制器发现机制依赖ApplicationPartManager,默认情况下它会自动扫描主应用程序集以及所有引用的.NET Standard程序集,因为这些程序集的兼容性模型和ASP.NET Core的加载上下文匹配。但完整.NET Framework的程序集运行在不同的加载环境下,默认不会被纳入自动扫描范围,所以里面的控制器就没法被自动识别。

具体解决步骤

你可以通过以下两种方式手动把完整.NET Framework的依赖程序集添加到控制器扫描范围内:

方法1:直接添加程序集到ApplicationParts

在Startup.cs的ConfigureServices方法里,手动加载依赖程序集并添加到ApplicationPartManager中:

using System.Reflection;
using Microsoft.AspNetCore.Mvc.ApplicationParts;

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .ConfigureApplicationPartManager(manager =>
        {
            // 加载你的完整.NET Framework依赖程序集
            // 这里可以用程序集名称,或者通过类型直接获取
            var dependentAssembly = Assembly.Load("YourDependentAssemblyName");
            // 将程序集添加为AssemblyPart
            manager.ApplicationParts.Add(new AssemblyPart(dependentAssembly));
        });
}

方法2:通过依赖项目中的控制器类型添加

如果知道依赖项目里的某个控制器类型,也可以直接通过该类型来获取程序集并添加,这样更不容易出错:

using Microsoft.AspNetCore.Mvc;

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        // 替换成你依赖项目里的任意控制器类型
        .AddApplicationPart(typeof(YourDependentController).Assembly);
}

额外注意事项

  • 确保你的完整.NET Framework依赖项目的目标版本和主Web应用一致(都是4.7.1),避免出现版本兼容性问题;
  • 如果你的依赖项目里还包含视图等其他组件,可能需要额外配置RazorViewEngine,但针对控制器的话,上面的配置就足够了。

内容的提问来源于stack exchange,提问作者Markus S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:37:34