There are a lot of different .NET runtimes. Most developers are aware of the desktop framework, Silverlight, and Windows Phone. WinRT/Metro is also coming up shortly. You can download targeting packs to target different frameworks.
Every once in a while (usually while working with NuGet), I find myself needing a refresher on the frameworks and profiles. It's a pain to look all this up again, so I'm collecting it here for future reference.
FrameworkName and Version
A target framework is indicated by a FrameworkName, which has three components: a required framework Identifier, a required framework Version, and an optional framework Profile.
Both Identifier and Profile are always case-insensitive. The FrameworkName constructor allows some flexibility when it parses strings (and NuGet allows even more flexibility), but the canonical structure is as such: Identifier ",Version=v" Version [ ",Profile=" Profile ].
Note that the Version applies to the Identifier; there is no version on a Profile.
Getting the FrameworkName
If you have NuGet installed, you can type the following into the Package Manager Console window to view the target framework for any project:
$p = Get-Project "MyProjectName"
$p.Properties.Item("TargetFrameworkMoniker").Value
Known Framework Identifiers and Profiles
.NETFramework
The .NETFramework identifier is used for the regular desktop framework. For example, ".NETFramework,Version=v3.5" refers to .NET 3.5. You can also target specific updates, e.g., ".NETFramework,Version=v4.0.2" refers to .NET 4.0 Platform Update 2.
If there is no profile specified, the framework refers to the full profile.
Client specifies the client profile; e.g., ".NETFramework,Version=v4.0,Profile=Client" refers to the .NET 4.0 Client Profile. Note that the client profile is not supported in .NET 4.5.
Historical note: The CompactFramework profile specifies the .NET Compact Framework. This probably should have been its own identifier, but doesn't really matter anymore since Visual Studio 2008 was the last version to support CF directly.
Silverlight
The Silverlight identifier is used for the Silverlight framework. For example, "Silverlight,Version=v4.0" refers to Silverlight 4.
If there is no profile specified, the framework refers to the desktop Silverlight framework.
WindowsPhone specifies the first Windows Phone profile; e.g., "Silverlight,Version=v3.0,Profile=WindowsPhone" refers to Windows Phone 7.0. I believe this profile is only applicable to Silverlight version 3.0.
WindowsPhone71 specifies the newer Windows Phone profile; e.g., "Silverlight,Version=v4.0,Profile=WindowsPhone71" refers to Windows Phone 7.5 (Mango). That's not a typo: "7.5" came from marketing; the internal version numbers are all "7.1". However, some (all?) Microsoft tools will treat WindowsPhone75 just like WindowsPhone71, so you may be able to get away with that. I believe this profile is only applicable to Silverlight version 4.0.
Windows Phone probably should have had its own identifier, so that it could be versioned naturally instead of creating profile names like "WindowsPhone71" that are tied to a specific version of an identifier. Oh, well, too late now.
.NETCore
The .NETCore identifier is used for the new .NET framework for Metro style applications. For example, ".NETCore,Version=v4.5" refers to the upcoming Metro/WinRT framework. Note that the first version of this framework will be 4.5. Also, remember that Metro is different than the desktop .NET 4.5 ".NETFramework,Version=v4.5", which will probably be released at the same time.
At this time, details are still a little sketchy, but if I had to guess: you can use .NETCore for Metro development, including applications that will run on Windows RT (Windows on ARM). .NET 4.5 can be used to develop Windows 8 (Intel) desktop apps.
.NETPortable
The .NETPortable identifier is used for portable libraries. Each portable library may run on a number of different platforms, indicated by a profile named ProfileN. For example, ".NETPortable,Version=v4.0,Profile=Profile1" refers to a portable library that can run on .NET 4.0, Silverlight 4, Windows Phone 7, Metro, or XBox 360.
I don't know what meaning the Version has for the .NETPortable identifier.
The .NETPortable identifier requires a profile. The profiles are listed below (as of the Portable Libraries Beta 2 installation):
| Version | Profile | Display Name | Frameworks |
|---|---|---|---|
| 4.0 | Profile1 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4, Silverlight 4, Windows Phone 7, Xbox 360) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone* (Windows Phone) Xbox,Version=v4.0,Profile=* (Xbox 360) |
| 4.0 | Profile2 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4, Silverlight 4, Windows Phone 7) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone* (Windows Phone) |
| 4.0 | Profile3 | .NET Portable Subset (.NET Framework 4, Silverlight 4) | .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) |
| 4.0 | Profile4 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4.5, Silverlight 4, Windows Phone 7) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.5,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone* (Windows Phone) |
| 4.0 | Profile5 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0,Profile=* (.NET Framework) |
| 4.0 | Profile6 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4 Platform Update 3) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) |
| 4.0 | Profile14 | .NET Portable Subset (.NET Framework 4, Silverlight 5) | .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v5.0 (Silverlight) |
| 4.0 | Profile18 | .NET Portable Subset (.NET Framework 4 Platform Update 3, Silverlight 4) | .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) |
| 4.0 | Profile19 | .NET Portable Subset (.NET Framework 4 Platform Update 3, Silverlight 5) | .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v5.0 (Silverlight) |
| 4.0 | Profile23 | .NET Portable Subset (.NET Framework 4.5, Silverlight 4) | .NETFramework,Version=v4.5,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) |
| 4.0 | Profile24 | .NET Portable Subset (.NET Framework 4.5, Silverlight 5) | .NETFramework,Version=v4.5,Profile=* (.NET Framework) Silverlight,Version=v5.0 (Silverlight) |
| 4.0 | Profile36 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4, Silverlight 4) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) |
| 4.0 | Profile37 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4, Silverlight 5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v5.0 (Silverlight) |
| 4.0 | Profile41 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4 Platform Update 3, Silverlight 4) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) |
| 4.0 | Profile42 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4 Platform Update 3, Silverlight 5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v5.0 (Silverlight) |
| 4.0 | Profile46 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4.5, Silverlight 4) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.5,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) |
| 4.0 | Profile47 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4.5, Silverlight 5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.5,Profile=* (.NET Framework) Silverlight,Version=v5.0 (Silverlight) |
| 4.0 | Profile88 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4, Silverlight 4, Windows Phone 7.5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone7* (Windows Phone) |
| 4.0 | Profile95 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4 Platform Update 3, Silverlight 4, Windows Phone 7) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone* (Windows Phone) |
| 4.0 | Profile96 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4 Platform Update 3, Silverlight 4, Windows Phone 7.5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone7* (Windows Phone) |
| 4.0 | Profile104 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4.5, Silverlight 4, Windows Phone 7.5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.5,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone7* (Windows Phone) |
| 4.0 | Profile131 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4 Platform Update 3, Silverlight 4, Windows Phone 7, Xbox 360) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.0.3,Profile=* (.NET Framework) Silverlight,Version=v4.0 (Silverlight) Silverlight,Version=v4.0,Profile=WindowsPhone* (Windows Phone) Xbox,Version=v4.0,Profile=* (Xbox 360) |
| 4.5 | Profile7 | .NET Portable Subset (.NET for Metro style apps, .NET Framework 4.5) | .NETCore,Version=v4.5,Profile=* (.NET for Metro style apps) .NETFramework,Version=v4.5,Profile=* (.NET Framework) |
Xbox and .NETMicroFramework
The Xbox identifier is used for XBox 360 projects. For example, "Xbox,Version=v4.0" refers to the XBox 360 platform. The .NETMicroFramework identifier targets (surprise) the .NET Micro Framework.
And that's all I know about those.
