c# – 如何确定System.Type是否为客户端类型或框架类型?

c# – 如何确定System.Type是否为客户端类型或框架类型?,第1张

概述我想要明确地确定我的类型是自定义类类型(MyClass)还是由Framework(System.String)提供的类型. 有没有办法反思我可以区分我的类类型与system.string或其他框架提供的类型? 安全检查类型是否是程序集的一部分的唯一方法是检查程序集的全名,其名称,版本,文化和公钥(如果已签名).所有.Net基类库(BCL)都由微软使用其私钥签名.这使得任何其他人几乎不可能创建具有与 我想要明确地确定我的类型是自定义类类型(MyClass)还是由Framework(System.String)提供的类型.

有没有办法反思我可以区分我的类类型与system.string或其他框架提供的类型?

解决方法 安全检查类型是否是程序集的一部分的唯一方法是检查程序集的全名,其名称,版本,文化和公钥(如果已签名).所有.Net基类库(BCL)都由微软使用其私钥签名.这使得任何其他人几乎不可能创建具有与基类库相同的完全限定名称的程序集.
//add more .Net BCL names as necessaryvar systemnames = new HashSet<string>{"mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089","System.Core,PublicKeyToken=b77a5c561934e089"};var isSystemType = systemnames.Contains(objToTest.GetType().Assembly.Fullname);

一个稍微不那么脆弱的解决方案是使用AssemblyName类,并跳过版本号/文化检查.这当然假定公钥在版本之间不会改变.

//add more .Net BCL names as necessaryvar systemnames = new List<Assemblyname>{new Assemblyname ("mscorlib," +                  "PublicKeyToken=b77a5c561934e089"),new Assemblyname ("System.Core,"+                  "PublicKeyToken=b77a5c561934e089")};var obj = GetobjectTotest();var objAN = new Assemblyname(obj.GetType().Assembly.Fullname);bool isSystemType = systemnames.Any(        n =>  n.name == objAN.name            && n.GetPublicKeyToken().SequenceEqual(objAN.GetPublicKeyToken()));

大多数BCL已经签署了相同的密钥,但不是全部.您可以使用Assemblyname类来检查公钥令牌.这取决于你的需要.

总结

以上是内存溢出为你收集整理的c# – 如何确定System.Type是否为客户端类型或框架类型?全部内容,希望文章能够帮你解决c# – 如何确定System.Type是否为客户端类型或框架类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1263180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存