Skip to content

@pardeike pardeike released this Oct 31, 2020 · 50 commits to master since this release

Harmony 2.0.4 reverts a change in 2.0.3 that broke ABI compatibility

Fixes:

  • Improve AccessTools.*FieldRefAccess safety by handling edge cases and having consistent error handling [9a3da4b]
  • Fix AccessTools.FindIncludingBaseTypes NRE on interface types [684b9b7]
  • Add EditorBrowsableState.Never to the specific AccessTools.IsStatic methods [9be1fb0]
  • Reduce array copies in patch tracking [7991c14]
  • Make sure the Harmony logging directory exists [69ef98e]
  • Fix CTD in Linux when patching short methods (typically empty virtual methods) [406586a]
  • Improve Harmony thread safety [f13beaf][1305a1f]
  • Add handler cache for AccessTools.MakeDeepCopy [2f5c171]
  • Add HARMONY_LOG_FILE environment variable [318c1d2]
  • Remove unconditional call to FileLog [42d8567]

Added:

  • More environment info at start of harmony log [bf3286d]
  • Support patching methods with ref result [439b004]

New API in AccessTools:

  • delegate ref F StructFieldRef<T, F>(ref T instance)
  • StructFieldRef<T, F> StructFieldRefAccess<T, F>(string fieldName)
  • StructFieldRef<T, F> StructFieldRefAccess<T, F>(FieldInfo fieldInfo)
  • ref F StructFieldRefAccess<T, F>(ref T instance, string fieldName)
  • ref F StructFieldRefAccess<T, F>(ref T instance, FieldInfo fieldInfo)

Misc:

  • Stop using Travis and AppVeyor and move all testing to Azure Pipelines
  • Migrate from ILRepack.Lib.MSBuild.Task to ILRepack.Lib.MSBuild [36d8cbc]
  • Project now supports C# 8
  • Various code and csproj cleanup
Assets 3
Oct 28, 2020
Update documentation [skip ci]

@pardeike pardeike released this Jul 28, 2020 · 165 commits to master since this release

Fixes:

  • MonoMod.Common updated to v20.5.31.1
  • Method serialization now uses module guid instead of name [ca5fd9b]
  • AccessTools.Method(string typeColonMethodname, ...) uses "Namespace.Type:MethodName" as format
  • Include type in patched method names for stack traces [1bdd4b4]
  • Traverse now handles chaining static then non-static member calls correctly [2b6ad84]
  • FastInvokeHandler now uses params for varargs [c9934e1]
  • PatchTools.GetPatchMethods now returns every method, not just the ones to be patched #304 [31b4773]
  • GetOriginalInstructions/GetCurrentInstructions now populate code.labels correctly
  • Fix exception in Harmony.PatchAll/AccessTools.TypeByName when assembly dependencies are missing [a0c3620] [424c2ce]
  • Preparatory work for: delegate injection, AccessTools.FieldRef improvements (work in progress, more in next release)

New API for CodeInstruction:

  • codeInstruction.WithLabels(params Label[] labels)
  • codeInstruction.WithLabels(IEnumerable<Label> labels)
  • codeInstruction.ExtractLabels(this CodeInstruction code)
  • codeInstruction.MoveLabelsTo(CodeInstruction other)
  • codeInstruction.MoveLabelsFrom(CodeInstruction other)
  • codeInstruction.WithBlocks(params ExceptionBlock[] blocks)
  • codeInstruction.WithBlocks(IEnumerable<ExceptionBlock> blocks)
  • codeInstruction.ExtractBlocks(this CodeInstruction code)
  • codeInstruction.MoveBlocksTo(CodeInstruction other)
  • codeInstruction.MoveBlocksFrom(CodeInstruction other)

New API in PatchProcessor:

  • PatchProcessor.CreateILGenerator(MethodBase original)

New API in AccessTools:

  • AccessTools.MethodDelegate<DelegateType>(MethodInfo method, object instance = null, bool virtualCall = true)
  • AccessTools.HarmonyDelegate<DelegateType>(object instance = null)
  • AccessTools.IsStatic(MemberInfo member)
Assets 3

@pardeike pardeike released this May 10, 2020 · 277 commits to master since this release

Fixes:

  • MonoMod.Common updated to v20.5.7.1
  • Unpatch has improved documentation pointing out it being global

New API:

Existing API:

  • Transpilers can default to original input by returning null
Assets 3

@pardeike pardeike released this Apr 20, 2020 · 279 commits to master since this release

2.0.0.10 fixes #275 and updates MonoMod.Common to 20.4.20.1

It also adds

  • HasMethodBody
  • CreateILGenerator
  • more variation for AccessTools.FieldRef/StaticFieldRef
Assets 3

@pardeike pardeike released this Mar 31, 2020 · 288 commits to master since this release

2.0.0.9 fixes

  • #266, #267, #274 (struct returning methods with Mono in .NET 3.5)
  • #268 (Target DllImport methods)
  • #269 (Traverse.Method throws ambiguous match exception)
Assets 3

@pardeike pardeike released this Feb 29, 2020 · 317 commits to master since this release

2.0.0.8 fixes

  • Struct returning methods with Mono (again)
  • Fix #263
  • Fix #255
  • Debug output format improvements (local variables, complete types)
Assets 3

@pardeike pardeike released this Feb 27, 2020 · 322 commits to master since this release

2.0.0.7 fixes

  • struct returning methods with Mon (for real this time)
  • offsets in debug output are correct
  • local variables now show in debug output
  • exception handling and reporting improved
  • build process improved
Assets 3

@pardeike pardeike released this Feb 24, 2020 · 347 commits to master since this release

2.0.0.6 is a hotfix release fixing struct returning methods that are virtual
Also new: Prefix that do not alter the original methods state in any way are now no longer skipped when a previous Prefix returns false.

Assets 3

@pardeike pardeike released this Feb 20, 2020 · 360 commits to master since this release

2.0.0.5 is a hotfix release fixing #254

Assets 3