You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 or Microsoft.Data.SqlClient.SNI packages.
publish the project using RID win-x64
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:
Describe the bug
When assigning a specific
RuntimeIdentifier
duringpublish
, 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 seex86
andarm
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
Microsoft.Data.SqlClient
orMicrosoft.Data.SqlClient.SNI
packages.publish
the project using RIDwin-x64
x86
andamd64
native dependencies in the outputExpected 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:https://www.nuget.org/packages/Grpc.Core
The text was updated successfully, but these errors were encountered: