如何判断一个动态链接库是dotnet 生成的托管 DLL

📅 2024-01-03 🏷️ 👁️ 3 阅读
在项目中做一个批量读取bin目录下的所有DLL动态装在到Ioc容器的功能,读取方法使用的 Assembly.LoadFrom(path); 常规情况下使用是没有问题的,但是如果程序依赖的某一个库本身还需要依赖非dotnet生成的非托管DLL,如sqlite的依赖库,使用这个方法就会报错,此为背景。 要解决这个问题最开始想到的方案是直接try catch 包围 Assembly.LoadFrom 语句块,报错时不加载;但是略显暴力,后经过观察发现dotnet生成的动态链接库文件的文件头部分似乎都有一个公共标记 (见上传图片) 第61个字节是 0x80,第62个字节是 0x00,通过以下方法可以判断一个DLL是否是dotnet生成的DLL: ```csharp using (var stream = File.OpenRead(file)) { stream.Seek(60, SeekOrigin.Begin); stream.Read(buffer, 0, 2); } if (buffer[0] == 0x80 && buffer[1] == 0x00) { // 托管DLL; } ```
← 一个方法可以对所有数字类型的数组��行冒泡排序 WPF Image 绑定图片速度最快的方式 →

评论 (0)

评论提交后需要审核通过才会显示

← 返回文章列表