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

.NET 6 ASP.NET Core Web API无法通过Windsor注册.NET Framework 4.8类库

问题:Castle Windsor在.NET Core Web API中无法加载程序集

场景描述

相同的组件注册代码在单元测试项目中运行正常,但在.NET Core Web API项目中报错。Web API项目的Program.cs代码如下:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
IWindsorContainer container = new WindsorContainer(new XmlInterpreter("Windsor.config"));
container.Resolve<IDataProvider>();

错误信息

Castle.MicroKernel.SubSystems.Conversion.ConverterException
  HResult=0x80131500
  Message=Could not convert string 'MyProject.DataAccess.DataProviders.PDataProvider, MyProject.DataAccess, Version=1.0.0.0, Culture=neutral' to a type. Assembly was not found. Make sure it was deployed and the name was not mistyped.
  Source=Castle.Windsor
  StackTrace:
   at Castle.MicroKernel.SubSystems.Conversion.TypeNameConverter.GetType(String name)
   at Castle.MicroKernel.SubSystems.Conversion.TypeNameConverter.PerformConversion(String value, Type targetType)
   at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion(String value, Type targetType)
   at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion[TTarget](String value)
   at Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container, IConversionManager converter)
   at Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer container, IConfigurationStore store)
   at Program.<Main>$(String[] args) in C:\source\repos\F2\MyProject.F2\Program.cs:line 8

Windsor配置文件(Windsor.config)

<?xml version="1.0" encoding="utf-8" ?>
<castle>
    <components>
        <component id="DataProvider" 
                   service="MyProject.Interfaces.DataProviders.IDataProvider, MyProject.Interfaces" 
                   type="MyProject.DataAccess.DataProviders.PDataProvider, MyProject.DataAccess, Version=1.0.0.0, Culture=neutral"></component>
    </components>
</castle>

已尝试操作

  • 手动将MyProject.DataAccess.dll复制到Debug和Release的/bin目录
  • 怀疑问题源于程序集位置未被Web API识别,或是.NET Framework 4.8版本兼容性问题

排查建议

  1. 校验程序集版本与配置匹配
    右键MyProject.DataAccess.dll→属性→详细信息,确认实际版本、文化信息和配置中的Version=1.0.0.0, Culture=neutral完全一致,避免版本号或拼写错误。

  2. 调整.NET Core程序集加载方式
    .NET Core的程序集加载逻辑和.NET Framework不同,手动拷贝的DLL可能不在默认加载路径内:

    • 直接将MyProject.DataAccess项目添加为Web API项目的引用,让构建系统自动管理依赖复制
    • 代码中先手动加载目标程序集,再初始化Windsor容器:
      var dataAccessDllPath = Path.Combine(AppContext.BaseDirectory, "MyProject.DataAccess.dll");
      Assembly.LoadFrom(dataAccessDllPath);
      var container = new WindsorContainer(new XmlInterpreter("Windsor.config"));
      
  3. 确认Windsor版本兼容性
    检查使用的Castle Windsor版本是否支持.NET Core,旧版本对.NET Core支持有限,建议升级到7.x及以上的稳定版本。

  4. 简化配置中的程序集标识
    暂时移除配置中的版本和文化信息,只保留程序集名称,排除因版本/文化不匹配导致的加载失败:

    <component id="DataProvider" 
               service="MyProject.Interfaces.DataProviders.IDataProvider, MyProject.Interfaces" 
               type="MyProject.DataAccess.DataProviders.PDataProvider, MyProject.DataAccess">
    </component>
    
  5. 检查程序集依赖完整性
    使用dotnet list package或第三方依赖分析工具,检查MyProject.DataAccess.dll是否存在缺失的依赖项,.NET Core下缺失依赖也会引发加载失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:10:40