Skip to content

System.Range not included in NetFramework 4.6.2 projects #96

Description

@rezanid

Description (optional)

I have several NetFramework 4.6.2 projects in a solution and when compiling them, I noticed build issues when using the new range syntax for strings. I replaced the usages of range with SubString calls and compiled the solution then opened the compiled assembly and noticed that the System.Range has not been included.
image

Maybe I'm doing something wrong? but, I wasn't able to find anything about this in the docs.

Reproduction Steps

  1. Build a .Net Framework 4.6.2 Library project.
  2. Use range syntax in a method (e.g. "string"[..2]).
  3. Build the project.
  4. Build will fails, saying that System.Range does not exist.
  5. Replace the range with SubString.
  6. Build again.
  7. Use a decompiler to open the assembly.
  8. You will notice System.Range is not included.

Expected Behavior

The assembly should contain System.Range and the range syntax should work.

Actual Behavior

If range syntax is used the build will fail. If range syntax is not used, build is successful, but the System.Range won't be included.

System info

This section should contain useful info such as:

  • PolySharp NuGet version (or branch/commit, if building from source)
  • Operating system version
  • Visual Studio version, or .NET SDK/runtime version
    • VS Version: 17.8.6
    • Polysharp: 1.14.1
    • .NET: 4.6.2
    • LangVersion: 12.0
    • Project is using the new PackageReference syntax.

Additional context (optional)

I did not notice any messages from Polysharp in the build log, even when building with detailed logging.

Activity

  1. saucecontrol commented on Mar 13, 2024

    @saucecontrol

    I started seeing this today, in a project that had previously been working. Getting an error from the analyzer saying I need to use at least C# 8

    image

    Which I most certainly am

    image

    Doesn't work from VS (17.10P2) or from dotnet CLI (SDK 8.0.200).

    Unfortunately I did a full Patch Tuesday update, including grabbing the new VS preview, so I don't know which thing broke it.

  2. saucecontrol commented on Mar 13, 2024

    @saucecontrol

    Ah, looks like I probably hadn't built the net46 target since applying the fixer to use range syntax this morning, so the software updates were unrelated.

    Reverting that, I do still see the warning node, but the types are being generated. The list includes Index.g.cs, but Range.g.cs is missing.

  3. saucecontrol commented on Mar 13, 2024

    @saucecontrol

    ...And it's mentioned on the readme under a note for .NET 3.5. If you don't have ValueTuple, you don't get Range. Adding a reference to the ValueTuple package fixes it right up.

  4. Sergio0694 commented on Mar 13, 2024

    @Sergio0694
    Owner

    🦆

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions