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;
}