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

C#中无法访问.dll内类:加载程序集后获取类型抛出依赖异常

问题分析与解决办法

你的问题核心是类库的依赖项(System.Runtime 6.0.0.0)未被正确加载,虽然Assembly.Load()成功加载了ClassLibrary1.dll,但CLR在解析该类库的依赖时找不到对应的System.Runtime版本,导致调用GetTypes()时抛出反射加载异常。

以下是具体解决步骤:

1. 统一项目的.NET目标框架版本

检查类库项目(ClassLibrary1)和主项目(First_dll_just_connectLib_96)的目标框架是否一致:

  • 右键类库项目 → 属性 → 应用 → 目标框架
  • 右键主项目 → 属性 → 应用 → 目标框架
    确保两者使用相同的.NET版本(比如都是.NET 6,或都是.NET Framework 4.8)。跨版本引用(如.NET Core类库引用到.NET Framework项目)会引发依赖项不兼容问题。

2. 正确添加项目引用,避免手动复制DLL

不要手动将ClassLibrary1.dll复制到主项目的Debug目录:

  • 在主项目中右键“依赖项” → 添加项目引用 → 选择ClassLibrary1项目
    这样Visual Studio会自动处理依赖项的复制,确保所有必要的DLL(包括System.Runtime)都被同步到主项目的输出目录。

如果必须引用已编译的DLL文件:

  • 右键添加引用 → 浏览选择ClassLibrary1.dll
  • 选中该引用 → 在属性窗口中设置“复制本地”为True,其依赖项会被自动复制到输出目录。

3. 安装缺失的依赖NuGet包

如果主项目缺少System.Runtime 6.0.0.0,直接通过NuGet安装对应版本:
打开Package Manager Console执行:

Install-Package System.Runtime -Version 6.0.0

或使用.NET CLI:

dotnet add package System.Runtime --version 6.0.0

4. 改用Assembly.LoadFrom()加载DLL

如果需要手动加载DLL,使用Assembly.LoadFrom()指定DLL的完整路径,CLR会从该路径所在目录加载依赖项:

// 替换为你的ClassLibrary1.dll实际路径
as1 = Assembly.LoadFrom(@"C:\Projects\First_dll_just_connectLib_96\bin\Debug\ClassLibrary1.dll");

调整后的主项目代码示例:

using System;
using System.Reflection;

namespace First_dll_just_connectLib_96
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Assembly as1;

            try
            {
                // 使用LoadFrom指定DLL路径
                as1 = Assembly.LoadFrom(@"bin\Debug\ClassLibrary1.dll");
                Console.WriteLine("ClassLibrary1 exists");
            }
            catch (Exception e)
            {
                Console.WriteLine($"加载DLL失败:{e.Message}");
                Console.ReadLine();
                return;
            }

            Type[] types;
            try
            {
                types = as1.GetTypes();
            }
            catch (ReflectionTypeLoadException e)
            {
                foreach (Exception ex in e.LoaderExceptions)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.ReadLine();
                return;
            }

            foreach (Type t in types)
            {
                Console.WriteLine(t.Name);
            }
            Console.ReadLine();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:25:22