C#高级:通过 Assembly 类加载 DLL 和直接引用DLL的方法大全

一、主项目不添加引用

(主项目不添加引用,而是通过路径获取指定dll)

1.打印类的属性名称

namespace ReflectionDemo
{class Program{static void Main(string[] args){// 指定【编译输出】的项目类库dll(启动项目编译输出目录下的dll)string assemblyPath = @"F:\Personal\demo\bin\Debug\net5.0\BuildDatabaseTable.dll";// 指定【类名.命名空间】string className = "BuildDatabaseTable.DataSchoolDto";           PrintFieldNames(assemblyPath, className);}public static void PrintFieldNames(string assemblyPath, string className){try{// 加载指定路径的程序集Assembly assembly = Assembly.LoadFrom(assemblyPath);// 打印所有类库下的所有类var classList = assembly.ExportedTypes.ToList();var classNameList = classList.Select(x => x.FullName).ToList();Console.WriteLine(string.Join("\n", classList));// 获取指定类的类型Type type = assembly.GetType(className);if (type != null){// 获取类的所有属性var fields = type.GetProperties();// 打印每个属性的名称Console.WriteLine($"{className}的属性有:");foreach (var field in fields){Console.WriteLine(field.Name);}}else{Console.WriteLine($"未找到这个类:{className} ");}}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}}}}

2.调用相应方法

namespace ReflectionDemo
{class Program{static void Main(string[] args){// 指定【编译输出】的项目类库dll(启动项目编译输出目录下的dll)string assemblyPath = @"F:\Personal\demo\bin\Debug\net5.0\BuildDatabaseTable.dll";// 指定【类名.命名空间】string className = "BuildDatabaseTable.DataSchoolDto";  // 指定【方法名称】string methodName = "ProcessInt";// 调用方法CallMethod(assemblyPath, className, methodName, 5);}public static void CallMethod(string assemblyPath, string className, string methodName, params object[] parameters){try{// 加载指定路径的程序集Assembly assembly = Assembly.LoadFrom(assemblyPath);// 获取类的类型Type type = assembly.GetType(className);if (type == null){Console.WriteLine($"无法找到类:{className}");return;}// 判断类是否为静态类bool isStatic = type.IsAbstract && type.IsSealed;// 获取方法信息MethodInfo method = type.GetMethod(methodName);if (method == null){Console.WriteLine($"未找到方法 {methodName}");return;}// 如果是静态方法,直接调用if (isStatic){object result = method.Invoke(null, parameters);Console.WriteLine($"静态方法调用结果:{result}");}else{// 非静态方法,先创建实例object instance = Activator.CreateInstance(type);object result = method.Invoke(instance, parameters);Console.WriteLine($"非静态方法调用结果:{result}");}}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}}}}

【注意】:如果是同一个解决方案下的类库相互加载、引用,不需要写完整路径,可直接写dll 

跨解决方案:
string assemblyPath = @"F:\Personal\demo\bin\Debug\net5.0\BuildDatabaseTable.dll";
同一解决方案,可以写为:
string assemblyPath = @"BuildDatabaseTable.dll";

二、主项目添加引用

1.添加项目引用

2.使用引用

static void Main(string[] args)
{try{//调用方法(dll名称.类名)var res = BuildDatabaseTable.Program.ProcessInt(3);Console.WriteLine(res);//获取实例(dll名称.类名)var entity = new BuildDatabaseTable.DistrictSandData();entity.Id = 1;}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法,将外界的天地灵气吸入体内,初步改造身体,使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

音视频入门基础:RTP专题(4)——FFmpeg源码中,判断某文件是否为SDP文件的实现

一、引言 执行《音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流》中的“媒体文件转推RTP的FFmpeg命令”会生成一个SDP文件,该文件内容如下: v0 o- 0 0 IN IP4 127.0.0.1 sNo Name t0 0 atool:libavformat 61…

【大数据2025】Hadoop 万字讲解

文章目录 一、大数据通识大数据诞生背景与基本概念大数据技术定义与特征大数据生态架构概述数据存储数据计算与易用性框架分布式协调服务和任务调度组件数仓架构流处理架构 二、HDFSHDFS 原理总结一、系统架构二、存储机制三、数据写入流程四、心跳机制与集群管理 安全模式&…

“深入浅出”系列之音视频开发:(3)岗位要求

算法工程师-视频编解码 职位描述 在这里,你将参与JVET / VVC的下一代视频编码标准设计和算法研究; 在这里,你将参与视频编码(包括但不限于VVC/AV1/AVS3)优化:通过信号处理和机器学习的快速编码决策、数据…

电脑换固态硬盘

参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…

回顾2024年在CSDN的成长

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN:编程新手的避风港初学者的福音:细致入微的知识讲解考试复习神器:技术总结的“救命指南”曾经的自己:为何迟迟不迈出写博客的第一步兴趣萌芽:从“读”到“想写”的初体验…

抖音ip属地不准是什么原因?可以改吗

在数字化时代,社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着各大平台对用户隐私和数据安全的日益重视,IP属地的显示功能应运而生。然而,不少抖音用户在使用过程中发现,显示的IP属地与实际位置存在偏差,这…

Win11 安装与配置 Java环境 JDK(以JDK11为例)

0,下载JDK 访问JDK官网:Java Downloads | Oracle 选择对应版本进行下载,目前21和23都是可以直接下载的 但是如果需要下载旧版本,往下拉找到要下载的版本,不过这时候下载就需要登录账号了,注册一个就成 2&…

LabVIEW串口通信调试与数据接收问题

在使用LabVIEW进行串口通信时,常常会遇到无法接收数据的情况。这可能与串口设置、连接、设备响应等多方面因素相关。本文将详细讨论如何使用LabVIEW进行串口通信,并提供常见问题的排查与解决方法,帮助用户更高效地进行数据接收调试。通过调整…

Ansible自动化运维:基础与实践

在当今的IT运维领域,Ansible作为一款强大的自动化运维工具,正发挥着日益重要的作用。本文将详细介绍Ansible的相关知识,包括其作用、特点、安装配置以及常用模块的使用方法,旨在帮助读者快速上手并熟练运用Ansible进行自动化运维工…

概率扩散去噪模型DDPM

文章目录 摘要abstract高斯噪声扩散模型正向过程逆向过程 论文阅读论文创新点解决的问题 总结参考文献 摘要 本周主要学习了高斯噪声在扩散模型中的应用及相关算法实现。扩散模型受到自然现象的启发,通过在图像中引入高斯噪声,模拟出扩散效果&#xff0…

Python操作Excel——openpyxl使用笔记(3)

3 单元格基本操作 3.1 访问单元格和读写其内容 在前面的例子中,已经简单演示过了向单元格中写入和读取数据。这里进一步提供访问单元格的一些方法。和前面一样,使用工作表的索引方式,可以快速定位一个单元格: import openpyxl w…

2025.1.18机器学习笔记:PINN文献精读

第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一:直道稳定流条件实验二:环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目:《Enhanced physics-informed neural net…

【学习笔记】Macbook管理多个不同的Python版本

在MacBook上管理不同项目的不同Python版本,可以使用多种方法。以下是一些常见的方法: 1. 使用 pyenv pyenv 是一个非常流行的工具,可以让你轻松安装和切换多个Python版本。以下是安装和使用 pyenv 的步骤: 安装 pyenv 安装依赖…

redhat安装docker 24.0.7

1、下载docker镜像包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz 2、解压 tar -xvf docker-24.0.7.tgz 3、解压的docker文件夹全部移动至/usr/bin目录 cd docker cp -p docker/* /usr/bin 4、注册服务 vi /usr/lib/systemd/syste…

CSS 的基础知识及应用

前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…

Web开发 -前端部分-CSS-2

一 长度单位 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

Linux shell zip 命令实现不切换当前终端的工作目录打包另一个路径下的文件和文件夹

如图&#xff0c;我想在当前目录 ~/Bypasser 下打包 src 文件夹&#xff0c;使得生成的 zip 压缩包中具有 src 文件夹下的所有文件夹、所有文件夹中的所有子项目、所有文件&#xff0c;保留层次结构但压缩包中最外面不包含 src 这一层。执行命令时&#xff0c;不要改变当前终端…

Syncthing在ubuntu下的安装使用

以前安装这个软件的时候&#xff0c; 是在windows和mac上&#xff0c;都是图形化的安装方式&#xff0c;但是ubuntu不太一样&#xff0c;需要增加源&#xff0c;然后执行命令。安装的系统版本是2004。 参考链接1&#xff0c;主要命令包含下面几个部分&#xff1a; 第一步&…

QT跨平台应用程序开发框架(3)—— 信号和槽

目录 一&#xff0c;基本概念 二&#xff0c;connect函数使用 2.1 connect 2.2 Qt内置信号和槽 2.3 一些细节 三&#xff0c;自定义信号和槽 3.1 自定义槽函数 3.2 自定义信号 3.3 带参数的信号槽 四&#xff0c;信号和槽的意义 五&#xff0c;信号和槽断开连接 六&…