using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace System.Reflection { [AttributeUsage(AttributeTargets.Assembly)] public class ProcessorAssemblyArchitecture : Attribute { public ProcessorAssemblyArchitecture() { Architecture = Undefined; } public ProcessorAssemblyArchitecture(string arch) { Type t = typeof(ProcessorAssemblyArchitecture); FieldInfo[] fields = t.GetFields(BindingFlags.Public | BindingFlags.Static); bool found = false; foreach (FieldInfo field in fields) { string o = field.GetValue(null).ToString(); if (arch == o) { found = true; break; } } if (!found) { Architecture = Undefined; } else { Architecture = arch; } } string _Architecture; public string Architecture { get { return _Architecture; } private set { _Architecture = value; } } #region processor architecture public const string Undefined = "Undefined"; public const string x86 = "x86"; public const string x64 = "x64"; public const string Amd64 = "Amd64"; public const string Ia64 = "Ia64"; public const string AnyCpu = "AnyCpu"; public const string Msil = AnyCpu; #endregion public static string GetProcessorArchitecture(Assembly t) { string assembly_arch = Undefined; // get architecture ProcessorArchitecture o = t.GetName().ProcessorArchitecture; if (o == ProcessorArchitecture.None) assembly_arch = Undefined; switch (o) { case ProcessorArchitecture.Amd64: assembly_arch = Amd64; break; case ProcessorArchitecture.IA64: assembly_arch = Ia64; break; case ProcessorArchitecture.MSIL: assembly_arch = AnyCpu; break; case ProcessorArchitecture.X86: assembly_arch = x86; break; case ProcessorArchitecture.None: break; default: assembly_arch = Undefined; break; } return assembly_arch; } } }