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
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.Harmonyhttps://www.nuget.org/packages/Lib.Harmony.Thin
Changes
Support GenericInstance types in inline method signatures 1960f575bddd04e9de617aa6af8b284c8383bb30
adds better detection for methods that end in dead code 7b5158aefb1aba88827fa598d5e37e67d1a58380
Merge pull request #565 from Zetrith 03b642613f00ac8a7290df824785f07a357c6852
Error in exported Godot Engine build when attempting to patch method #562
Regression with methods ending in throw + ret e63e183e315c30a4cc44db93a9484cd77d9492a6
fixes a bug where Harmony calls TargetMethods() always twice 7ab508c95e336619d0b77eb0918d74ac10fbcc2c
Native async patching is not available in .NET Standard or .NET #533
adds Mono.Cecil.ByReferenceType, Mono.Cecil.GenericInstanceMethod, Mono.Cecil.GenericInstanceType, Mono.Cecil.TypeSpecification and Mono.Cecil.Cil.OpCodes to ForwardingAttributes
You can now patch methods like ref SomeType Test() by using ref RefResult<SomeType> __resultRef
Huge THANK YOU to all contributors (a lot of them new):
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps Lib.Harmony from 2.2.2 to 2.3.0.
Release notes
Sourced from Lib.Harmony's releases.
... (truncated)
Commits
3c257bb
Update documentation [skip ci]b2eb250
implements __resultRef (#582)2a09e7a
Tests: Added partial Rosetta 2 support (#580)125a6d7
one more revert of [] syntax5f87799
Update documentation [skip ci]16f00a1
reverts some [] syntax so it compiles in all .net versions9615407
Update documentation [skip ci]2c2de77
updates summarybe98a56
Update documentation [skip ci]2457353
Merge branch 'master' of https://github.com/pardeike/HarmonyDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show