当前位置: 首页 > news >正文

无锡网站排名优化台州那家网站做的好

无锡网站排名优化,台州那家网站做的好,青羊网站建设,怎么创建公司网站在编写.NET程序的时候#xff0c;如果需要对一个程序集文件进行分析#xff0c;我们可以使用Assembly.LoadFile()来加载这个程序集#xff0c;然后对LoadFile()方法返回的Assembly对象进行进一步的分析。但是Assembly.LoadFile()方法会以执行为目的把程序集加载到程序中如果需要对一个程序集文件进行分析我们可以使用Assembly.LoadFile()来加载这个程序集然后对LoadFile()方法返回的Assembly对象进行进一步的分析。但是Assembly.LoadFile()方法会以执行为目的把程序集加载到程序中因此它对于被加载的程序集文件有严格的要求比如如果被程序集所依赖的程序集不存在那么LoadFile()会抛出异常再比如在.NET Core中加载.NET Framework的程序集LoadFile()也会抛出异常。如果我们只想分析程序集但是并不需要执行程序集那么我们就需要一种单纯地分析程序集文件的方式。.NET Framework提供了Assembly.ReflectionOnlyLoad()来实现类似的效果但是这个方法由于依赖于AppDomain因此在.NET Core中不被支持。微软曾经在实验室项目中提出过一个在.NET Core中实现这个功能的System.Reflection.TypeLoader但不知道什么原因没有在.NET Core的正式版中提供这个类。我们知道.NET程序集是PE格式的文件.NET中提供了用来分析PE文件的类PEReader位于System.Reflection.Metadata这个NuGet包中因此我们可以用PEReader来分析程序集文件。在PEReader中我们可以通过TypeDefinitions获取到程序集中的所有类我们可以用GetMethods()获取某个类中定义的所有方法。为了提升效率TypeDefinitions、GetMethods()等成员获得到的对象都是TypeDefinitionHandle、MethodDefinitionHandle等句柄类型的这些对象只包含地址信息并不包含类型的名字、方法的名字、方法的参数等详细信息要获取这些信息我们需要调用MetadataReader的GetTypeDefinition()、GetMethodDefinition()等方法来获取。如下的代码用来加载一个程序集并且输出程序集中所有的类型信息以及类型中定义的方法//Install-PackageSystem.Reflection.Metadata using System.Reflection.Metadata; using System.Reflection.PortableExecutable;string file E:\Microsoft.AspNetCore.Components.Web.dll; using FileStream fileStream File.OpenRead(file); using PEReader peReader newPEReader(fileStream); if(!peReader.HasMetadata) {Console.WriteLine(${file} doesnt contain CLI metadata.);return; } var mdReader peReader.GetMetadataReader(); if (!mdReader.IsAssembly) {Console.WriteLine(${file} is not an assembly.);return; } foreach (var typeHandler inmdReader.TypeDefinitions) {var typeDef mdReader.GetTypeDefinition(typeHandler);string name mdReader.GetString(typeDef.Name);string nameSpace mdReader.GetString(typeDef.Namespace);Console.WriteLine($***********{nameSpace}.{name}***********);foreach (var methodHandler in typeDef.GetMethods()){var methodDef mdReader.GetMethodDefinition(methodHandler);Console.WriteLine(mdReader.GetString(methodDef.Name));} }       使用PEReader的时候我们需要先获得XXXHandler然后再调用MetadataReader获取句柄的详细信息这样做尽管性能比较高但是代码比较繁琐而且在实现某些高级操作的时候比较麻烦。比如如果我们要获取一个程序集的CustomAttribute信息PEReader并没有提供比较简单的方法需要我们对PE格式非常精通才能编写出来对应的代码。       我们可以使用AsmResolver.DotNet这个第三方Nuget包来简化程序集文件的读取分析它是对PEReader的一个高级封装。如下的代码用来加载一个程序集输出程序集的公司信息并且输出程序集中所有的类型信息以及类型中定义的方法string file E:\Microsoft.AspNetCore.Components.Web.dll; var moduleDef AsmResolver.DotNet.ModuleDefinition.FromFile(file);//用的不是System.Reflection.Metadata命名空间下的ModuleDefinition类 var asmCompanyAttr moduleDef.Assembly.CustomAttributes.FirstOrDefault(c c.Constructor.DeclaringType.FullName System.Reflection.AssemblyCompanyAttribute); var utf8Value (Utf8String?)asmCompanyAttr.Signature.FixedArguments[0].Element; var strValue (string?)utf8Value; Console.WriteLine($companyname:{strValue}); foreach(var typeDef inmoduleDef.GetAllTypes()) {string name typeDef.Name;string nameSpace typeDef.Namespace;Console.WriteLine($***********{nameSpace}.{name}***********);foreach (var methodDef in typeDef.Methods){Console.WriteLine(methodDef.Name);} }       总之如果我们需要分析一个程序集并且要运行其中的代码我们可以使用Assembly.LoadFile()如果我们不需要运行程序集只是想分析程序集那么使用PEReader是更好的选择当然我们也可以选择对PEReader进行封装的AsmResolver.DotNet这个NuGet包。本文作者杨中科在Zack.Commons这个开源项目中实现“判断一个程序集是否是微软开发的”这个功能的时候就用到了AsmResolver.DotNet大家可以查看这个项目的GitHub代码仓库来查看源代码。
http://www.huolong8.cn/news/101746/

相关文章:

  • 网页网站建设软件有哪些阿里云可以做网站吗
  • 苏州营销型网站设计上海松江做网站
  • 资料员报名入口官网seo发贴软件
  • 手机网站建设一般多少钱wordpress 360 google
  • 阿里云编辑建设好的网站制作网站开发用的图片
  • icp备案系统网站公众号怎么制作教程
  • 在线网站分析工具网站销售公司简介
  • jsp与asp做的网站鹤壁公司做网站
  • 网站设计常州山东最新资讯
  • 北京网站优化对策做免费试用的网站
  • 网站建设的功能有哪些内容wordpress主题与演示不一样
  • asp网站和php网站的区别景德镇网站维护
  • 南京企业网站seo孝昌县专注网站建设代理
  • 网站规划与建设ppt建设网站都需要什么
  • 成都企业如何建网站wordpress内外网访问
  • 企业导航网站源码高端网站设计公司
  • 国企网站建设有没有做链接的网站
  • 手机网站智能建站深圳电商平台网站建设
  • 如何查询网站的空间大小网站做支付宝接口吗
  • 自己做音乐网站挣钱吗互联网运营
  • 教育网站建设方案模板中英双语外贸网站源码
  • 旅游网站建设策划书模板大型的网站后台用什么做
  • 手机网站开发服务商如何做校园网站
  • nas搭建网站最新百度新闻
  • 校园二手书交易网站开发网站条形码如何做
  • 站长工具查询wordpress 调用豆瓣
  • 农业大学网站建设特点江苏省建设招标网站
  • 成都百度网站设计公司免费写作文网站
  • 成都网站建设空间拓者设计吧室内设计官网免费账号
  • 岳溥庥网站建设网站交互做的比较好的