Provide compatibility facades for Rx v2.x
- Dominant language
- C#
- Stars
- 7.2k
- Forks
- 798
- PR merge metrics
- No merged PRs in 30d
Description
We are currently in the process of upgrading a large legacy application which relies on Rx v2.2.5. Since this application accepts custom extensions, there is also a large collection of packages indirectly targeting Rx v2.2.5 which we cannot recompile ourselves since they were made by 3rd parties.
Originally it seemed like it would be possible to upgrade the app and its plugin ecosystem in a backwards compatible way simply by pulling the v3 compatibility shims (System.Reactive.Core.dll, System.Reactive.Linq.dll, etc) and side-load them since the entire API is essentially compatible all the way back to v2.x.
Unfortunately, it seems that for some reason the publicKeyToken was changed between v2.2.5 and v3.0.0, which means we get the following error message:
> "Could not load file or assembly 'System.Reactive.Linq, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"
This also means we cannot use [bindingRedirect](https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions) to fix this either, because of the public key mismatch.
The right way to fix this would be to provide new compatibility shims for v2 pointing to v5.0.0, but using the legacy v2 publicKeyToken so they can be loaded by legacy applications. It would be fine to have them published under a different NuGet package ID to avoid confusion and also unlist the packages so they can be used purely for legacy dependency resolution.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.