Skip to content

Linker warnings IL2008 and IL2009 when trimming non-Windows CoreCLR application #40336

@eerhardt

Description

@eerhardt

When publishing a linux-x64 app with

    <PublishTrimmed>true</PublishTrimmed>
    <TrimMode>link</TrimMode>

I'm getting the following warnings that I don't get on a Windows CoreCLR application:

resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.Runtime.InteropServices.IDispatch' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.Runtime.InteropServices.IMarshal' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'ForwardCallToInvokeMember' in type 'System.RuntimeType' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.__ComObject' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'SetValue' in type 'System.Reflection.RuntimeFieldInfo' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'GetValue' in type 'System.Reflection.RuntimeFieldInfo' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.Variant' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'CallComputeVtables' in type 'System.Runtime.InteropServices.ComWrappers' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'CallCreateObject' in type 'System.Runtime.InteropServices.ComWrappers' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'CallReleaseObjects' in type 'System.Runtime.InteropServices.ComWrappers' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'CallICustomQueryInterface' in type 'System.Runtime.InteropServices.ComWrappers' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.Runtime.InteropServices.ComWrappersScenario' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.OleAutBinder' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'GetCOMHRExceptionObject' in type 'System.StubHelpers.StubHelpers' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2009: Could not find method 'GetCOMIPFromRCW' in type 'System.StubHelpers.StubHelpers' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.StubHelpers.ObjectMarshaler' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.StubHelpers.InterfaceMarshaler' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]
resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : warning IL2008: Could not resolve type 'System.StubHelpers.MngdSafeArrayMarshaler' specified in resource System.Private.CoreLib.xml in System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e [F:\DotNetTest\HelloWorld\HelloWorld.csproj]

This is because we are referencing Windows-only types in our ILLink.Descriptors.xml file for all platforms of CoreCLR.

<type fullname="System.Runtime.InteropServices.IDispatch" />
<type fullname="System.Runtime.InteropServices.IMarshal" />

And also when we generate the XML file (using CreateRuntimeRootDescriptorFile), we aren't excluding the types that are guarded with #ifdef FEATURE_COMINTEROP. For example:

#ifdef FEATURE_COMINTEROP
DEFINE_CLASS(OBJECTMARSHALER, StubHelpers, ObjectMarshaler)
DEFINE_METHOD(OBJECTMARSHALER, CONVERT_TO_NATIVE, ConvertToNative, SM_ObjIntPtr_RetVoid)
DEFINE_METHOD(OBJECTMARSHALER, CONVERT_TO_MANAGED, ConvertToManaged, SM_IntPtr_RetObj)
DEFINE_METHOD(OBJECTMARSHALER, CLEAR_NATIVE, ClearNative, SM_IntPtr_RetVoid)
DEFINE_CLASS(INTERFACEMARSHALER, StubHelpers, InterfaceMarshaler)
DEFINE_METHOD(INTERFACEMARSHALER, CONVERT_TO_NATIVE, ConvertToNative, SM_Obj_IntPtr_IntPtr_Int_RetIntPtr)
DEFINE_METHOD(INTERFACEMARSHALER, CONVERT_TO_MANAGED, ConvertToManaged, SM_IntPtr_IntPtr_IntPtr_Int_RetObj)
DEFINE_METHOD(INTERFACEMARSHALER, CLEAR_NATIVE, ClearNative, SM_IntPtr_RetVoid)
DEFINE_CLASS(MNGD_SAFE_ARRAY_MARSHALER, StubHelpers, MngdSafeArrayMarshaler)
DEFINE_METHOD(MNGD_SAFE_ARRAY_MARSHALER, CREATE_MARSHALER, CreateMarshaler, SM_IntPtr_IntPtr_Int_Int_IntPtr_RetVoid)
DEFINE_METHOD(MNGD_SAFE_ARRAY_MARSHALER, CONVERT_SPACE_TO_NATIVE, ConvertSpaceToNative, SM_IntPtr_RefObj_IntPtr_RetVoid)
DEFINE_METHOD(MNGD_SAFE_ARRAY_MARSHALER, CONVERT_CONTENTS_TO_NATIVE, ConvertContentsToNative, SM_IntPtr_RefObj_IntPtr_Obj_RetVoid)
DEFINE_METHOD(MNGD_SAFE_ARRAY_MARSHALER, CONVERT_SPACE_TO_MANAGED, ConvertSpaceToManaged, SM_IntPtr_RefObj_IntPtr_RetVoid)
DEFINE_METHOD(MNGD_SAFE_ARRAY_MARSHALER, CONVERT_CONTENTS_TO_MANAGED, ConvertContentsToManaged, SM_IntPtr_RefObj_IntPtr_RetVoid)
DEFINE_METHOD(MNGD_SAFE_ARRAY_MARSHALER, CLEAR_NATIVE, ClearNative, SM_IntPtr_RefObj_IntPtr_RetVoid)
#endif // FEATURE_COMINTEROP

In order to fix this, we should ensure we don't add linker XML entries for types that don't exist on other platforms.

cc @sbomer @vitek-karas

Metadata

Metadata

Assignees

Labels

area-Metalinkable-frameworkIssues associated with delivering a linker friendly framework

Type

No type

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions