159 lines
5.0 KiB
C#
159 lines
5.0 KiB
C#
//
|
|
// 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".
|
|
}
|
|
|
|
}
|
|
|
|
}
|