- Small fixes: open a pull request.
- Anything larger: open an issue first.
- Security problems: follow SECURITY.md, not a public issue.
All changes reach master through a pull request, squash-merged.
- Open the PR. CI runs the build, tests, coverage, analyzers, the docs build, and the security scans.
- Copilot code review runs on the PR. Work through every comment: take the fix (Copilot can usually make it), or reply with why it is a false positive and resolve it.
- Once CI is green and every Copilot comment is addressed or answered, the PR is merged. A maintainer review is welcome but not required.
- CI is green. The build uses
-warnaserroron Linux, Windows, and macOS, with the .NET analyzers atAnalysisMode=All, the Ionide F# analyzers, and FS1182 (unused bindings) on. Fix warnings; do not suppress them. - Behavior changes come with tests in
Tests/(xUnit + FsUnit). The suite must be 0 failed, 0 skipped, and must stay above the coverage floors below. - Docs follow the code. Public API changes update the XML doc comments and any affected page under
docfx/. README code samples are compiled byTests/ReadmeExamples.fs, so keep the two in step. - Style matches the surrounding code. No formatter is enforced; follow the naming, layout, and comment density of the file you are editing.
- Dependencies are pinned. Versions live in
Directory.Packages.props. When you change one, regenerate the lock files withdotnet restore --force-evaluateand commit the updatedpackages.lock.jsonfiles. CI restores with--locked-modeand fails on a stale lock file.
Requires the .NET 10 SDK.
dotnet restore
dotnet build -c Release -warnaserror
dotnet test --project Tests/Tests.fsproj -c ReleaseThe suite must be 0 failed, 0 skipped. Coverage floors are 77% line and 100% branch on FSharp.Interop.Dynamic.
Conceptual pages and the API reference live under docfx/. Do not resurrect build.fsx / FSharp.Formatting.
dotnet build FSharp.Interop.Dynamic/FSharp.Interop.Dynamic.fsproj -c Release
docfx docfx/docfx.json --warningsAsErrorsPRs 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, milestone) targets net10.0 and net11.0 only. The target date is 10 November 2026. It waits on Dynamitey.Community 5.0.0, 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.