This rule will raise an issue when the code uses the https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose[disposable pattern]. This pattern makes locking easy to use and delegates the responsibility to the caller. Users should accept issues in such cases, as they should appear only once for each synchronization type.
Not releasing a lock in the same method where you acquire it, and releasing in another one, makes the code less clear and harder to maintain. You are also introducing the risk of not releasing a lock at all which can lead to deadlocks or exceptions.