在Xamarin解决方案中引用.Net Standard项目时,该项目中的所有代码是否都会编译到应用程序中

时间:2019-06-15 05:41:33

标签: xamarin.forms .net-standard-2.0

很抱歉,这听起来像是一个愚蠢的问题。我对如何在引擎盖下进行链接/捆绑/组装不是很熟练。

在开始之前,我想说我已经尝试阅读文档(例如https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/code-sharing)来找到答案,但是无法找到答案。

如果我有Xamarin.Forms解决方案并且引用了.Net Standard项目:

问题1:该项目中的所有代码是否都已编译并包含在应用程序中,以便以后可以反汇编,或者它仅仅是我实际使用的类中的代码包括在内?

更多细节:
例如,我可能有一个School类,期望一个IStudent(通过DI注入),一个Student类实现IStudent。这两个都存在于我在Xamarin.Forms项目中引用的.Net Standard项目中。但是,如果我仅实际使用Student类(通过在IoC容器中以类型IStudent注册),则School中的代码也将包含在内置应用程序中?


问题2:如果确实包含了项目中的所有代码,是否可以通过一些配置设置,属性,第三方库或其他方式强制指定要包含/排除的类。还有吗?

1 个答案:

答案 0 :(得分:1)

据我所知,NETStandard项目中的所有内容都已编译并随应用程序一起提供。

如果要从编译的程序集中删除未使用的代码,则必须使用链接器。 要链接所有内容,您必须选择“ SDK和用户程序集”。

链接器尝试不剥离正在使用的方法和字段,但是通常过于激进(例如,仅反射引用的方法将被剥离)。

幸运的是,您可以通过几种方法来微调链接器的行为并使之起作用。一些链接,详细说明: