Shared projects
| Pros | Cons |
|---|---|
| All Api's Available | Can lead to spaghetti code |
| Platform-specific logic can be added directly | Difficult to unit test conditional code |
| All file types can be shared | Must be shipped in source form |
| Smaller package sizes/platform-specific optimizations |
DLL's
| Pros | Cons |
|---|---|
| Enforces architectural design | Limited APIs available |
| Can be unit tested separately | Difficult to share non-code files |
| Can be shipped in binary form (NuGet) | Limited to target platforms or APIs |
| Requires more work to integrate platform-specific code |
So which to choose, well generally if your team is small your project is small and the core of it is the UWP/DROID/IOS project then maybe a shared project is the best approach.
however if your team is large and your Application is part of a greater solution, or you want to leverage unit testing or you are working in an enterprise environment then perhaps you should consider a .net shared library
or you could do some sort of hybrid approach, where models are in a dll and business logic is in the shared project because it's specific to the application, it really depends on your problem domain.