.NET6开启PublishTrimmed调用TaskScheduler COM库报NotSupportedException如何解决
问题根因
开启PublishTrimmed配置后,.NET默认会关闭内置COM互操作支持,和引用的程序集是否被裁剪无关,因此添加TrimmerRootAssembly配置无法解决该问题。
解决方案
方案1:显式开启内置COM互操作支持(推荐)
不需要关闭PublishTrimmed,对最终exe体积影响极小,仅需要在项目的PropertyGroup节点中添加如下配置即可:
<PropertyGroup> <!-- 原有配置保持不变 --> <BuiltInComInteropSupport>true</BuiltInComInteropSupport> </PropertyGroup>
添加配置后重新编译发布,即可正常初始化TaskScheduler COM对象。
方案2:手动生成互操作程序集
如果方案1仍不生效,可手动生成TaskScheduler的互操作程序集适配裁剪规则:
- 找到系统下的
taskschd.dll文件(默认路径为C:\Windows\System32\taskschd.dll) - 执行命令生成互操作程序集:
tlbimp taskschd.dll /out:TaskScheduler.Interop.dll - 将生成的
TaskScheduler.Interop.dll引入项目,再添加裁剪保留配置:
<ItemGroup> <TrimmerRootAssembly Include="TaskScheduler.Interop" /> </ItemGroup>
方案3:无COM依赖实现
如果希望完全规避COM互操作的裁剪兼容问题,可以直接调用Windows内置的schtasks命令行工具实现计划任务的增删改查操作,不需要任何额外依赖,天然适配裁剪配置。
内容的提问来源于stack exchange,提问作者stack_user
相关产品推荐
相关产品推荐

