В конце все сводится к вкусу. Основное отличие -
- общие проекты включены в проекты вашей платформы, как если бы файлы исходного кода были частью самих проектов
- .NET Стандартные проекты компилируются в собственную сборку
.NET Standard заменил переносимые библиотеки классов. Последние устарели и больше не должны использоваться. В любом случае для этого не было бы никаких причин, поскольку .NET Standard более удобен и поддерживает большее подмножество .NET (эффективно - в зависимости от профиля PCL, но тот, который совместим с Xamarin, был довольно ограниченным, например, было очень мало поддержки для классы от System.IO
).
Есть плюсы и минусы как для .NET Standard, так и для общих проектов. В общих проектах вы можете использовать классы непосредственно в проектах вашей платформы (в любом случае, это может быть нежелательно, если вы пытаетесь разработать код SOLID), но вам придется использовать #ifdef
s, чтобы использовать код, совместимый только с одна из платформ. В .NET Standard вам может понадобиться написать классы, которые дважды зависят от платформо-зависимого кода, и загрузить их через DependencyService
или - что еще лучше - полноценный контейнер IoC, но в связи с этим они намного чище, а проблемы разделены гораздо лучше.
Во времена PCL были веские причины идти гибридным путем, например использовать System.IO.File
из класса, который был напрямую скомпилирован в проектах вашей платформы, поскольку оба поддерживают его, но профиль PCL Xamarin этого не делает, но с .NET Standard это больше не требуется.
Я бы всегда пользовался библиотеками .NET Standard по указанным причинам.