I'd like to take this opportunity to enable support for portable libraries. This will become especially important this year as VS11 ships with portable libraries built-in.
Portable libraries use a moniker like ".NETPortable,Version=v4.0,Profile=Profile1", where the profile determines which platforms the library may run on (each portable library profile maps to a sequence of framework monikers, which may include wildcards).
A portable library should be able to go into a .nupkg with the metadata specifying the
list of frameworks it supports. This is difficult to do with a folder naming convention, so I like johncrim's recommendation to use nuspec (and fall back to the folder naming convention for simple projects and backwards compatibility).
Similarly, we should be able to install a nupkg (containing portable libraries) into a portable library project. In this case, the client should determine the platforms the target project may run on, and the "appropriate" portable library from the nupkg
will be used. (Where "appropriate" IMO means the most platform restricted / highest platform version instance that supports all target platforms/versions - and we'll have to decide whether "fewer platforms" or "higher platform version" is more "appropriate"...
perhaps a "priority" could also be added to the nuspec as a tie-breaker).
We'd also need a simple "refresh" command. Re-targeting portable library projects is simple (and somewhat common), and we'd want a simple way to refresh the "appropriateness logic" for the nupkg installed in that project (or just an uninstall/reinstall-from-cache).
P.S. I think we should also fix
work item 1240 while we're working on this. We should be able to do it without backwards compatibility problems.
P.P.S. While we're at it, do we really need to verify all framework identifiers? We're still missing "Xbox", and others may be added in the future. It would be nice if we could specify the new logic in a way that we can work with any framework identifier
specified in the nuspec.