Repository navigation
Switch the Dynamitey dependency to Dynamitey.Community 4.0.0 #130
Description
Replace the Dynamitey 3.0.3 reference with Dynamitey.Community 4.0.0.
Version
This ships as 7.0.0. VersionPrefix becomes 7.0.0. Target frameworks stay netstandard2.0 and net10.0. It is a major because Dyn.namedArg, Dyn.staticContext, and Dyn.staticTarget return Dynamitey types, and those types move to assembly Dynamitey.Community.
Dropping netstandard2.0 is 8.0.0 (#108), later in 2026. 7.0.0 does not do that. Dynamitey.Community 4.0.0 is the last release of that package that still targets netstandard2.0.
Jay Tuley wrote Dynamitey. The nuget.org id Dynamitey stopped at 3.0.3 on 8 November 2023. ekonbenefits/dynamitey has not shipped since. dynamitey-community/dynamitey publishes the continuation as Dynamitey.Community, so the old id can stay at 3.0.3. The namespace is still Dynamitey. open Dynamitey does not change. The assembly name is Dynamitey.Community.
4.0.0 targets netstandard2.0 and net10.0. This library already targets that pair.
The release notes are About 4.0.0. That page counts 219 tests in the upstream tree and 852 in this release, 0 failed, 0 skipped. 54 issues on the community repo are closed. Six were brought over from the old tracker.
| Issue | Filed | What changed |
|---|---|---|
InvokeConstructor above 14 arguments |
2014 | Past the generated ceiling, a hand-written branch built the call site with the wrong return type. That included a constructor with a params array. |
InvokeGet on a static field |
2014 | A field has no get_ method, so the call falls back to reflection. The caller's context still decides what it may read. |
| Static context on nested private classes | 2018 | The result depended on whether an earlier call had warmed the shared cache. |
| A generic method call | 2020 | Could not be reproduced. Explicit generic arguments have tests now. |
Awaiting a ValueTask<T> |
2021 | Could not be reproduced, on current code or on a rebuild of the 3.0.3 sources. |
| An async method on an internal class | 2022 | await works when T is not visible to the caller. |
Same release, also closed: static get and set of one property in a single process; list change notifications and List.Remove(null); dictionary and list equality, and Equals / GetHashCode on invocations; static events; named arguments and named index assignment; curry and CacheableInvocation dropping a context or an argument count; Task<T> and ValueTask<T> whose T the caller cannot see; protected access from a derived type. The path above 14 arguments had depended on a package reference 3.0.3 never declared. That is the TypeLoadException: Cannot Emit long delegates without ImpromptuInterface installed in caveats.
net40 is dropped. net10.0 is added. 4.0.0 is the last release that still targets netstandard2.0 (dynamitey-community#95 is the follow-on). On 6 May 2019 Microsoft wrote that .NET Framework 4.8 is the last major Framework version, and that new runtime and BCL work goes to modern .NET (.NET Core is the Future of .NET). A Framework app stays on Dynamitey.Community 4.x.
Nullable reference types are enabled. The dynamic entry points are marked RequiresUnreferencedCode and RequiresDynamicCode. Trim and NativeAOT then warn at build time (IL2026, IL3050). On 3.0.3 the same publish could succeed and then throw RuntimeBinderException for a member the trimmer had removed.
PublicAPI.Shipped.txt fails the build if the public surface changes and the file does not. The rename left that file byte-identical. The three process-wide call-site maps are concurrent dictionaries. The 4.0.0 notes say the dependencies are current, with no known vulnerable or deprecated packages. CI builds and tests on Linux, macOS, and Windows, with coverage floors, CodeQL, NuGet audit, and Trusted Publishing. The repo has no NuGet API key. Tests are NUnit 4. Benchmarks are BenchmarkDotNet, and a slow wall-clock time no longer fails the build.
CodeMaid removed 98 unused using directives and sorted the rest. The unused internal type DummmyNull is deleted. Four catch (Exception) blocks now catch the exception those calls throw. Commented-out code, unused locals, and orphaned build files from the old tree are gone. Suppressions that remain are listed in the csproj, each with a reason, where the fix would change behavior or the public API.
A message went to the original maintainer on 2026-09-05, through the NuGet "Contact owners" form on the Dynamitey package. No reply by 2026-09-26 (dynamitey-community#8).
#29 expected the update to land on the Dynamitey package id. 4.0.0 is on nuget.org as Dynamitey.Community, published 26 September 2026.
In this repository
VersionPrefix in Directory.Build.props becomes 7.0.0. The package version is in Directory.Packages.props. The reference is in FSharp.Interop.Dynamic/FSharp.Interop.Dynamic.fsproj. Target frameworks stay netstandard2.0;net10.0.
- <PackageVersion Include="Dynamitey" Version="3.0.3" />
+ <PackageVersion Include="Dynamitey.Community" Version="4.0.0" />- <PackageReference Include="Dynamitey" />
+ <PackageReference Include="Dynamitey.Community" />dotnet test should still pass.
The README, Dynamitey page, and 15-argument caveat already name 4.0.0 and still say this package is on 3.0.3. When the reference moves, flip that version in the same change: README.md, docfx/index.md, docfx/docs/dynamitey.md, docfx/docs/caveats.md, docfx/docs/tryget.md ("These ship on Dynamitey 3.0.3"), and CHANGELOG.md. SECURITY.md already sends Dynamitey vulnerability reports to the community repo.
A project that references both packages gets CS0433: the type Invocation exists in Dynamitey.Community 4.0.0 and in Dynamitey 3.0.3. The new assembly name is what produces that error at compile time. ImpromptuInterface still references the original Dynamitey. How to alias it is in the community readme. This library does not reference ImpromptuInterface.
Activity
feat: reference Dynamitey.Community 4.0.0 as 7.0.0 (#130) (#135)