Click here to Skip to main content
16,015,973 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi All,
Our product consists of a solution with a large number of projects.
Each project is a different component of the system, with some libraries playing the role of a service API
and some libraries playing the role of external utilities.
With the evolution of the product and its deployment for a large number of customers,
it was necessary to implement specific requirements in the product according to each customer.
Thus, we have reached a point where our product contains individual lines of code for customers,
while we are interested in keeping the code common to all customers and that individual code for each customer will be taking out to a separated library.

For example, let’s say we have a project called myproj.utils.
This is the base project from which any customers specific projects will extend.
Customers projects will need to inherit all myproj.utils classes.
This project is in use by a large number of services.

For example, let's say we have a customer named CNN.
Inside the myproj.utils project there is a lot of code that belongs to CNN and we want to get it out.
As a first step, we extracted customer specific code into partial classes and it works fine but we want
to get the code completely out of the project so we actually have 2 projects:
myproj.utils and myproj.utils.CNN and that these two projects be partial, just as partial classes are performed.

To sum-up, we want the final customer utils library to be a single DLL built from both myproj.utils and myproj.utils.CNN libraries content.
Is there a way to do this in Visual Studio in such a way that we can connect additional partial projects to the base project?

What I have tried:

We thought about:
1.Performing it using multifile assemblies
2.Using pre-build events (copying customer source files to the main myproj.utils and build it all together)
3.Creating dedicated customer project with reference to main myproj.utils source files (but this is not the desired outcome)
Posted
Updated 20-Feb-22 6:50am
Comments
[no name] 23-Feb-22 20:13pm    
Maybe you can classify your large number of customers into small customer groups to "lighten" the load. (e.g. small biz -> enterprise)

1 solution

I'd go the "customer project" route, and derive customer classes from the main base where there are changes.

That's the simple way to do it, and it gives you automatic updates for bug fixes if needed. The other two solutions require a lot of care and attention to detail to maintain any form of change control and to ensure that changes are reflected in all the right deliverables, particularly when bugs are fixed for one customer that will impact others if they try the same thing.

Maintaining a "core project" with subsidiary projects that use it seems like a lot of effort, but it's far simpler to manage in the long run.
 
Share this answer
 
Comments
Maciej Los 20-Feb-22 14:55pm    
5ed!
BillWoodruff 21-Feb-22 0:55am    
+5 amen !

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900