很抱歉,这听起来像是一个愚蠢的问题。我对如何在引擎盖下进行链接/捆绑/组装不是很熟练。
在开始之前,我想说我已经尝试阅读文档(例如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:如果确实包含了项目中的所有代码,是否可以通过一些配置设置,属性,第三方库或其他方式强制指定要包含/排除的类。还有吗?
答案 0 :(得分:1)
据我所知,NETStandard项目中的所有内容都已编译并随应用程序一起提供。
如果要从编译的程序集中删除未使用的代码,则必须使用链接器。 要链接所有内容,您必须选择“ SDK和用户程序集”。
链接器尝试不剥离正在使用的方法和字段,但是通常过于激进(例如,仅反射引用的方法将被剥离)。
幸运的是,您可以通过几种方法来微调链接器的行为并使之起作用。一些链接,详细说明:
iOS和Android中的链接器
https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/linker
https://docs.microsoft.com/en-us/xamarin/android/deploy-test/linker