.netpublisher-policy

How to reference shared assemblies that are still under development (.NET)


I am responsible for developing and maintaining a set of common, framework assemblies that are used to build our product applications. These assemblies are relatively new and in a state of flux as new features are implemented, etc. As a result, it is not unusual for them to be rebuilt and redistributed somewhat frequently. I would expect this to decrease as the assemblies are stabalized, but it is what it is today.

Right now, the assemblies are placed into a Common folder where the development projects can reference the same assemblies. Applying updates is as simple as replacing the files and the development projects automatically pick-up the changes the next time they are loaded and built.

The problem I have is that we may have several "layers" of assemblies built upon the framework - for instance, we have a Core library shared by all applications and a Server library that references Core and is shared by all Server application. All of the dependancies also have to be rebuilt each time the framework assemblies are updated, making this a very large task. I don't believe I can use the GAC because this would require that all of the developers update their systems each time a new version is released.

I've investigated Publisher Policies but have some doubts that this will solve my problem for a few of reasons:

The goal would be to make updating these assemblies transparent to our application developers that are consuming them. We will undoubtedly install these assemblies into the GAC on the target machine when the application is installed, but we don't want to do so for development purposes. It is also not reasonable to include the projects in each application's Solution because they are developed by different teams.

I can't imagine that I am alone in these requirements and hope someone can share their experience and wisdom to guide me to a solution. Thanks!


Solution

  • NuGet has solved this problem. By distributing the shared assemblies, frameworks, etc as NuGet packages from a private repository on our network, we can easily post updates and have them applied to client code as appropriate.