VStudio всегда компилирует все TargetFrameworks для многоцелевых проектов, на которые есть ссылки, независимо от заголовка, указанного для сборки в решении Uno-platform - PullRequest
2 голосов
/ 17 июня 2020

Я работаю над кроссплатформенным приложением, использующим платформу Uno. Приложение состоит из 5 стандартных головных проектов для моего приложения и десятка связанных проектов кроссплатформенных библиотек (проекты Uno-платформенных кроссплатформенных библиотек, MSBuild.Sdk.Extras, VStudio 2019). В указанных библиотеках проектов есть многоцелевые платформы, указанные как: netstandard2.0; xamarinios10; xamarinmac20; MonoAndroid90; monoandroid10.0. Структура решения выглядит так:

- SolutionApp
    - App.Droid
    - App.iOS
    - App.macOS
    - App.UWP
    - App.Wasm
    - App.Shared
    - MultiTargetLibrary1
    ...
    - MultiTargetLibraryN

Проблема в том, что каждый раз, когда я перестраиваю какой-либо из проектов головного приложения, VStudio перестраивает связанные проекты для всех доступных целевых фреймворков.

Как избежать сборник ненужных целевых платформ? Как ссылочный проект может узнать, какой головной проект вызвал сборку? Есть ли возможность передать, какая именно целевая структура необходима для построения ссылочного проекта из VStudio?

Пример: я решил перестроить App. iOS, и это вызвало перестройку ссылочных проектов. Я хочу, чтобы были построены проекты только с TargetFramework xamarinios10.

Если есть только несколько целевых фреймворков или проектов, компиляция не медленная, но с увеличением количества проектов, на которые ссылаются, время чрезвычайно возрастает.

Как я получил из справочника msbuild: VStudio вызывает msbuild для каждого проекта в решении отдельно, поэтому msbuild не знает, какой головной проект инициировал сборку указанного проекта и какая целевая платформа требуется.

1 Ответ

1 голос
/ 17 июня 2020

Это известная проблема Visual Studio 2019 , когда все цели создаются независимо от фактического компилируемого головного проекта.

Тем временем вы можете вручную исключить некоторые целевые платформы, когда создайте приложение и используйте функцию фильтра Visual Studio, чтобы nuget не жаловался на недопустимые ссылки на проект. Таким образом, вы можете создать 4 фильтра, каждый из которых исключает проекты, которые не используются для платформы, над которой вы сейчас работаете.

...