We at SharpCrafters would like to discuss the possibility to implement and contribute a feature into NuGet. We understand that it would have high impact on NuGet, so before going into code we would like to have some good discussion and agreement about whether
and how it should be implemented.
Support for locally-installed packages
A local package is a package that has been installed by a third-party setup program (such as the PostSharp setup program, for instance) on the local machine. Local packages are installed in expanded (unzipped) form, respecting the canonical NuGet directory
structure. That is, local packages are not delivered as nupkg files.
When a local package is added to a project, no nupkg file needs to be downloaded. The local package is
not copied to the solution-wide repository. Instead, the project refers to the local directory where the local package is installed (perhaps using a registry key as a level of indirection, as allowed by MSBuild).
Locally-installed packages will have precedence over other (nupkg) packages. When a dependency can be resolved by a local package, this local package should be used, unless specified otherwise by the user (by checking an option or answering a message box).
Although NuGet is a great way to resolve dependencies between software components, a fair number of software tools are still better deployed using an old good setup program. Indeed, software tools are not only composed of APIes, but also contain user interfaces
or build-time components. Deploying them to source control is not always feasible or desirable. However, software tools also contain APIes and it is desirable to use NuGet to resolve dependencies between these APIes. Currently, software tools vendors have
to choose between NuGet and local installation, but there is no way to publish to NuGet any component installed locally by a classic setup program.
We are facing the issue with PostSharp (http://www.nuget.org/profiles/SharpCrafters). PostSharp Toolkits are ready-made aspects that integrate with popular frameworks such as, currently, log4net or
NLog, and later Enterprise Library and other. NuGet is the dream way to distribute toolkits because of dependencies. But without support of the feature we are proposing, our toolkits are not compatible with locally-installed PostSharp. Instead, PostSharp must
be re-installed from NuGet for each solution. Local installation still the preferred way to install PostSharp (especially in the Getting Started experience, which is critical to all software vendors), so we see this feature as critical for us.
We would be willing to spend time and/or money on this feature, but would first like to discuss it in details.
We're looking foward for your feedback!