Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Each release has a `## [version]` section. When a `v*.*.*` tag is pushed, the Pu

### Docs

- 7.0.0 is documented as the last release that supports .NET Standard 2.0, which covers .NET Framework 4.6.1 through 4.8.1. 8.0.0 follows Dynamitey.Community 5.0.0 and drops that target (#108).
- 7.0.0 is documented as the last release that supports .NET Standard 2.0, which covers .NET Framework 4.6.1 through 4.8.1. 8.0.0 follows Dynamitey.Community 5.0.0 and drops that target. The target date is 10 November 2026 (#108).

## [7.0.0]

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,4 @@ PRs build the site; only `master` deploys to GitHub Pages.

7.0.0 is the last release that targets `netstandard2.0`. That is the build a .NET Framework 4.6.1 through 4.8.1 application uses. Do not drop it in a 7.x change. Framework 4.8.1 is serviced with Windows and does not gain BCL APIs, so those applications stay on 7.0.0.

8.0.0 ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108)) targets `net10.0` and `net11.0` only. It waits on [Dynamitey.Community 5.0.0](https://github.com/dynamitey-community/dynamitey/issues/95), which drops the same target after .NET 11 is generally available. The point of that drop is one implementation: `ThrowIfNull`, ordinal hashing, and the BCL .NET 10 and .NET 11 already ship, without a second Framework copy of the call-site code.
8.0.0 ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108), [milestone](https://github.com/fsprojects/FSharp.Interop.Dynamic/milestone/2)) targets `net10.0` and `net11.0` only. The target date is 10 November 2026. It waits on [Dynamitey.Community 5.0.0](https://github.com/dynamitey-community/dynamitey/issues/95), which drops the same target once .NET 11 is generally available. The point of that drop is one implementation: `ThrowIfNull`, ordinal hashing, and the BCL .NET 10 and .NET 11 already ship, without a second Framework copy of the call-site code.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ F# has no `dynamic` keyword. Use this when the member is not known at compile ti

**7.0.0** is the current package, and the last one that supports .NET Standard 2.0. That target is what reaches .NET Framework 4.6.1 through 4.8.1. It also builds for `net10.0`, on [Dynamitey.Community 4.0.0](https://www.nuget.org/packages/Dynamitey.Community/4.0.0). The namespace is still `Dynamitey`. The assembly is `Dynamitey.Community`. `Dyn.namedArg`, `Dyn.staticContext`, and `Dyn.staticTarget` return types from that assembly. A project that also references the `Dynamitey` 3.0.3 package gets `CS0433`.

A Framework application stays on 7.0.0. Framework 4.8.1 is still serviced with Windows. It does not get new BCL APIs. .NET Standard 2.0 freezes this library on the Framework 4.6.1 surface. A newer API is either skipped, or written twice. That is the tax. [Dynamitey.Community #95](https://github.com/dynamitey-community/dynamitey/issues/95) is the same decision for the dependency: 4.0.0 is its last `netstandard2.0` release, and 5.0.0 (after .NET 11 is generally available in November 2026) targets `net10.0` and `net11.0` only.
A Framework application stays on 7.0.0. Framework 4.8.1 is still serviced with Windows. It does not get new BCL APIs. .NET Standard 2.0 freezes this library on the Framework 4.6.1 surface. A newer API is either skipped, or written twice. That is the tax. [Dynamitey.Community #95](https://github.com/dynamitey-community/dynamitey/issues/95) is the same decision for the dependency: 4.0.0 is its last `netstandard2.0` release, and 5.0.0 (after .NET 11 is generally available) targets `net10.0` and `net11.0` only.

**8.0.0** ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108)) follows that. It targets `net10.0` and `net11.0` and drops .NET Standard 2.0, once Dynamitey.Community 5.0.0 has dropped the same target. The gains are in that library, and this package takes them by referencing it:
**8.0.0** ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108), [milestone](https://github.com/fsprojects/FSharp.Interop.Dynamic/milestone/2)) follows that. The target date is 10 November 2026, the scheduled .NET 11 general availability. It targets `net10.0` and `net11.0` and drops .NET Standard 2.0, once Dynamitey.Community 5.0.0 has dropped the same target. The gains are in that library, and this package takes them by referencing it:

- One copy of Dynamitey's call-site code. The `netstandard2.0` branch, `Guard.NotNull`, and the attribute polyfills go away. `ArgumentNullException.ThrowIfNull` is on every target.
- Ordinal hashing and `string.Contains(string, StringComparison)`. The Framework build cannot call those overloads, so it uses a different hash and three `IndexOf` calls.
Expand Down
4 changes: 2 additions & 2 deletions docfx/docs/dynamitey.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ Jay Tuley wrote Dynamitey. The `Dynamitey` package id stopped at 3.0.3. The cont

`Dyn.namedArg`, `Dyn.staticContext`, and `Dyn.staticTarget` return `InvokeArg` and `InvokeContext` from that assembly. A project that also references `Dynamitey` 3.0.3 fails to compile with `CS0433`. ImpromptuInterface still references the original package. How to alias that is in the [community readme](https://github.com/dynamitey-community/dynamitey#if-you-end-up-with-both-packages).

[#95](https://github.com/dynamitey-community/dynamitey/issues/95) is Dynamitey.Community 5.0.0. It ships after .NET 11 is generally available (scheduled 10 November 2026) and targets `net10.0` and `net11.0`. The `netstandard2.0` leg is why that library still carries `#if NETSTANDARD2_0`, a `Guard.NotNull` helper instead of `ArgumentNullException.ThrowIfNull`, attribute polyfills, a C# 7.3 language default, and package references to `Microsoft.CSharp` 4.* and `System.Reflection.Emit` 4.7.0. Those packages are in the shared framework on .NET 10 and .NET 11. The Framework hash of a member name cannot call `string.GetHashCode(StringComparison.Ordinal)`, so it does not match the ordinal `Equals`. 5.0.0 deletes that split. It does not make a warm `InvokeMember` faster, and it does not make the library trim-safe.
[#95](https://github.com/dynamitey-community/dynamitey/issues/95) is Dynamitey.Community 5.0.0. It ships after .NET 11 is generally available, scheduled 10 November 2026, and targets `net10.0` and `net11.0`. The `netstandard2.0` leg is why that library still carries `#if NETSTANDARD2_0`, a `Guard.NotNull` helper instead of `ArgumentNullException.ThrowIfNull`, attribute polyfills, a C# 7.3 language default, and package references to `Microsoft.CSharp` 4.* and `System.Reflection.Emit` 4.7.0. Those packages are in the shared framework on .NET 10 and .NET 11. The Framework hash of a member name cannot call `string.GetHashCode(StringComparison.Ordinal)`, so it does not match the ordinal `Equals`. 5.0.0 deletes that split. It does not make a warm `InvokeMember` faster, and it does not make the library trim-safe.

7.0.0 of this library is the matching line: the last release with `netstandard2.0`. A Framework 4.6.1 through 4.8.1 application stays here. **8.0.0** ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108)) takes Dynamitey.Community 5.0.0 and drops .NET Standard 2.0. [#29](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/29) was the older ticket. It is closed. The 4.0.0 switch is [#130](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/130).
7.0.0 of this library is the matching line: the last release with `netstandard2.0`. A Framework 4.6.1 through 4.8.1 application stays here. **8.0.0** ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108), [milestone](https://github.com/fsprojects/FSharp.Interop.Dynamic/milestone/2)) takes Dynamitey.Community 5.0.0 and drops .NET Standard 2.0. The target date is 10 November 2026. [#29](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/29) was the older ticket. It is closed. The 4.0.0 switch is [#130](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/130).

## Do not take a compile-time dependency on Dynamitey internals

Expand Down
4 changes: 2 additions & 2 deletions docfx/docs/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ NuGet publish is tag-triggered. The workflow is `.github/workflows/publish.yml`.

`VersionPrefix` is **7.0.0**. That release references Dynamitey.Community 4.0.0 and targets `netstandard2.0` and `net10.0`. It is the last release that supports .NET Standard 2.0, and so the last release a .NET Framework 4.6.1 through 4.8.1 application can take.

**8.0.0** drops `netstandard2.0` and targets `net10.0` and `net11.0` ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108)). It follows [Dynamitey.Community 5.0.0](https://github.com/dynamitey-community/dynamitey/issues/95). Not another 5.x.
**8.0.0** drops `netstandard2.0` and targets `net10.0` and `net11.0` ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108), [milestone](https://github.com/fsprojects/FSharp.Interop.Dynamic/milestone/2)). The target date is 10 November 2026. It follows [Dynamitey.Community 5.0.0](https://github.com/dynamitey-community/dynamitey/issues/95). Not another 5.x.

## Cut a release

Expand Down Expand Up @@ -40,4 +40,4 @@ Pull requests never publish.

## After it lands

Confirm nuget.org lists the new version and that README / getting-started install instructions match it. After 7.0.0, the next planned major is 8.0.0 (drop `netstandard2.0`). Not another 5.x.
Confirm nuget.org lists the new version and that README / getting-started install instructions match it. After 7.0.0, the next planned major is 8.0.0 on 10 November 2026 (drop `netstandard2.0`). Not another 5.x.
2 changes: 1 addition & 1 deletion docfx/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Reach for ordinary F# when the member is known at compile time. Reach for this l

## Supported frameworks

7.0.0 targets `netstandard2.0` and `net10.0`. `netstandard2.0` is how a .NET Framework 4.6.1 through 4.8.1 application uses this package. It is also the last release that includes that target. 8.0.0 targets `net10.0` and `net11.0` only ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108)), after [Dynamitey.Community 5.0.0](https://github.com/dynamitey-community/dynamitey/issues/95) drops `netstandard2.0`. Framework 4.8.1 stays serviced with Windows and does not gain BCL APIs, so a Framework application stays on 7.0.0.
7.0.0 targets `netstandard2.0` and `net10.0`. `netstandard2.0` is how a .NET Framework 4.6.1 through 4.8.1 application uses this package. It is also the last release that includes that target. 8.0.0 targets `net10.0` and `net11.0` only ([#108](https://github.com/fsprojects/FSharp.Interop.Dynamic/issues/108)). The target date is 10 November 2026, on the [8.0.0 milestone](https://github.com/fsprojects/FSharp.Interop.Dynamic/milestone/2), after [Dynamitey.Community 5.0.0](https://github.com/dynamitey-community/dynamitey/issues/95) drops `netstandard2.0`. Framework 4.8.1 stays serviced with Windows and does not gain BCL APIs, so a Framework application stays on 7.0.0.

## A word on trimming and AOT

Expand Down
Loading