Skip to content

SNI package does not respect RuntimeIdentifier property #2671

@julealgon

Description

@julealgon

Describe the bug

When assigning a specific RuntimeIdentifier during publish, NuGet packages are supposed to only copy the required DLLs for the affected platforms/runtimes.

For example, if I specify win-x64 as the RID, I should not expect to see x86 and arm versions of DLLs in the output.

However, the Microsoft.Data.SqlClient.SNI package does not respect that, and always copies all of the native versions to the target output folder, namely:

  • Microsoft.Data.SqlClient.SNI.x86.dll
  • Microsoft.Data.SqlClient.SNI.x64.dll
  • Microsoft.Data.SqlClient.SNI.arm64.dll

This creates unnecessary clutter in my applications, increasing the deployment package size.

To reproduce

  1. Create a brand new console application.
  2. Add a dependency to either Microsoft.Data.SqlClient or Microsoft.Data.SqlClient.SNI packages.
  3. publish the project using RID win-x64
  4. Observe x86 and amd64 native dependencies in the output

Expected behavior

Only the DLLs that match the runtime/architecture of the project should be present in the output if the setting is explicitly defined. It should only contain all possibilities if publishing without any specific architecture in mind.

Further technical details

N/A

Additional context
I believe this issue exists because the package does not declare its native dependencies using the proper RID folder structure, and instead follows what seems to be a completely custom approach to copying the native dependencies.

It looks to me that moving to the intended runtime folder with the runtime identifiers inside would be the way to go. Here is another dependency we use that uses that format:

image
https://www.nuget.org/packages/Grpc.Core

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Needs Investigation

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions