范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

如何使用C判断一个文件是否为程序集

  程序集是经由编译器编译得到的,供 CLR 进一步编译执行的那个中间产物。它一般表现为 .dll 或者是 .exe 的格式,但是要注意,它们跟普通意义上的 WIN32 可执行程序是完全不同的东西,程序集必须依靠 CLR 才能顺利执行。程序集是 .NET 编程的基本组成部分。 如何手动确认一个文件是否为程序集启动 IL 反汇编程序(如 Ildasm.exe 或者 ILSpy)。 载入你想测试的文件。 如果可以正常载入显示了程序集信息,则说明为程序集。如果提示 "that the file is not a portable executable (PE) file" 则表示该文件不是程序集文件。 如何使用编程方式判断一个文件是否为程序集使用 AssemblyName调用 AssemblyName.GetAssemblyName 方法,传递测试文件的完整路径。 如果引发 BadImageFormatException 异常,则该文件不是程序集。
  此示例测试 DLL 是否为程序集: using System; using System.IO; using System.Reflection; using System.Runtime.InteropServices;  static class ExampleAssemblyName {     public static void CheckAssembly()     {         try         {             string path = Path.Combine(                 RuntimeEnvironment.GetRuntimeDirectory(),                 "System.Net.dll");              AssemblyName testAssembly = AssemblyName.GetAssemblyName(path);             Console.WriteLine("Yes, the file is an assembly.");         }         catch (FileNotFoundException)         {             Console.WriteLine("The file cannot be found.");         }         catch (BadImageFormatException)         {             Console.WriteLine("The file is not an assembly.");         }         catch (FileLoadException)         {             Console.WriteLine("The assembly has already been loaded.");         }     }      /* Output:      Yes, the file is an assembly.       */ }
  GetAssemblyName 方法会先加载测试文件,然后在读取信息后释放。 使用 PEReader安装 NuGet 包 : System.Reflection.Metadata 创建一个 System.IO.FileStream 实例,用于从测试文件读取数据。 创建一个 System.Reflection.PortableExecutable.PEReader 实例,并把文件流传递给构造函数。、 检查 HasMetadata 属性值。如果为  false   ,则该文件不是程序集。调用 PEReader 实例的 GetMetadataReader 方法,创建一个元数据读取器。 检查 IsAssembly 属性值。如果为  false   ,则该文件不是程序集。
  与 GetAssemblyName 方法不同,PEReader 不会在本机可移植可执行文件(PE)上引发异常。这使您能够在需要检查此类文件时避免异常导致的额外性能成本。如果文件不存在或不是PE文件,您仍然需要处理异常。 using System; using System.Collections.Generic; using System.IO; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; using System.Runtime.InteropServices;  static class ExamplePeReader {     static bool IsAssembly(string path)     {         using var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);          // Try to read CLI metadata from the PE file.         using var peReader = new PEReader(fs);          if (!peReader.HasMetadata)         {             return false; // File does not have CLI metadata.         }          // Check that file has an assembly manifest.         MetadataReader reader = peReader.GetMetadataReader();         return reader.IsAssembly;     }      public static void CheckAssembly()     {         string path = Path.Combine(                 RuntimeEnvironment.GetRuntimeDirectory(),                 "System.Net.dll");          try         {             if (IsAssembly(path))             {                 Console.WriteLine("Yes, the file is an assembly.");             }             else             {                 Console.WriteLine("The file is not an assembly.");             }         }         catch (BadImageFormatException)         {             Console.WriteLine("The file is not an executable.");         }         catch (FileNotFoundException)         {             Console.WriteLine("The file cannot be found.");         }     }      /* Output:      Yes, the file is an assembly.       */ }

特斯拉对产业布局的影响?2018年在特斯拉最困难的时候我们国家抛出橄榄枝,完整的制造业产业链和高效的生产能力让特斯拉最终落户上海,而且是以史无前例的独资形式和各种优惠政策。到目前为止特斯拉的市值已经超过全INNOCN便携屏switch连接畅快游戏,手机也能成为随身电脑前言我们是否需要一块便携显示屏其实在购买这款产品之前,我也遇到了这个问题,并且纠结了很久,便携显示屏这个东西,估计大部分人第一次听说还是在罗老师的TNT发布会上。以前受众比较小,但苹果一晚跌没一个中石油,美国通胀超预期,市场将迎来哪些变动见证历史!美联储继续为加息造势,美股吓蒙圈,全球经济要变天?近日,美国宣布了4月通胀指数再次超预期,美联储继续为加息造势,以科技股为主的美股吓得低开低走,集体大幅收跌。就连全球市值2016年,美国开价440亿美元收购恩智浦,中国坚决反对,交易黄了2018年7月,美国高通公司正式宣布,价值440亿美元的恩智浦公司收购计划彻底宣告破产。这场持续21个月,赢得世界瞩目的商业变动,以中国的全面胜利而告终。美国公司高通与恩智浦公司的8128G卖5488,鸿蒙系统200倍变焦,华为P50Pro有何独特之处如果一款手机想要带来更加优质的用机体验,那它就必须要做到面面俱到,无论是外观核心配置,还是拍摄能力以及续航都要表现不错。然而真正能够让网友们体验到优质的地方还不止是这些,网络优化技迎接世界电信日多家企业助力老年人跨越数字鸿沟再添新举措中国网科技5月17日讯(记者叶小源)据国际电信联盟官网消息,今年世界电信和信息社会日的主题是面向老年人和实现健康老龄化的数字技术。中国网科技了解到,近日,多家企业为助力老年人跨越数苹果营销课如何把偷工减料说得清新脱俗苹果因为打官司又一次上了热搜,这次苹果被判罚款的原因是没有在iPhone包装中随附充电器,违反了巴西当地的法律,被判赔偿约6940元。手机不送充电器,本来应该是一件多赢的事儿厂商通运动前,大脑已经提前做好了准备?骨骼肌组织。图片来源密歇根大学医学院大脑某些区域的活动会在我们做自主运动前发生改变,即预备神经活动。一项来自瑞典于默奥大学(UmeUniversity)的研究发现了这种预备神经活动路由器多久关一次比较好?多亏宽带师傅提醒,才知道正确的做法在大数据时代,网络几乎涵盖了人类的所有生活。如今,路由器在各家各户是十分常见的物件。对于路由器是否需要关闭的问题,人们有不同的看法。一部分人认为路由器不需要关闭,一直开着也不会有太小米米家智能之卧室空调智能控制方案智能家居好玩之处不仅仅在于能够语音操控家里的设备,更在于能够根据家人的生活习惯动作自动启闭家里的设备,并将设备开启至设定的状态。以卧室的空调控制为例,非智能的控制就是通过空调遥控器印度突然动手!连夜扣押小米在印度的48亿资产01hr印度突然动手!连夜扣押我国科技巨头小米在印度的48亿资产!!今天,这件事已经刷屏了我们科技圈。48亿,如此巨大的一笔财产创下了近年来,我们中国企业在国外被扣押最大的一笔巨款