c#程序集怎么使用

来源:Vuejs社区作者:Robin头衔:草根站长
导读:本期聚焦于小伙伴创作的《c#程序集怎么使用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《c#程序集怎么使用》有用,将其分享出去将是对创作者最好的鼓励。

C#程序集是.NET平台中代码编译后的基本单位,通常以.dll或.exe文件形式存在,包含编译后的中间语言、元数据和资源等内容,是代码复用、模块拆分和部署的核心载体,掌握其使用方法对提升开发效率很有帮助。

c#程序集怎么使用

程序集的基础概念

程序集可以分为静态程序集和动态程序集两类,静态程序集是提前编译好的文件,动态程序集是在运行时动态生成并存储在内存中的。每个程序集都包含唯一的名称、版本信息、文化信息和公钥标记,这些信息共同构成程序集的完整标识,用于区分不同版本的同名程序集。

静态引用程序集的使用

静态引用是最常用的程序集使用方式,在项目开发阶段就可以完成配置,运行时CLR会自动加载对应的程序集。

添加程序集引用

在Visual Studio中,右键点击项目的引用节点,选择添加引用,在弹出的窗口中可以选择项目引用的其他程序集、NuGet包安装的程序集或者系统自带的程序集,选择完成后点击确定即可完成引用添加。

代码中使用静态引用的程序集

添加引用后,只需要在代码文件顶部使用using指令引入程序集对应的命名空间,就可以直接使用其中定义的类、方法等成员。以下是一个简单的示例,引用自定义的工具类程序集:

// 引入工具类程序集的命名空间
using MyUtils;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 直接使用工具类中的方法
            string result = StringHelper.FormatName("张三", "李四");
            Console.WriteLine(result);
        }
    }
}

动态加载和使用程序集

当需要在运行时根据条件加载不同的程序集,或者加载非项目预引用的程序集时,就需要使用反射相关的API动态操作程序集。

加载程序集

可以使用Assembly类的静态方法加载程序集,常用的方法有LoadLoadFromLoadFile,其中LoadFrom适合加载指定路径的程序集文件。

using System;
using System.Reflection;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 加载指定路径的程序集,注意路径需要是绝对路径或者相对于程序运行目录的路径
                Assembly assembly = Assembly.LoadFrom(@"D:libsMyPlugin.dll");
                Console.WriteLine($"成功加载程序集:{assembly.FullName}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"加载程序集失败:{ex.Message}");
            }
        }
    }
}

使用动态加载的程序集成员

加载程序集后,可以通过反射获取其中的类型,再创建实例、调用方法。以下示例演示如何调用动态加载程序集中的方法:

using System;
using System.Reflection;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 加载程序集
            Assembly assembly = Assembly.LoadFrom(@"D:libsMyPlugin.dll");
            // 获取程序集中的指定类型,需要写全类型名称(命名空间+类名)
            Type pluginType = assembly.GetType("MyPlugin.PluginService");
            if (pluginType != null)
            {
                // 创建类型的实例
                object instance = Activator.CreateInstance(pluginType);
                // 获取类型中的指定方法
                MethodInfo method = pluginType.GetMethod("Execute");
                if (method != null)
                {
                    // 调用方法,传入实例和参数
                    object result = method.Invoke(instance, new object[] { "测试参数" });
                    Console.WriteLine($"方法执行结果:{result}");
                }
            }
        }
    }
}

程序集使用的注意事项

  • 动态加载程序集时需要注意路径的正确性,同时处理可能出现的加载失败异常,避免程序崩溃。
  • 如果程序集有版本依赖,需要确保依赖的程序集也能被正确加载,否则会出现运行时错误。
  • 使用反射调用成员时,需要注意成员的访问权限,私有成员需要设置对应的绑定标志才能访问。
  • 对于不再使用的动态加载程序集,如果需要卸载,需要将程序集加载到独立的应用程序域中,因为默认应用程序域中的程序集无法卸载。

常见应用场景

程序集的使用场景非常广泛,比如插件化开发时,主程序可以动态加载不同插件的程序集实现功能扩展;模块化开发时,将不同功能拆分为独立程序集,方便单独更新和维护;还有代码热更新场景中,通过替换程序集文件实现不用重启程序就更新功能。

C#程序集Assembly类反射动态加载程序集引用修改时间:2026-07-22 14:00:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。