Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Type converters are linked away in .NET 5+ when using TrimMode=link #41390

Closed
marek-safar opened this issue Aug 26, 2020 · 4 comments
Closed
Labels
area-System.ComponentModel linkable-framework Issues associated with delivering a linker friendly framework
Milestone

Comments

@marek-safar
Copy link
Contributor

Test project: consoleapp-195d28e.zip

Repro: run make linked, which passes /p:PublishTrimmed=true /p:TrimMode=link to dotnet build:

$ make linked
[linker warnings]
** Executing linked app
bin/Debug/netcoreapp5.0/osx-x64/publish/myproject
❌ Could not get converter for System.DateTimeOffset: No parameterless constructor defined for type 'System.ComponentModel.DateTimeOffsetConverter'.
❌ Could not get converter for System.Decimal: No parameterless constructor defined for type 'System.ComponentModel.DecimalConverter'.
❌ Could not get converter for System.String: No parameterless constructor defined for type 'System.ComponentModel.StringConverter'.
❌ Could not get converter for System.SByte: No parameterless constructor defined for type 'System.ComponentModel.SByteConverter'.
❌ Could not get converter for System.Collections.ObjectModel.Collection`1[System.String]: No parameterless constructor defined for type 'System.ComponentModel.CollectionConverter'.
✅ Converter for System.Type: System.ComponentModel.TypeConverter
❌ Could not get converter for System.UInt64: No parameterless constructor defined for type 'System.ComponentModel.UInt64Converter'.
❌ Could not get converter for System.Int32[]: No parameterless constructor defined for type 'System.ComponentModel.ArrayConverter'.
❌ Could not get converter for System.Nullable`1[System.Int32]: No parameterless constructor defined for type 'System.ComponentModel.NullableConverter'.
❌ Could not get converter for System.Int16: No parameterless constructor defined for type 'System.ComponentModel.Int16Converter'.
❌ Could not get converter for System.Globalization.CultureInfo: No parameterless constructor defined for type 'System.ComponentModel.CultureInfoConverter'.
❌ Could not get converter for System.Single: No parameterless constructor defined for type 'System.ComponentModel.SingleConverter'.
❌ Could not get converter for System.UInt16: No parameterless constructor defined for type 'System.ComponentModel.UInt16Converter'.
❌ Could not get converter for System.Guid: No parameterless constructor defined for type 'System.ComponentModel.GuidConverter'.
❌ Could not get converter for System.Double: No parameterless constructor defined for type 'System.ComponentModel.DoubleConverter'.
❌ Could not get converter for System.Int32: No parameterless constructor defined for type 'System.ComponentModel.Int32Converter'.
❌ Could not get converter for System.TimeSpan: No parameterless constructor defined for type 'System.ComponentModel.TimeSpanConverter'.
❌ Could not get converter for System.Char: No parameterless constructor defined for type 'System.ComponentModel.CharConverter'.
❌ Could not get converter for System.Int64: No parameterless constructor defined for type 'System.ComponentModel.Int64Converter'.
❌ Could not get converter for System.Boolean: No parameterless constructor defined for type 'System.ComponentModel.BooleanConverter'.
❌ Could not get converter for System.Int64: No parameterless constructor defined for type 'System.ComponentModel.Int64Converter'.
❌ Could not get converter for System.UInt32: No parameterless constructor defined for type 'System.ComponentModel.UInt32Converter'.
❌ Could not get converter for System.IO.FileShare: No parameterless constructor defined for type 'System.ComponentModel.EnumConverter'.
❌ Could not get converter for System.ComponentModel.IComponent: No parameterless constructor defined for type 'System.ComponentModel.ReferenceConverter'.

Running make notlinked (which does not pass /p:TrimMode=link to dotnet build, but it still passes /p:PublishTrimmed=true)shows the type converters exist then:

$ make notlinked
** Executing notlinked app
bin/Debug/netcoreapp5.0/osx-x64/publish/myproject
✅ Converter for System.DateTimeOffset: System.ComponentModel.DateTimeOffsetConverter
✅ Converter for System.Decimal: System.ComponentModel.DecimalConverter
✅ Converter for System.String: System.ComponentModel.StringConverter
✅ Converter for System.SByte: System.ComponentModel.SByteConverter
✅ Converter for System.Collections.ObjectModel.Collection`1[System.String]: System.ComponentModel.CollectionConverter
✅ Converter for System.Type: System.ComponentModel.TypeConverter
✅ Converter for System.UInt64: System.ComponentModel.UInt64Converter
✅ Converter for System.Int32[]: System.ComponentModel.ArrayConverter
✅ Converter for System.Nullable`1[System.Int32]: System.ComponentModel.NullableConverter
✅ Converter for System.Int16: System.ComponentModel.Int16Converter
✅ Converter for System.Globalization.CultureInfo: System.ComponentModel.CultureInfoConverter
✅ Converter for System.Single: System.ComponentModel.SingleConverter
✅ Converter for System.UInt16: System.ComponentModel.UInt16Converter
✅ Converter for System.Guid: System.ComponentModel.GuidConverter
✅ Converter for System.Double: System.ComponentModel.DoubleConverter
✅ Converter for System.Int32: System.ComponentModel.Int32Converter
✅ Converter for System.TimeSpan: System.ComponentModel.TimeSpanConverter
✅ Converter for System.Char: System.ComponentModel.CharConverter
✅ Converter for System.Int64: System.ComponentModel.Int64Converter
✅ Converter for System.Boolean: System.ComponentModel.BooleanConverter
✅ Converter for System.Int64: System.ComponentModel.Int64Converter
✅ Converter for System.UInt32: System.ComponentModel.UInt32Converter
✅ Converter for System.IO.FileShare: System.ComponentModel.EnumConverter
✅ Converter for System.ComponentModel.IComponent: System.ComponentModel.ComponentConverter

*** Moved from dotnet/linker#1451 ***

@Dotnet-GitSync-Bot Dotnet-GitSync-Bot added area-System.ComponentModel untriaged New issue has not been triaged by the area owner labels Aug 26, 2020
@ghost
Copy link

ghost commented Aug 26, 2020

Tagging subscribers to this area: @safern
See info in area-owners.md if you want to be subscribed.

@marek-safar marek-safar added the linkable-framework Issues associated with delivering a linker friendly framework label Aug 26, 2020
@marek-safar
Copy link
Contributor Author

marek-safar commented Aug 26, 2020

/cc @eerhardt @rolfbjarne

@eerhardt
Copy link
Member

What version of .NET 5 are you using? We just did work in this area: #39973

cc @layomia

@eerhardt eerhardt added this to the 6.0.0 milestone Aug 26, 2020
@eerhardt eerhardt removed the untriaged New issue has not been triaged by the area owner label Aug 26, 2020
@rolfbjarne
Copy link
Member

I was testing with 5.0.100-rc.1.20414.5 (which failed), today I updated to 5.0.100-rc.1.20414.5, and now this works just fine, so this can be closed.

@ghost ghost locked as resolved and limited conversation to collaborators Dec 7, 2020
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
area-System.ComponentModel linkable-framework Issues associated with delivering a linker friendly framework
Projects
None yet
Development

No branches or pull requests

4 participants