You may want to use both the SystemWeaver Client API and the Extension API with a shared code base in order to not have to duplicate the code. This article describes one way to accomplish this. 

Use preprocessor directives in the usings and for the methods that differ in names for the common classes, such as in the example below. 

Together with conditional compilation symbols for different projects:

This tells the compiler to use the SystemWeaver.ExtensionsAPI if the EXTENSION compilation symbol is defined, otherwise it uses the SystemWeaverAPI and SystemWeaver.Common.

This example is taken from a solution where there are three projects, one that is an extension, one that is an external API program that both utilize the third project that contains the common functionality for working with the API:s. So in the extension project the compilation symbol EXTENSION is defined, which tells the common project what usings to include when compiling, and in the external API program there is no compilation symbol defined which makes the third project compile with the external API usings.