diff --git a/Cpp2IL.Core/Model/Contexts/AssemblyAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/AssemblyAnalysisContext.cs index aa4fe3d5..a04f496b 100644 --- a/Cpp2IL.Core/Model/Contexts/AssemblyAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/AssemblyAnalysisContext.cs @@ -37,7 +37,7 @@ public class AssemblyAnalysisContext : HasCustomAttributesAndName /// public Il2CppCodeGenModule? CodeGenModule; - public virtual Version Version + public virtual Version DefaultVersion { get { @@ -47,16 +47,109 @@ public virtual Version Version : new(Definition.AssemblyName.major, Definition.AssemblyName.minor, Definition.AssemblyName.build, Definition.AssemblyName.revision); } } + public Version? OverrideVersion { get; set; } + public Version Version + { + get => OverrideVersion ?? DefaultVersion; + set => OverrideVersion = value; + } - public virtual uint HashAlgorithm => Definition?.AssemblyName.hash_alg ?? default; + public virtual uint DefaultHashAlgorithm => Definition?.AssemblyName.hash_alg ?? default; + public uint? OverrideHashAlgorithm { get; set; } + public uint HashAlgorithm + { + get => OverrideHashAlgorithm ?? DefaultHashAlgorithm; + set => OverrideHashAlgorithm = value; + } - public virtual uint Flags => Definition?.AssemblyName.flags ?? default; + public virtual uint DefaultFlags => Definition?.AssemblyName.flags ?? default; + public uint? OverrideFlags { get; set; } + public uint Flags + { + get => OverrideFlags ?? DefaultFlags; + set => OverrideFlags = value; + } - public virtual string? Culture => Definition?.AssemblyName.Culture; + public virtual string? DefaultCulture => Definition?.AssemblyName.Culture; + /// + /// Override + /// + /// + /// indicates no override, while an empty string indicates an explicit override to "no culture". + /// + public string? OverrideCulture { get; set; } + /// + /// Gets or sets the culture + /// + /// + /// The get method will never return an empty string. + /// + public string? Culture + { + get + { + var culture = OverrideCulture ?? DefaultCulture; + return string.IsNullOrEmpty(culture) ? null : culture; + } + set + { + OverrideCulture = value is null ? "" : value; + } + } - public virtual byte[]? PublicKeyToken => Definition?.AssemblyName.PublicKeyToken; + public virtual byte[]? DefaultPublicKeyToken => Definition?.AssemblyName.PublicKeyToken; + /// + /// Override + /// + /// + /// indicates no override, while an empty array indicates an explicit override to "no public key token". + /// + public byte[]? OverridePublicKeyToken { get; set; } + /// + /// Gets or sets the public key token + /// + /// + /// The get method will never return an empty array. + /// + public byte[]? PublicKeyToken + { + get + { + var data = OverridePublicKeyToken ?? DefaultPublicKeyToken; + return data is null || data.Length == 0 ? null : data; + } + set + { + OverridePublicKeyToken = value is null ? [] : value; + } + } - public virtual byte[]? PublicKey => Definition?.AssemblyName.PublicKey; + public virtual byte[]? DefaultPublicKey => Definition?.AssemblyName.PublicKey; + /// + /// Override + /// + /// + /// indicates no override, while an empty array indicates an explicit override to "no public key". + /// + public byte[]? OverridePublicKey { get; set; } + /// + /// Gets or sets the public key + /// + /// + /// The get method will never return an empty array. + /// + public byte[]? PublicKey + { + get + { + var data = OverridePublicKey ?? DefaultPublicKey; + return data is null || data.Length == 0 ? null : data; + } + set + { + OverridePublicKey = value is null ? [] : value; + } + } protected override int CustomAttributeIndex => Definition?.CustomAttributeIndex ?? -1; diff --git a/Cpp2IL.Core/Model/Contexts/InjectedAssemblyAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/InjectedAssemblyAnalysisContext.cs index a72a3ea5..6366b89f 100644 --- a/Cpp2IL.Core/Model/Contexts/InjectedAssemblyAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/InjectedAssemblyAnalysisContext.cs @@ -14,10 +14,10 @@ public class InjectedAssemblyAnalysisContext( : AssemblyAnalysisContext(null, appContext) { public override string DefaultName => name; - public override Version Version => version ?? base.Version; - public override uint HashAlgorithm => hashAlgorithm; - public override uint Flags => flags; - public override string? Culture => culture; - public override byte[]? PublicKeyToken => publicKeyToken; - public override byte[]? PublicKey => publicKey; + public override Version DefaultVersion => version ?? base.DefaultVersion; + public override uint DefaultHashAlgorithm => hashAlgorithm; + public override uint DefaultFlags => flags; + public override string? DefaultCulture => culture; + public override byte[]? DefaultPublicKeyToken => publicKeyToken; + public override byte[]? DefaultPublicKey => publicKey; }