检测对象的类型是否为.NETFramework定义的类型如何使用反射判断类型是否对象是我自己的程序集中的类还是我自己的程序集中的类由.NETFramework定义?我不想在代码中提供我自己的程序集的名称,因为它应该适用于任何程序集和命名空间。第三方类型从何而来?您可能想要区分声称由Microsoft提供的类型和不提供的类型。使用系统;使用System.Linq;使用System.Reflection;类测试{staticvoidMain(){Console.WriteLine(IsMicrosoftType(typeof(string)));Console.WriteLine(IsMicrosoftType(typeof(Test)));}staticboolIsMicrosoftType(Typetype){object[]attrs=type.Assembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute),false);返回attrs.OfType().Any(attr=>attr.Company=="MicrosoftCorporation");当然,在这种方案下,任何类型都可以声称是Microsoft,但如果您实际上只是在自己的类型和框架上调用它,我怀疑这是否可以正常工作。或者,您可以使用程序集的公钥令牌。这可能更难伪造。它依赖于Microsoft为所有程序集使用公共公钥,而他们没有这样做(根据下面Mehrdad的评论)。但是,您可以轻松地将此解决方案用于一组公认的“这是来自Microsoft”的公钥。也许以某种方式组合这两种方法并报告任何差异以供进一步检查...staticboolIsMicrosoftType(Typetype){AssemblyNamename=type.Assembly.GetName();byte[]publicKeyToken=name.GetPublicKeyToken();返回publicKeyToken!=null&&publicKeyToken.Length==8&&publicKeyToken[0]==0xb7&&publicKeyToken[1]==0x7a&&publicKeyToken[2]==0x5c&&publicKeyToken[3]==0x56&&publicKeyToken[4]==0x19&&publicKeyToken[5]==0x34&&publicKeyToken[6]==0xe0&&publicKeyToken[7]==0x89;}根据Jon的回答和Mehrdad的评论,似乎以下三个值用于.NET提供的.NETFramework公钥令牌用于2.0及更高版本的程序集(来自AssemblyName.FullName):PublicKey=b77a5c561934e089PublicKey=b03f5f7f11d50a3aPublicKey=31bf3856ad364e35这是从生成的:privatevoidPrintAssemblyInfo(stringfullName){string[]parts=fullName.Split(',');Console.WriteLine("-{0},{1}",parts[0],parts[3]);}privatevoidGenerateInfo(stringpath){foreach(varfileinDirectory.GetFiles(path,"*.dll",SearchOption.AllDirectories)){try{Assemblyassembly=Assembly.ReflectionOnlyLoadFrom(file);PrintAssemblyInfo(assembly.GetName().FullName);}catch{}}}privatevoidGenerateInfo(){GenerateInfo(@"C:WindowsMicrosoft.NETFrameworkv2.0.50727");GenerateInfo(@"C:WindowsMicrosoft.NETFrameworkv3.0");GenerateInfo(@"C:WindowsMicrosoft.NETFrameworkv3.5");类似于Mehrdad的回答,但即使代码在其他一些应用程序中执行,也允许相同的检查obj.GetType().Assembly==typeof(SomeTypeYouKnowIsInYourAssembly).Assemblyobj.GetType().Assembly==System.Reflection。Assembly.GetExecutingAssembly()检查类型是否在当前程序集中声明。以上就是C#学习教程的全部内容:检测对象的类型是否为.NETFramework定义的类型。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
