See and the previous answer I gave for developing a cross-platform client server, in particular with code reuse for multiple clients. This also applies to your Winforms server application here.
Like many answers, you can structure your solution for code sharing as follows:
Project structure
Decision
.. General (Messages, Datacontracts, Utilities)
.. Middleware (Common links, provides common services)
.... Exe Server (Common, Middleware Links)
.... Exe Client (Common, Middleware Links)
Top-Level Client-Server Architecture

Your stack is getting
Customers:
The client has serialization, client-side implementation of web services / middleware and Model-View-Presenter for presentation.
Middleware:
Medium-sized software, that is, sharing services and transferring data on the server / client desktop, may be the same. Alternatively, you can call the Service. Any specific services only for the client (or only for the server) should be placed in separate assemblies and refer only to a specific exe (client or server). those. Do not use common code that is not used!
Messages / DataContracts:
Common to all clients / servers using the methods described above. In your case, these can be shared domain objects shared between the client and server.
Server:
All business logic, access to the database and server implementations. For access to the database, I recommend PetaPoco as an excellent MicroORM.
Development and debugging
Yes, a solution can have more than one exe, just use the Startup Project install by right-clicking on the Exe or Client Exe server to debug one or the other.
If you want to start the client and server together, you can start both from the command line and attach the debugger to both processes.
Yours faithfully,