使用.NET 5,我们可以纵倾我们的项目,以减少它的占用。如果我们知道将通过反射访问Type
,则可以将其标记为动态访问:
public void DoSomethingReflective<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>();
但是,是否也有一种将整个程序集标记为动态访问的方法?
public void DoSomethingReflective(Assembly assembly);
发布于 2020-11-26 08:33:59
应用程序修整已经在.Net 5中进行了扩展,并使您能够更细粒度地控制什么可能是隐式危险的过程。
虽然这些属性是有针对性的(而且很方便),但在现阶段,它们缺乏对更复杂场景的支持。不过,我的直觉是,这个功能集将扩展未来。但是,您现在可以使用基于XML的配置文件,这些配置文件具有广泛的复杂选项和用例。
基本上,它们分为以下几个部分
关于持之以恒(这正是您想要的),您可以将TrimmerRootDescriptor
标记添加到项目文件中。
<ItemGroup>
<TrimmerRootDescriptor Include="Whatever.xml" />
</ItemGroup>
然后在配置文件中,只需通过linker
标记将FullName设置为程序集即可
<linker>
<assembly fullname="SomeAssembly" preserve="all" />
</linker>
或者一个完全限定的名字
<linker>
<assembly fullname="SomeAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
</linker>
如果程序集标记下有类型,则只有列出的类型和成员将被标记为保存,除非在程序集级别指定preserve=all
。
<assembly fullname="AssemblyA">
<type fullname="AssemblyA.One" preserve="all" />
<type fullname="AssemblyA.Two" />
相反,如果类型没有保存属性,并且没有列出任何子元素,那么它的所有成员都将被标记为保存。
附加资源
Preservation 修整器将自动包含它认为应用程序可以达到的所有代码。使用XML文件的保存场景是告诉修整器“保存”代码,而不是删除它,即使它认为它没有被使用。这对于通过反射发现和调用的代码来说是很好的。 ..。 当xml中列出程序集、类型或成员时,默认操作是保存,这意味着无论裁剪器是否认为使用它们,它们都将保留在输出中。保存是可加性的,它会告诉修整器应该保留它认为不需要的额外代码,如果它认为需要一个类型或成员,那么它就会包含它,即使它不会基于保存标记包含它。
https://stackoverflow.com/questions/65017997
复制相似问题