Skip to content

Comments

Fix DateOnly/TimeOnly design-time type resolution failure for netstandard2.0 targets#1611

Merged
dsyme merged 2 commits intorepo-assist/feature-dateonly-timeonly-1461-03f39b53850547dbfrom
copilot/sub-pr-1609
Feb 22, 2026
Merged

Fix DateOnly/TimeOnly design-time type resolution failure for netstandard2.0 targets#1611
dsyme merged 2 commits intorepo-assist/feature-dateonly-timeonly-1461-03f39b53850547dbfrom
copilot/sub-pr-1609

Conversation

Copy link
Contributor

Copilot AI commented Feb 22, 2026

When the design-time assembly (running on .NET 8) infers DateOnly/TimeOnly types, it was emitting them into generated code even for projects targeting netstandard2.0 — where those types don't exist, causing:

System.Exception: The design-time type 'System.DateOnly' utilized by a type provider
was not found in the target reference assembly set

Fix: downgrade inferred types when target doesn't support .NET 6+

Detection (Helpers.fs): runtimeSupportsNet6Types checks the runtime assembly path TFM (e.g. .../net8.0/...) to determine whether the target supports DateOnly/TimeOnly.

Downgrade functions (StructuralInference.fs): Two new internal functions — downgradeNet6Types (full InferedType tree walk) and downgradeNet6PrimitiveProperty (CSV field) — replace DateOnly→DateTime and TimeOnly→TimeSpan. Includes reference-equality cycle detection to prevent stack overflow on recursive XML type graphs.

Provider integration (CsvProvider.fs, JsonProvider.fs, XmlProvider.fs, HtmlGenerator.fs, HtmlProvider.fs): Each provider calls the appropriate downgrade function when runtimeSupportsNet6Types returns false.

Fix: XSD schema inference for xs:date

XsdInference.fs was always mapping XmlTypeCode.Date → typeof<DateTime>. Now maps to typeof<DateOnly> on .NET 6+, making schema-inferred types consistent with value-inferred types.

FSharp.Data.Xml.Core.fsproj: Added net8.0 to TargetFrameworks (was netstandard2.0 only) so #if NET6_0_OR_GREATER activates in XSD inference code.

Test updates (InferenceTests.fs)

Date-only inference expectations (e.g. "2012-12-19"DateOnly, timestamps with time component remain DateTime) wrapped in #if NET6_0_OR_GREATER.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…gets

Co-authored-by: dsyme <7204669+dsyme@users.noreply.github.com>
@dsyme dsyme marked this pull request as ready for review February 22, 2026 13:04
@dsyme dsyme merged commit 15cf3ce into repo-assist/feature-dateonly-timeonly-1461-03f39b53850547db Feb 22, 2026
@dsyme dsyme deleted the copilot/sub-pr-1609 branch February 22, 2026 13:04
Copilot AI restored the copilot/sub-pr-1609 branch February 22, 2026 13:04
Copy link
Contributor Author

Copilot AI commented Feb 22, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • api.worldbank.org
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/8.0.123/FSharp/fsc.dll @/tmp/MSBuildTempozmhOC/tmp94e4ec414411416faaef70e64f226856.rsp (dns block)
  • schemas.microsoft.com
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/testhost.dll --port 44673 --endpoint 127.0.0.1:044673 --role client --parentprocessid 11244 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/testhost.dll --port 39313 --endpoint 127.0.0.1:039313 --role client --parentprocessid 11395 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/testhost.dll --port 40737 --endpoint 127.0.0.1:040737 --role client --parentprocessid 23985 --telemetryoptedin false (dns block)
  • tomasp.net
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/testhost.dll --port 44673 --endpoint 127.0.0.1:044673 --role client --parentprocessid 11244 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/testhost.dll --port 39313 --endpoint 127.0.0.1:039313 --role client --parentprocessid 11395 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/FSharp.Data.DesignTime.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.DesignTime.Tests/bin/Release/net8.0/testhost.dll --port 40737 --endpoint 127.0.0.1:040737 --role client --parentprocessid 23985 --telemetryoptedin false (dns block)
  • www.google.com
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/FSharp.Data.Core.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/FSharp.Data.Core.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/testhost.dll --port 36091 --endpoint 127.0.0.1:036091 --role client --parentprocessid 49914 --telemetryoptedin false d64.list list (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/FSharp.Data.Core.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/FSharp.Data.Core.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/testhost.dll --port 41659 --endpoint 127.0.0.1:041659 --role client --parentprocessid 50154 --telemetryoptedin false .list (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/FSharp.Data.Core.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/FSharp.Data.Core.Tests.deps.json /home/REDACTED/work/FSharp.Data/FSharp.Data/tests/FSharp.Data.Core.Tests/bin/Release/net8.0/testhost.dll --port 41555 --endpoint 127.0.0.1:041555 --role client --parentprocessid 50393 --telemetryoptedin false ekitglib-1.0.lis/usr/share/dotnet/sdk/8.0.123/MSBuild.dll 4.list uri.list (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Add DateOnly and TimeOnly inference support Fix DateOnly/TimeOnly design-time type resolution failure for netstandard2.0 targets Feb 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants