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
///
/// Represents an undefined processor arcitecture
///
public const string Undefined = "Undefined";
///
/// Represents a 32-bit processor arcitecture
///
public const string x86 = "x86";
///
/// Represents a 64-bit processor arcitecture
///
public const string x64 = "x64";
///
/// Represents a 64-bit processor arcitecture (this is equivalent to x64, this is just Amd's nameing convention)
///
public const string Amd64 = x64;
///
/// Represents am Itanium 64-bit processor arcitecture
///
public const string Ia64 = "Ia64";
///
/// Represents a 32-bit and 64-bit processor arcitecture (it will run in 32-bit mode for 32-bit systems and 64-bit for non-32bit systems)
///
public const string AnyCpu = "AnyCpu";
///
/// Represents a 32-bit and 64-bit processor arcitecture (refered to as 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;
}
}
}