网站首页 > 技术教程 正文
摘要
程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件。程序集只是逻辑上的划分,一个程序集可以只由一个文件组成,也可由多个文件组成。不管是单文件程序集还是多文件程序集,它们都由固定的结构组成。
正文
常见的两种程序集:
可执行文件(.exe文件)和 类库文件(.dll文件)。
在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。
查询继承父类的程序集合BaseType
.NET的程序集对象Assembly有个属性BaseType,来返回当前程序集的基础类型,默认是Object。通过该属性可以判断某个程序集是否是继承了某个父类;
程序集B被A程序引用,获取A程序集的信息GetCallingAssembly
.NET的程序集对象Assembly有个方法GetCallingAssembly获取当前程序集被调用的上级程序集的信息;
查找当前项目的程序集GetAssemblies
查找当前项目所有程序集的方法System.AppDomain.CurrentDomain.GetAssemblies();
使用Assembly
using System.Reflection;
实例化
我们创建一个项目Is.User
创建一个类 Class Library
namespace Is.User
{
public class User
{
public string Id { get; set; }
public string Name { get; set; }
public string Show()
{
return this.Id + " " + this.Name;
}
}
}
这里我们不去在主项目中引用它,准备通过Assembly 中的方法动态实例化
常用的有三个方法:
- Assembly.Load()
- Assembly.LoadFrom()
- Assembly.LoadFile()
将编译好的Is.User.dll 拷贝到对应目录。
private void btnInstance_Click(object sender, EventArgs e)
{
Assembly assembly = Assembly.LoadFrom("./Is.User.dll"); //通过文件路径加载
Type[] allTypes = assembly.GetTypes();
Type type = assembly.GetType("Is.User.User");
object user = Activator.CreateInstance(type);
type.GetProperty("Id").SetValue(user, "1");
type.GetProperty("Name").SetValue(user, "张飞");
var ret= type.GetMethod("Show").Invoke(user, new object[] { });
MessageBox.Show(ret.ToString());
}
修改成LoadFrom效果一样
Assembly assembly = Assembly.LoadFrom("./Is.User.dll");
LoadFile与LoadFrom的区别
- Assembly.LoadFile只载入相应的dll文件,不会载入对应这个dll的其它引用dll。
- Assembly.LoadFrom则不一样,它会载入dll文件及其引用的其他dll,比如上面的例子,def.dll也会被载入。
- LoadFile 方法用来来加载和检查具有相同标识但位于不同路径中的程序集.但不会加载程序的依赖项。
- LoadFrom 不能用于加载标识相同但路径不同的程序集。
- 上一篇: 让.NET运行在浏览器端 Ant Design Blazor
- 下一篇: 前端如何开发3D网页?
猜你喜欢
- 2025-01-03 5分钟实现一个简单的 WebAssembly 应用|WebAssembly 入门教程
- 2025-01-03 W3C 发布 WebAssembly 2.0 工作草案
- 2025-01-03 WebAssembly入门(golang版)
- 2025-01-03 如何看待 WebAssembly 这门技术?
- 2025-01-03 开发者通过WebAssembly力求让LibreOffice在Web浏览器中运行
- 2025-01-03 使用 WebAssembly 和 Go 编写前端 Web 框架
- 2025-01-03 《永劫无间》出现部分按键失效问题,官方给出注册表解决方案
- 2025-01-03 「技术分享」WebAssembly能否重新定义前端开发模式?
- 2025-01-03 乙肝在研新药0731,2期a部分启动,预计2023年8月完成
- 2025-01-03 如何在 Deno 应用程序中调用 Rust 函数?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)