-
Notifications
You must be signed in to change notification settings - Fork 315
Description
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
- Create a brand new console application.
- Add a dependency to either
Microsoft.Data.SqlClient
orMicrosoft.Data.SqlClient.SNI
packages. publish
the project using RIDwin-x64
- Observe
x86
andamd64
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:
Metadata
Metadata
Assignees
Labels
Type
Projects
Status