我为我的 C# .NET 6 控制台应用程序启用了
<PublishTrimmed>
。它使用 Autofac 来注册类型。在某些情况下,我会扫描当前应用程序以查找实现如下接口的类:
// Register all types deriving from CliFx's ICommand. These are all of our supported subcommands.
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.IsAssignableTo(typeof(ICommand)));
我在这里收到分析警告,因为
RegisterAssemblyTypes()
是用 RequiresUnreferencedCode
属性修饰的。但是,我的所有 ICommand
实现在运行时仍然可用(通过运行所有子命令并查看程序功能来确定)。
我选择使用调用方法上的
UnconditionalSuppressMessage
属性来抑制此分析问题,但我想了解我是否在做正确的事情。我确实阅读了 MS 文档中有关修剪的几个主题,但我仍然不清楚这些 ICommand
子类如何不被剥离。有人可以向我解释一下如何判断用于 DI 目的的某些装配体扫描操作是否可以安全地进行修剪吗?是因为我扫描的是“执行程序集”所以它是安全的吗?
使用此注册模式意味着您修剪的应用程序中的某些功能可能会被破坏,因为修剪器在发布时无法知道传递给什么类型
IsAssignableTo
。
我建议阅读 dotnet 文档 中有关一般警告的部分。
这个关于输入的特定部分我认为与您更具体相关。