singrdk/base/Windows/mkmsil/msil/MetaDataAssembly.cs

159 lines
5.0 KiB
C#
Raw Permalink Normal View History

2008-11-17 18:29:00 -05:00
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
using System;
namespace Bartok.MSIL
{
public class MetaDataAssembly: MetaDataObject {
// Constructor Methods
internal MetaDataAssembly(int hashAlgorithmId,
short majorVersion, short minorVersion,
short buildNumber, short revisionNumber,
int flags, byte[] publicKey,
String name, String locale) {
this.hashAlgorithmId = (AssemblyHashAlgorithmID) hashAlgorithmId;
this.majorVersion = majorVersion;
this.minorVersion = minorVersion;
this.buildNumber = buildNumber;
this.revisionNumber = revisionNumber;
this.flags = flags;
this.publicKey = publicKey;
this.name = name;
this.locale = locale;
}
// Access Methods
public AssemblyHashAlgorithmID HashAlgorithmID {
get {
return this.hashAlgorithmId;
}
}
public short MajorVersion {
get {
return this.majorVersion;
}
}
public short MinorVersion {
get {
return this.minorVersion;
}
}
public short BuildNumber {
get {
return this.buildNumber;
}
}
public short RevisionNumber {
get {
return this.revisionNumber;
}
}
// Bitmask described by AssemblyFlagsMask
public int Flags {
get {
return this.flags;
}
}
public byte[] PublicKey {
get {
return this.publicKey;
}
}
public String Name {
get {
return this.name;
}
}
public String Locale {
get {
return this.locale;
}
}
// Debug Methods
public override String ToString() {
System.Text.StringBuilder sb =
new System.Text.StringBuilder("MetaDataAssembly(");
sb.Append(this.hashAlgorithmId);
sb.Append(",");
sb.Append(this.majorVersion);
sb.Append(",");
sb.Append(this.minorVersion);
sb.Append(",");
sb.Append(this.buildNumber);
sb.Append(",");
sb.Append(this.revisionNumber);
sb.Append(",");
sb.Append(this.flags.ToString("x"));
sb.Append(",[");
int count = this.publicKey.Length;
if (count > 0) {
sb.Append("0x");
sb.Append(this.publicKey[0].ToString("x2"));
for (int i = 1; i < count; i++) {
sb.Append(",0x");
sb.Append(this.publicKey[i].ToString("x2"));
}
}
sb.Append("],");
sb.Append(this.name);
sb.Append(",");
sb.Append(this.locale);
sb.Append(")");
return sb.ToString();
}
// State
private readonly AssemblyHashAlgorithmID hashAlgorithmId;
private readonly short majorVersion;
private readonly short minorVersion;
private readonly short buildNumber;
private readonly short revisionNumber;
private readonly int flags;
private readonly byte[] publicKey;
private readonly String name;
private readonly String locale;
// Internal Classes
// Section 22.1.1 of ECMA spec, section II
public enum AssemblyHashAlgorithmID {
None = 0x0000,
MD5 = 0x8003,
SHA1 = 0x8004
}
public enum AssemblyFlagMasks {
PublicKey = 0x0001, // The assembly ref holds the full (unhashed) public key.
CompatibilityMask = 0x0070,
SideBySideCompatible = 0x0000, // The assembly is side by side compatible.
NonSideBySideAppDomain = 0x0010, // The assembly cannot execute with other versions if
// they are executing in the same application domain.
NonSideBySideProcess = 0x0020, // The assembly cannot execute with other versions if
// they are executing in the same process.
NonSideBySideMachine = 0x0030, // The assembly cannot execute with other versions if
// they are executing on the same machine.
EnableJITcompileTracking = 0x8000, // From "DebuggableAttribute".
DisableJITcompileOptimizer = 0x4000 // From "DebuggableAttribute".
}
}
}