При ссылке на проект .Net Standard в решении Xamarin весь ли код проекта скомпилирован в приложение - PullRequest
2 голосов
/ 15 июня 2019

Извинения, если это звучит как глупый вопрос. Я не очень разбираюсь в том, как вещи связаны / связаны / собраны под капотом.

Прежде чем начать, я хотел бы сказать, что я пытался читать документацию (например, https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/code-sharing), чтобы найти ответ, но не смог.

Если у меня есть решение Xamarin.Forms и я ссылаюсь на проект .Net Standard:

Вопрос 1: Весь ли код из этого проекта компилируется и включается в приложение так, что он может быть разобран позже, или это только код из классов, которые я фактически использую, который включается

Немного подробнее:
Например, у меня может быть класс School, который ожидает IStudent (ввод через DI), и класс Student, который реализует IStudent. Оба они существуют в проекте .Net Standard, на который я ссылаюсь в проекте Xamarin.Forms. Однако, если я на самом деле использую класс Student (зарегистрировав его с типом IStudent в моем контейнере IoC), будет ли код из School также включен во встроенное приложение?


Вопрос 2: Если весь код из проекта включен, есть ли способ принудительно указать, какие классы включать / исключать, с помощью некоторого параметра конфигурации, атрибутов, сторонней библиотеки или чего-то еще

1 Ответ

1 голос
/ 15 июня 2019

Насколько я знаю, все в проекте NETStandard компилируется и поставляется вместе с приложением.

Если вы хотите удалить неиспользуемый код из скомпилированных сборок, вы должны использовать компоновщик. Чтобы связать все, вы должны выбрать «Sdk и пользовательские сборки».

Компоновщик пытается убрать используемые вами методы и поля, но часто слишком агрессивен (например, методы, на которые ссылается только отражение, будут удалены).

К счастью, есть несколько способов, с помощью которых вы можете настроить поведение компоновщика и заставить его работать. Некоторая ссылка для уточнения:



...