Can't figure out how to get target framework version of a package via NuGet API?

Topics: General
Mar 5, 2013 at 9:47 AM
Edited Mar 5, 2013 at 9:54 AM
My first thought was it's a pretty simple question - turned out that it's not. Or I missed something.
For a little bit of tooling I'm writing, I need to figure out target framework version (3.5, 4.0, etc.) of a package, given it's id and version. So far, no success. I referenced NuGet executable to get access to the API, and I assume NuGet.Core package does pretty much the same thing.
My understanding was that it should be hidden somewhere behind IPackageMetadata interface, but I couldn't find it so far.
I tried:
  • IPackageMetadata.FrameworkAssemblies - seems to always be an empty array;
  • PackageDependencySet.TargetFramework and SupportedFramework properties - same result, "Enumeration yielded no results".
    So, is there a way to do it via API? If there isn't one, I'd be happy to do a pull request if someone can point me in the right direction.
    P.S. Having TargetFrameworkProfile (e.g. Full, Client) would also be nice.
Mar 5, 2013 at 5:03 PM
Given this example from the OData feed, I would say its done strictly on the client side by inspecting the actual package:
<entry>
    <id>https://nuget.org/api/v2/Packages(Id='32feet.NET.Phone',Version='8.0.0')</id>
    <title type="text">32feet.NET.Phone</title>
    <summary type="text">32feet.NET - Personal Area Networking for .NET</summary>
    <updated>2013-03-04T17:40:57Z</updated>
    <author>
      <name>Peter Foot, Alan McFarlane</name>
    </author>
    <link rel="edit-media" title="V2FeedPackage" href="Packages(Id='32feet.NET.Phone',Version='8.0.0')/$value" />
    <link rel="edit" title="V2FeedPackage" href="Packages(Id='32feet.NET.Phone',Version='8.0.0')" />
    <category term="NuGetGallery.V2FeedPackage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/zip" src="https://nuget.org/api/v2/package/32feet.NET.Phone/8.0.0" />
    <m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
      <d:Version>8.0.0</d:Version>
      <d:Copyright>Copyright &amp;#x00A9; In The Hand Ltd 2003 - 2013</d:Copyright>
      <d:Created m:type="Edm.DateTime">2013-01-15T20:07:08.577</d:Created>
      <d:Dependencies></d:Dependencies>
      <d:Description>32feet.NET for Windows Phone is a shared-source library to simplify Bluetooth development with Windows Phone 8.</d:Description>
      <d:DownloadCount m:type="Edm.Int32">178</d:DownloadCount>
      <d:GalleryDetailsUrl>https://nuget.org/packages/32feet.NET.Phone/8.0.0</d:GalleryDetailsUrl>
      <d:IconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=32feet&amp;DownloadId=172377&amp;Build=1</d:IconUrl>
      <d:IsLatestVersion m:type="Edm.Boolean">false</d:IsLatestVersion>
      <d:IsAbsoluteLatestVersion m:type="Edm.Boolean">false</d:IsAbsoluteLatestVersion>
      <d:IsPrerelease m:type="Edm.Boolean">false</d:IsPrerelease>
      <d:Language m:null="true"></d:Language>
      <d:Published m:type="Edm.DateTime">2013-01-15T20:07:09.22</d:Published>
      <d:LicenseUrl>http://32feet.codeplex.com/license</d:LicenseUrl>
      <d:PackageHash>HCpKssaFrcBT4mP2763CRdRdhiiVjTXscQSgDdasDoGfg4sZx+F53h3kgrkNHk4K8IZujUupf04bHpKnn2eJOA==</d:PackageHash>
      <d:PackageHashAlgorithm>SHA512</d:PackageHashAlgorithm>
      <d:PackageSize m:type="Edm.Int64">10779</d:PackageSize>
      <d:ProjectUrl>http://32feet.codeplex.com/</d:ProjectUrl>
      <d:ReportAbuseUrl>https://nuget.org/package/ReportAbuse/32feet.NET.Phone/8.0.0</d:ReportAbuseUrl>
      <d:ReleaseNotes>Preview release of the new Windows Phone 8 version of the library.</d:ReleaseNotes>
      <d:RequireLicenseAcceptance m:type="Edm.Boolean">true</d:RequireLicenseAcceptance>
      <d:Tags xml:space="preserve"> Bluetooth </d:Tags>
      <d:Title></d:Title>
      <d:VersionDownloadCount m:type="Edm.Int32">30</d:VersionDownloadCount>
    </m:properties>
  </entry>
Mar 5, 2013 at 5:24 PM
Edited Mar 5, 2013 at 5:27 PM
Great. So, to get info on 10 packages I need to download all the binaries (it will take time and traffic even with the fast network) and then do a directory search, mapping directories to framework versions.
What's even worse - every developer that want to do that in the future will search for the solution and then likely do the exact same thing. Even if I create NuGet package that does this, it won't do the justice.
I love Microsoft.
Thanks for clarification @ferventcoder - my above words shouldn't concern you. I'm just thinking out loud.
Mar 5, 2013 at 5:27 PM
To be fair just because it isn't there now in the metadata doesn't mean it shouldn't be there.
Mar 5, 2013 at 5:36 PM
Thanks for your love to Microsoft.
Mar 6, 2013 at 8:56 AM
But VS extension definitely has this information - if you want to install a package version that depends on 4.0 in a 3.5 project, you'll get an error.
So what is it - someone forgot to put it into API? That's private info, may be.