-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Description
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.
runtime/src/coreclr/src/System.Private.CoreLib/ILLinkTrim.xml
Lines 17 to 18 in c91269c
| <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:
runtime/src/coreclr/src/vm/corelib.h
Lines 1059 to 1078 in 29e9b5b
| #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.