编程获取程序集的证据

/*一个简单的应用程序来提示用户加载到内存中的程序集的名字,
 * 枚举每一种形式的程序集证据,CLR为了确定把程序集加载到
 * 哪个代码组,第一步就是读取加载的证据,之后就是查询和
 * 代码组相关的权限集,来确定程序集可以做什么,更重要的
 * 是不可以做什么。
 * 证据只是程序集加载到内存中时从程序集(也就是承载程序集
 * 的应用程序域)中获取的信息。主要证据类型包含有:应用程序、
 * 程序散列码、发行者证书、站点、程序及强名、URL、区域。
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Reflection;
using System.Security.Policy;

namespace 编程方式读取证据
{
    class Program
    {
        static void Main(string[] args)
        {
            bool isUserDone = false;
            string userOption = "";
            Assembly asm = null;

            Console.WriteLine("Envidence viewer");
            do
            {
                Console.Write("L (Load Assembly) or Q (Quit):");
                userOption = Console.ReadLine();
                switch (userOption)
                {
                    case "L":
                        asm = LoadAssembly();
                        if (asm!=null)
                        {
                            DisplayAsmEnvidence(asm);
                        }
                        break;
                    case "Q":
                        isUserDone = true;
                        break;
                    default:
                        Console.WriteLine("I don't know what you want to do! Buddy");
                        break;
                }
            } while (!isUserDone);

            
        }
        public static Assembly  LoadAssembly()
        {
            Console.WriteLine("Enter path to assembly : ");
            try
            {
                return Assembly.LoadFrom(Console.ReadLine());
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }
        public static void DisplayAsmEnvidence(Assembly asm)
        {
            //获取程序集的证据
            Evidence e = asm.Evidence;
            //枚举由主机提供的证据
            IEnumerator iEnum = e.GetHostEnumerator();

            //输出证据
            while (iEnum.MoveNext())
            {
                Console.WriteLine("****Press enter to cointinue*****");
                Console.ReadLine();
                Console.WriteLine(iEnum.Current);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/yinshuli2008/article/details/50417221