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 #1451

Closed
rolfbjarne opened this issue Aug 25, 2020 · 1 comment
Closed

Comments

@rolfbjarne
Copy link
Member

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
@marek-safar
Copy link
Contributor

Moved to correct repo

rolfbjarne added a commit to rolfbjarne/xamarin-macios that referenced this issue Aug 26, 2020
…a linker bug.

Ref: dotnet/linker#1451

Fixes this link sdk test failure:

    LinkSdk.CommonLinkSdkTest
        [FAIL] TypeDescriptor_A7793 : System.MissingMethodException : Default constructor not found for type System.ComponentModel.DateTimeOffsetConverter
            at System.RuntimeType.CreateInstanceMono(Boolean nonPublic, Boolean wrapExceptions)
            at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean skipCheckThis, Boolean fillCache)
            at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)
            at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
            at System.Activator.CreateInstance(Type type, Boolean nonPublic)
            at System.Activator.CreateInstance(Type type)
            at System.ComponentModel.ReflectTypeDescriptionProvider.CreateInstance(Type objectType, Type callingType)
            at System.ComponentModel.ReflectTypeDescriptionProvider.SearchIntrinsicTable(Hashtable table, Type callingType)
            at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetConverter(Object instance)
            at System.ComponentModel.ReflectTypeDescriptionProvider.GetConverter(Type type, Object instance)
            at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetConverter()
            at System.ComponentModel.TypeDescriptor.GetConverter(Type type)
            at LinkSdk.CommonLinkSdkTest.TypeDescriptor_A7793() in /Users/rolf/work/maccore/whatever/xamarin-macios/tests/linker/CommonLinkSdkTest.cs:line 21
            at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
spouliot pushed a commit to spouliot/xamarin-macios that referenced this issue Mar 31, 2021
… due to a linker bug."

This reverts commit dea6580.

This was fixed a while ago dotnet/linker#1451 -> dotnet/runtime#41390
dalexsoto pushed a commit to dotnet/macios that referenced this issue Apr 2, 2021
… due to a linker bug." (#11054)

This reverts commit dea6580.

This was fixed a while ago dotnet/linker#1451 -> dotnet/runtime#41390

Co-authored-by: Sebastien Pouliot <sebastien.pouliot@microsoft.com>
tj-devel709 pushed a commit to dotnet/macios that referenced this issue Apr 7, 2021
… due to a linker bug." (#11054)

This reverts commit dea6580.

This was fixed a while ago dotnet/linker#1451 -> dotnet/runtime#41390

Co-authored-by: Sebastien Pouliot <sebastien.pouliot@microsoft.com>
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants