Harmony 2.3
We have been preparing and testing this for months and I want to specially mention the the help of our HUGE community on this release. Harmony is downloaded over 800 times a day and has over 1.6 million downloads on Nuget and a Discord server with over 2100 members.
New core engine
Harmony 2.3 now uses MonoMod.Core v1.1
(part of https://github.com/MonoMod) which is a rewrite of the low level back-end for patching .NET methods.
Support for newer .NET versions
.NET 7
and .NET 8
support is finally here
Tests via GitHub Actions
Harmony is now tested on Azure and GitHub and thus we can start testing macOS and other fancy combinations: https://github.com/pardeike/Harmony/actions/workflows/test.yml
Fat and Thin versions
Harmony is now released in two packages on nuget: Lib.Harmony
and Lib.Harmony.Thin
. The thin version does not embed dependencies and thus allows you to manage them yourself. The normal version embeds them as internal types and works as usual as a standalone dll.
https://www.nuget.org/packages/Lib.Harmony
https://www.nuget.org/packages/Lib.Harmony.Thin
Changes
- Support GenericInstance types in inline method signatures 1960f57
- adds better detection for methods that end in dead code 7b5158a
- Merge pull request #565 from Zetrith 03b6426
- Error in exported Godot Engine build when attempting to patch method #562
- Regression with methods ending in throw + ret e63e183
- fixes a bug where Harmony calls TargetMethods() always twice 7ab508c
- Native async patching is not available in .NET Standard or .NET #533
- adds IEnumerable.Matches() b9206db
- Uses
PlatformTriple.Current.GetIdentifiable
for a user submitted MethodInfo - fixes more unix tests
- patches
Assembly.GetExecutingAssembly
internally - Improves http_client tests cda2226
- adds useful linux test shortcut c2586e7
- adds null/zero return clarifcations for TargetMethod/s #544
- fixes
CodeMatch(()=>...
7e4183e - Documentation Auxiliary Methods - Attribute spelling issue. Plus logic fix. #557
- adds InnerTypes() and extensions for AccessTool methods on type Type d916a30
- code cleanup, net8.0, optional ret code for methods ending in throw
- Methods for getting indices and making loads and stores by @LoganDark in #500
- Add an example for patch factory methods by @Meigyoku-Thmn in #502
- Add Categories feature to Patch Container Classes by @rrazgriz in #498
- yet another injector by @StackOverflowExcept1on in #512
- Adds support for targeting an async method's internal MoveNext method by @Banane9 in #514
- Add targeting of indexer properties by @Banane9 in #519
- Add Delegate overloads and implicit casts to HarmonyMethod; Fixes #505 by @Banane9 in #521
- Added netstandard2.0 reference assemblies support by @Aragas in #523
Additions
- adds
Mono.Cecil.ByReferenceType
,Mono.Cecil.GenericInstanceMethod
,Mono.Cecil.GenericInstanceType
,Mono.Cecil.TypeSpecification
andMono.Cecil.Cil.OpCodes
to ForwardingAttributes - You can now patch methods like
ref SomeType Test()
by usingref RefResult<SomeType> __resultRef
Huge THANK YOU to all contributors (a lot of them new):
- @LoganDark - #500
- @Meigyoku-Thmn - #502
- @rrazgriz - #498
- @StackOverflowExcept1on - #512
- @SineSwiper - #544
- @ZXfkSIE - #548
- @erdelf - #557
- @jivanf - #560
- @Zetrith - #565
- @kohanis - #582