<PublishTrimmed>
.NET内置COM Interop不支持修剪。我找到了一个DLL的子集,可以标记不可技巧以使应用程序运行。但是,这仍然会产生很多警告,我相信从技术上讲,.NET可以在以后的.NET版本中破裂。
com dll实际上并不需要完整的com,而只是使用com兼容的API。我需要的只是调用P/Invoke方法,该方法将指针返回到类似于COM的对象,该对象与自动化的TLB接口匹配。如何将该指针转换为仅使用修剪支持的功能实现特定C#com兼容接口的对象?// auto generated from tlb
[ComImport]
[Guid(<guid>)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ISomeInterface
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
void method([In][MarshalAs(UnmanagedType.LPWStr)] string input, out int pbData);
...
}
// my (simplified) current code using built in com interop
void GetInstance([MarshalAs(UnmanagedType.Interface)] out object createdObject);
GetInstance(out object comObject);
return comObject as ISomeInterface ?? throw new InvalidOperationException("Failed to create ISomeInterface instance.");
simon哀悼者的评论是我使用的答案。我使用
ilspy
将生成的TLB DLL分解为C#。然后,手动伪并在AI的帮助下加快了速度,然后将接口上的属性转换为使用GeneratedComInterface
ComImport
。幸运的是,我使用的com界面是相对基本的,因此,不需要自定义编组,这并不困难。