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

ASP.NET (.NET Framework)配置Ninject通过环境变量加载程序集实现AutoMapper映射

解决方案

你只需要调整程序集解析事件的注册时机,确保它在所有依赖第三方程序集的逻辑执行前生效即可,具体修改如下:

第一步:全局注册程序集解析逻辑

打开你项目的Global.asax.cs文件,在Application_Start方法的最开头添加你写的程序集解析逻辑,确保早于WebApi配置、Ninject容器初始化的执行顺序:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // 最先注册程序集解析事件
        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
        
        // 原有启动逻辑保持不变
        GlobalConfiguration.Configure(WebApiConfig.Register);
        // 其他原有启动逻辑,比如路由注册、过滤器注册等
    }
    
    static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var assemblyName = new System.Reflection.AssemblyName(args.Name);
        var basePath = Environment.GetEnvironmentVariable("PERCURSOSGP100", EnvironmentVariableTarget.Machine);
        // 校验环境变量是否存在,避免路径拼接错误
        if (string.IsNullOrEmpty(basePath)) return null;
        
        var assemblyFullName = System.IO.Path.Combine(basePath, assemblyName.Name + ".dll");
        if (System.IO.File.Exists(assemblyFullName))
            return System.Reflection.Assembly.LoadFile(assemblyFullName);
        return null;
    }
}

第二步:校验Ninject配置

你现有NinjectResolver里的AutoMapper注册逻辑无需修改,因为程序集解析事件已经提前注册,当AutoMapper初始化MappingProfile、需要加载第三方DLL中的BasBECliente等类型时,会自动触发你注册的解析逻辑,从环境变量指定的路径加载对应DLL。

注意事项

  • 确保IIS应用池的运行身份拥有PERCURSOSGP100对应路径的读取权限,否则会出现DLL加载失败的问题
  • 你项目中引用的第三方DLL版本,要和环境变量路径下的DLL版本完全一致,避免程序集版本不匹配报错
  • 不要在其他地方重复注册AssemblyResolve事件,避免重复加载同一程序集导致类型转换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:57:03