├── docs ├── CNAME ├── script.js ├── style.css ├── index.html └── data.js ├── src ├── AsJson │ ├── VS2015.zip │ ├── packages.config │ ├── app.config │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── AsJson.csproj │ └── Program.cs ├── FrameworkProfiles │ ├── FileSystem │ │ ├── IFolderItem.cs │ │ ├── IFile.cs │ │ ├── IFolder.cs │ │ ├── DiskFileSystem.cs │ │ └── ZipFileSystem.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── VersionHelpers.cs │ ├── PortableProfile.cs │ ├── NugetTargets.cs │ ├── PortableFrameworkProfileEnumerator.cs │ ├── FrameworkProfiles.csproj │ └── FrameworkProfile.cs └── GetPortableFrameworkProfiles.sln ├── README.md ├── LICENSE ├── .gitignore └── .gitattributes /docs/CNAME: -------------------------------------------------------------------------------- 1 | portablelibraryprofiles.stephencleary.com 2 | -------------------------------------------------------------------------------- /src/AsJson/VS2015.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenClearyApps/PortableLibraryProfiles/HEAD/src/AsJson/VS2015.zip -------------------------------------------------------------------------------- /src/AsJson/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/AsJson/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/script.js: -------------------------------------------------------------------------------- 1 | function MyCtrl($scope) { 2 | $scope.list = data; 3 | $scope.description = description; 4 | $scope.includeLegacy = false; 5 | 6 | $scope.legacyFilter = function (profile) { 7 | return $scope.includeLegacy || profile.supportedByVisualStudio2013; 8 | }; 9 | } -------------------------------------------------------------------------------- /src/FrameworkProfiles/FileSystem/IFolderItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace FrameworkProfiles.FileSystem 7 | { 8 | public interface IFolderItem 9 | { 10 | string FullPath { get; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/FileSystem/IFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace FrameworkProfiles.FileSystem 8 | { 9 | public interface IFile : IFolderItem 10 | { 11 | Stream Open(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/style.css: -------------------------------------------------------------------------------- 1 | /* Styles go here */ 2 | 3 | .verticalSpacing { 4 | margin-bottom: 0.5em; 5 | } 6 | 7 | .table-hover tbody tr:hover td, .table-hover tbody tr:hover th { 8 | background-color: lightblue; 9 | } 10 | 11 | .bad { 12 | color: red; 13 | } 14 | 15 | .good { 16 | color: green; 17 | } 18 | 19 | .pushdown { 20 | margin-top: 1em; 21 | } -------------------------------------------------------------------------------- /src/FrameworkProfiles/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyTitle("FrameworkProfiles")] 4 | 5 | [assembly: AssemblyDescription("Enumerate all PCL profiles for all frameworks installed on the local machine.")] 6 | [assembly: AssemblyCompany("Stephen Cleary")] 7 | [assembly: AssemblyProduct("PortableLibraryProfiles")] 8 | [assembly: AssemblyCopyright("Copyright © 2013 Stephen Cleary")] 9 | 10 | [assembly: AssemblyVersion("1.0.0")] 11 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/FileSystem/IFolder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace FrameworkProfiles.FileSystem 7 | { 8 | public interface IFolder : IFolderItem 9 | { 10 | IEnumerable EnumerateFolders(); 11 | 12 | IEnumerable EnumerateFiles(); 13 | 14 | IFolder Folder(string name); 15 | 16 | IFile File(string name); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/AsJson/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyTitle("AsJson")] 4 | 5 | [assembly: AssemblyDescription("Enumerate all PCL profiles for all frameworks installed on the local machine. Converts them to JSON and copies them to the clipboard.")] 6 | [assembly: AssemblyCompany("Stephen Cleary")] 7 | [assembly: AssemblyProduct("PortableLibraryProfiles")] 8 | [assembly: AssemblyCopyright("Copyright © 2013 Stephen Cleary")] 9 | 10 | [assembly: AssemblyVersion("1.0.0")] 11 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/VersionHelpers.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FrameworkProfiles 8 | { 9 | public static class VersionHelpers 10 | { 11 | public static string FriendlyName(this Version version) 12 | { 13 | var result = version.Major + "." + version.Minor; 14 | if (version.Build > 0 || version.Revision > 0) 15 | result += "." + version.Build; 16 | if (version.Revision > 0) 17 | result += "." + version.Revision; 18 | return result; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PortableLibraryProfiles 2 | ======================= 3 | 4 | A simple library and console app to enumerate all PCL profiles for all frameworks installed on the local machine. 5 | 6 | Usage 7 | ===== 8 | 9 | Just execute the app. 10 | 11 | All PCL profiles on the local machine (at C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable) are examined, converted to JSON, and stored in a "profiles.json" file. 12 | 13 | Also, if there are any folders in the same directory as the executable, they are treated as a .NETPortable folder, and they are processed separately into their own profiles.json file. 14 | 15 | To see the results in a table, go here: 16 | 17 | 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 StephenCleary 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /src/GetPortableFrameworkProfiles.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.30324.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FrameworkProfiles", "FrameworkProfiles\FrameworkProfiles.csproj", "{0C34B73C-1935-45CD-9EF2-579A7D1B2D23}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsJson", "AsJson\AsJson.csproj", "{86FEB8AE-2E98-4C53-9F1F-ADA4080E247B}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3E1B5E2F-8069-4DB2-B6F8-8549788A38A1}" 11 | ProjectSection(SolutionItems) = preProject 12 | ..\README.md = ..\README.md 13 | EndProjectSection 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Release|Any CPU = Release|Any CPU 19 | EndGlobalSection 20 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 21 | {0C34B73C-1935-45CD-9EF2-579A7D1B2D23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 22 | {0C34B73C-1935-45CD-9EF2-579A7D1B2D23}.Debug|Any CPU.Build.0 = Debug|Any CPU 23 | {0C34B73C-1935-45CD-9EF2-579A7D1B2D23}.Release|Any CPU.ActiveCfg = Release|Any CPU 24 | {0C34B73C-1935-45CD-9EF2-579A7D1B2D23}.Release|Any CPU.Build.0 = Release|Any CPU 25 | {86FEB8AE-2E98-4C53-9F1F-ADA4080E247B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 26 | {86FEB8AE-2E98-4C53-9F1F-ADA4080E247B}.Debug|Any CPU.Build.0 = Debug|Any CPU 27 | {86FEB8AE-2E98-4C53-9F1F-ADA4080E247B}.Release|Any CPU.ActiveCfg = Release|Any CPU 28 | {86FEB8AE-2E98-4C53-9F1F-ADA4080E247B}.Release|Any CPU.Build.0 = Release|Any CPU 29 | EndGlobalSection 30 | GlobalSection(SolutionProperties) = preSolution 31 | HideSolutionNode = FALSE 32 | EndGlobalSection 33 | EndGlobal 34 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/PortableProfile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace FrameworkProfiles 6 | { 7 | public sealed class PortableProfile : FrameworkProfile 8 | { 9 | public PortableProfile() 10 | { 11 | SupportedFrameworks = new List(); 12 | } 13 | 14 | public override bool SupportedByVisualStudio2013 15 | { 16 | get { return SupportedFrameworks.All(x => x.SupportedByVisualStudio2013); } 17 | } 18 | 19 | public override bool SupportedByVisualStudio2015 20 | { 21 | get { return SupportedFrameworks.All(x => x.SupportedByVisualStudio2015); } 22 | } 23 | 24 | public override bool SupportsAsync 25 | { 26 | get { return SupportedFrameworks.All(x => x.SupportsAsync); } 27 | } 28 | 29 | public override bool SupportsGenericVariance 30 | { 31 | get { return SupportedFrameworks.All(x => x.SupportsGenericVariance); } 32 | } 33 | 34 | public override string NugetTarget 35 | { 36 | get 37 | { 38 | if (SupportedFrameworks.Any(x => x.NugetTarget == string.Empty)) 39 | return string.Empty; 40 | return "portable-" + string.Join("+", SupportedFrameworks.Select(x => x.NugetTarget)); 41 | } 42 | } 43 | 44 | public override Version NetStandard 45 | { 46 | get 47 | { 48 | var versions = SupportedFrameworks.Select(x => x.NetStandard).ToArray(); 49 | if (versions.Any(x => x == null)) 50 | return null; 51 | return versions.Min(); 52 | } 53 | } 54 | 55 | public List SupportedFrameworks { get; private set; } 56 | } 57 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build Folders (you can keep bin if you'd like, to store dlls and pdbs) 2 | [Bb]in/ 3 | [Oo]bj/ 4 | 5 | # mstest test results 6 | TestResults 7 | 8 | ## Ignore Visual Studio temporary files, build results, and 9 | ## files generated by popular Visual Studio add-ons. 10 | 11 | # Other plugins 12 | .localhistory/ 13 | 14 | # User-specific files 15 | *.suo 16 | *.user 17 | *.sln.docstates 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Rr]elease/ 22 | x64/ 23 | *_i.c 24 | *_p.c 25 | *.ilk 26 | *.meta 27 | *.obj 28 | *.pch 29 | *.pdb 30 | *.pgc 31 | *.pgd 32 | *.rsp 33 | *.sbr 34 | *.tlb 35 | *.tli 36 | *.tlh 37 | *.tmp 38 | *.log 39 | *.vspscc 40 | *.vssscc 41 | .builds 42 | 43 | # Visual C++ cache files 44 | ipch/ 45 | *.aps 46 | *.ncb 47 | *.opensdf 48 | *.sdf 49 | 50 | # Visual Studio profiler 51 | *.psess 52 | *.vsp 53 | *.vspx 54 | 55 | # Guidance Automation Toolkit 56 | *.gpState 57 | 58 | # ReSharper is a .NET coding add-in 59 | _ReSharper* 60 | 61 | # NCrunch 62 | *.ncrunch* 63 | .*crunch*.local.xml 64 | 65 | # Installshield output folder 66 | [Ee]xpress 67 | 68 | # DocProject is a documentation generator add-in 69 | DocProject/buildhelp/ 70 | DocProject/Help/*.HxT 71 | DocProject/Help/*.HxC 72 | DocProject/Help/*.hhc 73 | DocProject/Help/*.hhk 74 | DocProject/Help/*.hhp 75 | DocProject/Help/Html2 76 | DocProject/Help/html 77 | 78 | # Click-Once directory 79 | publish 80 | 81 | # Publish Web Output 82 | *.Publish.xml 83 | 84 | # NuGet Packages Directory 85 | packages 86 | 87 | # Windows Azure Build Output 88 | csx 89 | *.build.csdef 90 | 91 | # Windows Store app package directory 92 | AppPackages/ 93 | 94 | # Others 95 | [Bb]in 96 | [Oo]bj 97 | sql 98 | TestResults 99 | [Tt]est[Rr]esult* 100 | *.Cache 101 | ClientBin 102 | [Ss]tyle[Cc]op.* 103 | ~$* 104 | *.dbmdl 105 | Generated_Code #added for RIA/Silverlight projects 106 | 107 | # Backup & report files from converting an old project file to a newer 108 | # Visual Studio version. Backup files are not needed, because we have git ;-) 109 | _UpgradeReport_Files/ 110 | Backup*/ 111 | UpgradeLog*.XML 112 | .vs/ 113 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/FileSystem/DiskFileSystem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace FrameworkProfiles.FileSystem 8 | { 9 | public static class DiskFileSystem 10 | { 11 | public static IFolder Folder(string fullPath) 12 | { 13 | return new DiskFolder(fullPath); 14 | } 15 | 16 | private abstract class DiskFolderItem : IFolderItem 17 | { 18 | protected DiskFolderItem(string fullPath) 19 | { 20 | FullPath = fullPath; 21 | } 22 | 23 | public string FullPath { get; private set; } 24 | 25 | public override string ToString() 26 | { 27 | return FullPath; 28 | } 29 | } 30 | 31 | private sealed class DiskFile : DiskFolderItem, IFile 32 | { 33 | public DiskFile(string fullPath) 34 | : base(fullPath) 35 | { 36 | } 37 | 38 | public Stream Open() 39 | { 40 | return File.OpenRead(FullPath); 41 | } 42 | } 43 | 44 | private sealed class DiskFolder : DiskFolderItem, IFolder 45 | { 46 | public DiskFolder(string fullPath) 47 | : base(fullPath) 48 | { 49 | } 50 | 51 | public IEnumerable EnumerateFolders() 52 | { 53 | return Directory.EnumerateDirectories(FullPath).Select(x => new DiskFolder(x)); 54 | } 55 | 56 | public IEnumerable EnumerateFiles() 57 | { 58 | return Directory.EnumerateFiles(FullPath).Select(x => new DiskFile(x)); 59 | } 60 | 61 | public IFolder Folder(string name) 62 | { 63 | var path = Path.Combine(FullPath, name); 64 | if (!Directory.Exists(path)) 65 | return null; 66 | return new DiskFolder(path); 67 | } 68 | 69 | public IFile File(string name) 70 | { 71 | var path = Path.Combine(FullPath, name); 72 | if (!System.IO.File.Exists(path)) 73 | return null; 74 | return new DiskFile(path); 75 | } 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/NugetTargets.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Versioning; 5 | using System.Text; 6 | 7 | namespace FrameworkProfiles 8 | { 9 | public static class NugetTargets 10 | { 11 | // https://github.com/NuGet/NuGet3/blob/dev/src/NuGet.Frameworks/FrameworkConstants.cs 12 | // https://github.com/NuGet/NuGet3/blob/dev/src/NuGet.Frameworks/DefaultFrameworkMappings.cs 13 | 14 | private static readonly Dictionary KnownNugetTargets = new Dictionary 15 | { 16 | { new FrameworkName("Silverlight,Version=v4.0"), "sl4" }, 17 | { new FrameworkName("Silverlight,Version=v5.0"), "sl5" }, 18 | { new FrameworkName("Silverlight,Version=v4.0,Profile=WindowsPhone*"), "wp7" }, 19 | { new FrameworkName("Silverlight,Version=v4.0,Profile=WindowsPhone7*"), "wp71" }, 20 | 21 | // Prefer "win" TFMs to reduce confusion with the new .NET Core (which has nothing to do with the netcore TFM). 22 | { new FrameworkName(".NETCore,Version=v4.5,Profile=*"), "win8" }, 23 | { new FrameworkName(".NETCore,Version=v4.5.1,Profile=*"), "win81" }, 24 | }; 25 | 26 | private static readonly Dictionary KnownNugetPlatforms = new Dictionary 27 | { 28 | { ".NETFramework", "net" }, 29 | { "WindowsPhone", "wp" }, 30 | { "WindowsPhoneApp", "wpa" }, 31 | { "MonoAndroid", "monoandroid" }, 32 | { "MonoTouch", "monotouch" }, 33 | { "Xamarin.iOS", "xamarinios" }, 34 | }; 35 | 36 | public static string GetNugetTarget(FrameworkProfile profile) 37 | { 38 | string result; 39 | if (KnownNugetTargets.TryGetValue(profile.Name, out result)) 40 | return result; 41 | string platform; 42 | if (!KnownNugetPlatforms.TryGetValue(profile.Name.Identifier, out platform)) 43 | return string.Empty; 44 | var version = profile.Name.Version.ToString(); 45 | while (version.EndsWith(".0")) 46 | version = version.Substring(0, version.Length - 2); 47 | 48 | // This is dangerous if any version number goes >= 10, but hey, that's NuGet's problem... 49 | return platform + version.Replace(".", string.Empty); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/PortableFrameworkProfileEnumerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Runtime.Versioning; 6 | using System.Text; 7 | using System.Xml.Linq; 8 | using FrameworkProfiles.FileSystem; 9 | 10 | namespace FrameworkProfiles 11 | { 12 | public static class PortableFrameworkProfileEnumerator 13 | { 14 | public static readonly string MachineProfilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Reference Assemblies", "Microsoft", "Framework", ".NETPortable"); 15 | 16 | public static IEnumerable EnumeratePortableProfiles(IFolder folder) 17 | { 18 | foreach (var version in folder.EnumerateFolders()) 19 | { 20 | var profilesFolder = version.Folder("Profile"); 21 | if (profilesFolder == null) 22 | continue; 23 | foreach (var profile in profilesFolder.EnumerateFolders()) 24 | { 25 | var versionFileName = Path.GetFileName(version.FullPath.TrimEnd('/')); 26 | var profileFileName = Path.GetFileName(profile.FullPath.TrimEnd('/')); 27 | var ret = new PortableProfile 28 | { 29 | Name = new FrameworkName(".NETPortable", new Version(versionFileName.Substring(1)), profileFileName) 30 | }; 31 | 32 | var frameworkListFile = profile.Folder("RedistList").File("FrameworkList.xml"); 33 | var frameworkList = XElement.Load(frameworkListFile.Open()); 34 | ret.DisplayName = frameworkList.Attribute("Name").Value; 35 | 36 | var supportedFrameworkFolder = profile.Folder("SupportedFrameworks"); 37 | var supportedFrameworks = supportedFrameworkFolder.EnumerateFiles(); 38 | foreach (var supportedFramework in supportedFrameworks) 39 | { 40 | var xml = XElement.Load(supportedFramework.Open()); 41 | var maximumVisualStudioVersionAttribute = xml.Attribute("MaximumVisualStudioVersion"); 42 | var childFramework = new FrameworkProfile 43 | { 44 | DisplayName = xml.Attribute("DisplayName").Value, 45 | Name = new FrameworkName(xml.Attribute("Identifier").Value, new Version(xml.Attribute("MinimumVersion").Value), xml.Attribute("Profile").Value), 46 | MaximumVisualStudioVersion = maximumVisualStudioVersionAttribute == null ? null : new Version(maximumVisualStudioVersionAttribute.Value), 47 | }; 48 | if (!childFramework.IsPrivate) 49 | ret.SupportedFrameworks.Add(childFramework); 50 | } 51 | 52 | if (ret.SupportedFrameworks.Count > 1) 53 | yield return ret; 54 | } 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/FrameworkProfiles.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {0C34B73C-1935-45CD-9EF2-579A7D1B2D23} 8 | Library 9 | Properties 10 | FrameworkProfiles 11 | FrameworkProfiles 12 | v4.5 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | false 25 | 26 | 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | false 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 67 | -------------------------------------------------------------------------------- /src/AsJson/AsJson.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {86FEB8AE-2E98-4C53-9F1F-ADA4080E247B} 8 | Exe 9 | Properties 10 | AsJson 11 | AsJson 12 | v4.5 13 | 512 14 | 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | false 26 | 27 | 28 | AnyCPU 29 | pdbonly 30 | true 31 | bin\Release\ 32 | TRACE 33 | prompt 34 | 4 35 | false 36 | 37 | 38 | 39 | ..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll 40 | True 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | {0c34b73c-1935-45cd-9ef2-579a7d1b2d23} 58 | FrameworkProfiles 59 | 60 | 61 | 62 | 63 | 64 | 65 | Always 66 | 67 | 68 | 69 | 76 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/FileSystem/ZipFileSystem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.IO.Compression; 5 | using System.Linq; 6 | using System.Text; 7 | 8 | namespace FrameworkProfiles.FileSystem 9 | { 10 | public static class ZipFileSystem 11 | { 12 | public static IFolder Open(string zipFilePath) 13 | { 14 | var archive = ZipFile.OpenRead(zipFilePath); 15 | return new ZipFileFolder(archive); 16 | } 17 | 18 | private abstract class ZipFileFolderItem : IFolderItem 19 | { 20 | protected ZipFileFolderItem(ZipArchive zipArchive) 21 | { 22 | ZipArchive = zipArchive; 23 | } 24 | 25 | protected ZipFileFolderItem(ZipArchiveEntry zipArchiveEntry) 26 | { 27 | ZipArchive = zipArchiveEntry.Archive; 28 | ZipArchiveEntry = zipArchiveEntry; 29 | } 30 | 31 | public string FullPath { get { return IsRoot ? string.Empty : ZipArchiveEntry.FullName; } } 32 | 33 | protected ZipArchive ZipArchive { get; private set; } 34 | 35 | protected ZipArchiveEntry ZipArchiveEntry { get; private set; } 36 | 37 | protected bool IsRoot { get { return ZipArchiveEntry == null; } } 38 | 39 | public override string ToString() 40 | { 41 | return FullPath; 42 | } 43 | } 44 | 45 | private sealed class ZipFileFile : ZipFileFolderItem, IFile 46 | { 47 | public ZipFileFile(ZipArchiveEntry zipArchiveEntry) 48 | : base(zipArchiveEntry) 49 | { 50 | } 51 | 52 | public Stream Open() 53 | { 54 | return ZipArchiveEntry.Open(); 55 | } 56 | } 57 | 58 | private sealed class ZipFileFolder : ZipFileFolderItem, IFolder 59 | { 60 | public ZipFileFolder(ZipArchive zipArchive) 61 | : base(zipArchive) 62 | { 63 | } 64 | 65 | public ZipFileFolder(ZipArchiveEntry zipArchiveEntry) 66 | : base(zipArchiveEntry) 67 | { 68 | } 69 | 70 | public IEnumerable EnumerateFolders() 71 | { 72 | return ZipArchive.Entries.Where(x => x.FullName.EndsWith("/") && x.FullName.StartsWith(FullPath) && x.FullName.Skip(FullPath.Length).Count(c => c == '/') == 1) 73 | .Select(x => new ZipFileFolder(x)); 74 | } 75 | 76 | public IEnumerable EnumerateFiles() 77 | { 78 | return ZipArchive.Entries.Where(x => !x.FullName.EndsWith("/") && x.FullName.StartsWith(FullPath) && x.FullName.IndexOf('/', FullPath.Length) == -1) 79 | .Select(x => new ZipFileFile(x)); 80 | } 81 | 82 | public IFolder Folder(string name) 83 | { 84 | var entry = ZipArchive.GetEntry(FullPath + name + "/"); 85 | if (entry == null) 86 | return null; 87 | return new ZipFileFolder(entry); 88 | } 89 | 90 | public IFile File(string name) 91 | { 92 | var entry = ZipArchive.GetEntry(FullPath + name); 93 | if (entry == null) 94 | return null; 95 | return new ZipFileFile(entry); 96 | } 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/AsJson/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Windows.Forms; 6 | using FrameworkProfiles; 7 | using FrameworkProfiles.FileSystem; 8 | using Newtonsoft.Json; 9 | using Newtonsoft.Json.Serialization; 10 | 11 | namespace AsJson 12 | { 13 | class Program 14 | { 15 | [STAThread] 16 | static void Main(string[] args) 17 | { 18 | try 19 | { 20 | foreach (var path in Directory.EnumerateDirectories(".")) 21 | { 22 | CleanDirectory(path); 23 | ProcessProfiles(DiskFileSystem.Folder(path), Path.Combine(path, "profiles.json")); 24 | } 25 | 26 | foreach (var zip in Directory.EnumerateFiles(".", "*.zip")) 27 | ProcessProfiles(ZipFileSystem.Open(zip), Path.ChangeExtension(zip, "json")); 28 | ProcessProfiles(DiskFileSystem.Folder(PortableFrameworkProfileEnumerator.MachineProfilePath), "profiles.json"); 29 | 30 | Console.WriteLine("Done."); 31 | } 32 | catch (Exception ex) 33 | { 34 | Console.Error.WriteLine(ex); 35 | } 36 | Console.ReadKey(); 37 | } 38 | 39 | static void ProcessProfiles(IFolder path, string jsonFile) 40 | { 41 | var profiles = PortableFrameworkProfileEnumerator.EnumeratePortableProfiles(path) 42 | .OrderBy(x => int.Parse(x.Name.Profile.Substring(7))) 43 | .Select(p => new 44 | { 45 | p.Name.FullName, 46 | ProfileName = p.Name.Profile, 47 | p.DisplayName, 48 | p.SupportedByVisualStudio2013, 49 | p.SupportedByVisualStudio2015, 50 | p.SupportsAsync, 51 | p.SupportsGenericVariance, 52 | p.NugetTarget, 53 | NetStandard = p.NetStandard == null ? null : "netstandard" + p.NetStandard?.ToString(2), 54 | Frameworks = p.SupportedFrameworks.Select(f => new 55 | { 56 | f.Name.FullName, 57 | f.FriendlyName, 58 | f.NugetTarget, 59 | NetStandard = f.NetStandard == null ? null : "netstandard" + f.NetStandard?.ToString(2), 60 | }).ToArray(), 61 | }).ToArray(); 62 | 63 | File.WriteAllText(jsonFile, JsonConvert.SerializeObject(profiles, new JsonSerializerSettings 64 | { 65 | ContractResolver = new CamelCasePropertyNamesContractResolver(), 66 | Formatting = Formatting.Indented, 67 | })); 68 | } 69 | 70 | static void CleanDirectory(string path) 71 | { 72 | var versions = Directory.EnumerateDirectories(path); 73 | foreach (var version in versions) 74 | { 75 | foreach (var file in Directory.EnumerateFiles(version).ToArray()) 76 | File.Delete(file); 77 | 78 | foreach (var subdir in Directory.EnumerateDirectories(version).Where(x => !x.Contains("Profile") && !x.Contains("RedistList"))) 79 | Directory.Delete(subdir, true); 80 | 81 | var profilePath = Path.Combine(version, "Profile"); 82 | if (!Directory.Exists(profilePath)) 83 | continue; 84 | foreach (var profile in Directory.EnumerateDirectories(profilePath)) 85 | { 86 | foreach (var file in Directory.EnumerateFiles(profile).ToArray()) 87 | File.Delete(file); 88 | foreach (var subdir in Directory.EnumerateDirectories(profile).Where(x => !x.Contains("SupportedFrameworks") && !x.Contains("RedistList"))) 89 | Directory.Delete(subdir, true); 90 | } 91 | } 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Portable Library Profiles 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 |
Portable Class Library (PCL) profiles as of {{description}}.
20 | 21 |
22 | 23 |
24 | 28 |
29 |
30 | 34 |
35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 54 | 55 |
#NameFrameworksFramework NamesNuGet Target.NET StandardNotes
{{profile.profileName}}{{profile.fullName}}
{{framework.friendlyName}}
{{framework.fullName}}
{{profile.nugetTarget}}
{{profile.netStandard}}
47 | 48 | 49 |
Does not support async/await or HttpClient.
50 |
Supports async/await and HttpClient.
51 |
Does not support generic variance.
52 |
Supports generic variance.
53 |
56 | 57 |
For more about framework names, see Framework Profiles in .NET.
58 |
The program that generates this data is open source!
59 |
60 |
61 | 62 | 63 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/FrameworkProfiles/FrameworkProfile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Runtime.Versioning; 4 | 5 | namespace FrameworkProfiles 6 | { 7 | public class FrameworkProfile 8 | { 9 | public FrameworkName Name { get; set; } 10 | public string DisplayName { get; set; } 11 | public Version MaximumVisualStudioVersion { get; set; } 12 | public virtual bool SupportedByVisualStudio2013 { get { return MaximumVisualStudioVersion == null || MaximumVisualStudioVersion >= new Version(12, 0); } } 13 | public virtual bool SupportedByVisualStudio2015 { get { return MaximumVisualStudioVersion == null || MaximumVisualStudioVersion >= new Version(14, 0); } } 14 | 15 | /// 16 | /// Whether this profile supports async/await. This includes profiles supporting async/await via Microsoft.Bcl.Async. 17 | /// 18 | public virtual bool SupportsAsync 19 | { 20 | get 21 | { 22 | // .NET 4.0 and newer. 23 | if (Name.Identifier == ".NETFramework" && Name.Version >= new Version(4, 0)) 24 | return true; 25 | 26 | // Windows 8 and newer. 27 | if (Name.Identifier == ".NETCore") 28 | return true; 29 | 30 | // Silverlight 4 and newer. 31 | if (Name.Identifier == "Silverlight" && string.IsNullOrEmpty(Name.Profile) && Name.Version >= new Version(4, 0)) 32 | return true; 33 | 34 | // Windows Phone 7.1. 35 | if (Name.FullName == "Silverlight,Version=v4.0,Profile=WindowsPhone7*") 36 | return true; 37 | 38 | // Windows Phone 8 and newer. 39 | if (Name.Identifier == "WindowsPhone") 40 | return true; 41 | 42 | // Windows Phone Apps. 43 | if (Name.Identifier == "WindowsPhoneApp") 44 | return true; 45 | 46 | // Mono 47 | if (Name.Identifier == "MonoAndroid" || Name.Identifier == "MonoTouch" || Name.Identifier.StartsWith("Xamarin")) 48 | return true; 49 | 50 | return false; 51 | } 52 | } 53 | 54 | public virtual bool SupportsGenericVariance 55 | { 56 | get 57 | { 58 | // .NET 4.0 and newer. 59 | if (Name.Identifier == ".NETFramework" && Name.Version >= new Version(4, 0)) 60 | return true; 61 | 62 | // Windows 8 and newer. 63 | if (Name.Identifier == ".NETCore") 64 | return true; 65 | 66 | // Silverlight 5 and newer. 67 | if (Name.Identifier == "Silverlight" && string.IsNullOrEmpty(Name.Profile) && Name.Version >= new Version(5, 0)) 68 | return true; 69 | 70 | // Windows Phone 8 and newer. 71 | if (Name.Identifier == "WindowsPhone") 72 | return true; 73 | 74 | // Windows Phone Apps. 75 | if (Name.Identifier == "WindowsPhoneApp") 76 | return true; 77 | 78 | // Mono 79 | if (Name.Identifier == "MonoAndroid" || Name.Identifier == "MonoTouch" || Name.Identifier.StartsWith("Xamarin")) 80 | return true; 81 | 82 | return false; 83 | } 84 | } 85 | 86 | public virtual bool IsXamarin 87 | { 88 | get { return (Name.Identifier == "MonoAndroid" || Name.Identifier == "MonoTouch" || Name.Identifier.StartsWith("Xamarin")); } 89 | } 90 | 91 | public virtual bool IsPrivate 92 | { 93 | get { return IsXamarin || (Name.Identifier == "DNXCore"); } 94 | } 95 | 96 | public virtual string NugetTarget 97 | { 98 | get { return NugetTargets.GetNugetTarget(this); } 99 | } 100 | 101 | public virtual Version NetStandard 102 | { 103 | get 104 | { 105 | // https://github.com/dotnet/standard/blob/master/docs/versions.md 106 | 107 | // Note: This only includes platforms that can be targeted in the PCL. 108 | 109 | // > .NET 4.6 are 2.0 110 | if (Name.Identifier == ".NETFramework" && Name.Version > new Version(4, 6)) 111 | return new Version(2, 0); 112 | 113 | // .NET 4.6 is 1.3 114 | if (Name.Identifier == ".NETFramework" && Name.Version == new Version(4, 6)) 115 | return new Version(1, 3); 116 | 117 | // > .NET 4.5.1 and 4.5.2 are 1.2 118 | if (Name.Identifier == ".NETFramework" && Name.Version > new Version(4, 5)) 119 | return new Version(1, 2); 120 | 121 | // .NET 4.5 is 1.1 122 | if (Name.Identifier == ".NETFramework" && Name.Version == new Version(4, 5)) 123 | return new Version(1, 1); 124 | 125 | // Windows 8.1 is 1.2 126 | if (Name.Identifier == ".NETCore" && Name.Version == new Version(4, 5, 1)) 127 | return new Version(1, 2); 128 | 129 | // Windows 8.0 is 1.1 130 | if (Name.Identifier == ".NETCore" && Name.Version == new Version(4, 5)) 131 | return new Version(1, 1); 132 | 133 | // Windows Phone App 8.1 is 1.2 134 | if (Name.Identifier == "WindowsPhoneApp" && Name.Version == new Version(8, 1)) 135 | return new Version(1, 2); 136 | 137 | // Windows Phone Silverlight 8 and 8.1 are 1.0 138 | if (Name.Identifier == "WindowsPhone") 139 | return new Version(1, 0); 140 | 141 | // No other platforms support netstandard. 142 | return null; 143 | } 144 | } 145 | 146 | private static readonly Dictionary SpecialFriendlyNames = new Dictionary 147 | { 148 | { new FrameworkName("Xbox,Version=v4.0,Profile=*"), "XBox 360" }, 149 | { new FrameworkName("Silverlight,Version=v4.0,Profile=WindowsPhone*"), "Windows Phone Silverlight 7.0" }, 150 | { new FrameworkName("Silverlight,Version=v4.0,Profile=WindowsPhone7*"), "Windows Phone Silverlight 7.5" }, 151 | { new FrameworkName(".NETCore,Version=v4.5,Profile=*"), "Windows 8.0" }, 152 | { new FrameworkName(".NETCore,Version=v4.5.1,Profile=*"), "Windows 8.1" }, 153 | }; 154 | 155 | public virtual string FriendlyName 156 | { 157 | get 158 | { 159 | if (SpecialFriendlyNames.ContainsKey(Name)) 160 | return SpecialFriendlyNames[Name]; 161 | return DisplayName + " " + Name.Version.FriendlyName(); 162 | } 163 | } 164 | } 165 | } -------------------------------------------------------------------------------- /docs/data.js: -------------------------------------------------------------------------------- 1 | var description = "VS2015 Update 3"; 2 | var data = 3 | [ 4 | { 5 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile1", 6 | "profileName": "Profile1", 7 | "supportedByVisualStudio2013": false, 8 | "supportedByVisualStudio2015": false, 9 | "supportsAsync": false, 10 | "supportsGenericVariance": false, 11 | "nugetTarget": "", 12 | "netStandard": null, 13 | "frameworks": [ 14 | { 15 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 16 | "friendlyName": ".NET Framework 4.0", 17 | "nugetTarget": "net4" 18 | }, 19 | { 20 | "fullName": "Silverlight,Version=v4.0", 21 | "friendlyName": "Silverlight 4.0", 22 | "nugetTarget": "sl40" 23 | }, 24 | { 25 | "fullName": ".NETCore,Version=v4.5,Profile=*", 26 | "friendlyName": "Windows 8.0", 27 | "nugetTarget": "win8" 28 | }, 29 | { 30 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone*", 31 | "friendlyName": "Windows Phone Silverlight 7.0", 32 | "nugetTarget": "wp70" 33 | }, 34 | { 35 | "fullName": "Xbox,Version=v4.0,Profile=*", 36 | "friendlyName": "XBox 360", 37 | "nugetTarget": "" 38 | } 39 | ] 40 | }, 41 | { 42 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile2", 43 | "profileName": "Profile2", 44 | "supportedByVisualStudio2013": false, 45 | "supportedByVisualStudio2015": false, 46 | "supportsAsync": false, 47 | "supportsGenericVariance": false, 48 | "nugetTarget": "portable-net4+sl40+win8+wp70", 49 | "netStandard": null, 50 | "frameworks": [ 51 | { 52 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 53 | "friendlyName": ".NET Framework 4.0", 54 | "nugetTarget": "net4" 55 | }, 56 | { 57 | "fullName": "Silverlight,Version=v4.0", 58 | "friendlyName": "Silverlight 4.0", 59 | "nugetTarget": "sl40" 60 | }, 61 | { 62 | "fullName": ".NETCore,Version=v4.5,Profile=*", 63 | "friendlyName": "Windows 8.0", 64 | "nugetTarget": "win8" 65 | }, 66 | { 67 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone*", 68 | "friendlyName": "Windows Phone Silverlight 7.0", 69 | "nugetTarget": "wp70" 70 | } 71 | ] 72 | }, 73 | { 74 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile3", 75 | "profileName": "Profile3", 76 | "supportedByVisualStudio2013": false, 77 | "supportedByVisualStudio2015": false, 78 | "supportsAsync": true, 79 | "supportsGenericVariance": false, 80 | "nugetTarget": "portable-net4+sl40", 81 | "netStandard": null, 82 | "frameworks": [ 83 | { 84 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 85 | "friendlyName": ".NET Framework 4.0", 86 | "nugetTarget": "net4" 87 | }, 88 | { 89 | "fullName": "Silverlight,Version=v4.0", 90 | "friendlyName": "Silverlight 4.0", 91 | "nugetTarget": "sl40" 92 | } 93 | ] 94 | }, 95 | { 96 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile4", 97 | "profileName": "Profile4", 98 | "supportedByVisualStudio2013": false, 99 | "supportedByVisualStudio2015": false, 100 | "supportsAsync": false, 101 | "supportsGenericVariance": false, 102 | "nugetTarget": "portable-net45+sl40+win8+wp70", 103 | "netStandard": null, 104 | "frameworks": [ 105 | { 106 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 107 | "friendlyName": ".NET Framework 4.5", 108 | "nugetTarget": "net45" 109 | }, 110 | { 111 | "fullName": "Silverlight,Version=v4.0", 112 | "friendlyName": "Silverlight 4.0", 113 | "nugetTarget": "sl40" 114 | }, 115 | { 116 | "fullName": ".NETCore,Version=v4.5,Profile=*", 117 | "friendlyName": "Windows 8.0", 118 | "nugetTarget": "win8" 119 | }, 120 | { 121 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone*", 122 | "friendlyName": "Windows Phone Silverlight 7.0", 123 | "nugetTarget": "wp70" 124 | } 125 | ] 126 | }, 127 | { 128 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile5", 129 | "profileName": "Profile5", 130 | "supportedByVisualStudio2013": true, 131 | "supportedByVisualStudio2015": true, 132 | "supportsAsync": true, 133 | "supportsGenericVariance": true, 134 | "nugetTarget": "portable-net4+win8", 135 | "netStandard": null, 136 | "frameworks": [ 137 | { 138 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 139 | "friendlyName": ".NET Framework 4.0", 140 | "nugetTarget": "net4" 141 | }, 142 | { 143 | "fullName": ".NETCore,Version=v4.5,Profile=*", 144 | "friendlyName": "Windows 8.0", 145 | "nugetTarget": "win8" 146 | } 147 | ] 148 | }, 149 | { 150 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile6", 151 | "profileName": "Profile6", 152 | "supportedByVisualStudio2013": true, 153 | "supportedByVisualStudio2015": true, 154 | "supportsAsync": true, 155 | "supportsGenericVariance": true, 156 | "nugetTarget": "portable-net403+win8", 157 | "netStandard": null, 158 | "frameworks": [ 159 | { 160 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 161 | "friendlyName": ".NET Framework 4.0.3", 162 | "nugetTarget": "net403" 163 | }, 164 | { 165 | "fullName": ".NETCore,Version=v4.5,Profile=*", 166 | "friendlyName": "Windows 8.0", 167 | "nugetTarget": "win8" 168 | } 169 | ] 170 | }, 171 | { 172 | "fullName": ".NETPortable,Version=v4.5,Profile=Profile7", 173 | "profileName": "Profile7", 174 | "supportedByVisualStudio2013": true, 175 | "supportedByVisualStudio2015": true, 176 | "supportsAsync": true, 177 | "supportsGenericVariance": true, 178 | "nugetTarget": "portable-net45+win8", 179 | "netStandard": "netstandard1.1", 180 | "frameworks": [ 181 | { 182 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 183 | "friendlyName": ".NET Framework 4.5", 184 | "nugetTarget": "net45" 185 | }, 186 | { 187 | "fullName": ".NETCore,Version=v4.5,Profile=*", 188 | "friendlyName": "Windows 8.0", 189 | "nugetTarget": "win8" 190 | } 191 | ] 192 | }, 193 | { 194 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile14", 195 | "profileName": "Profile14", 196 | "supportedByVisualStudio2013": true, 197 | "supportedByVisualStudio2015": true, 198 | "supportsAsync": true, 199 | "supportsGenericVariance": true, 200 | "nugetTarget": "portable-net4+sl50", 201 | "netStandard": null, 202 | "frameworks": [ 203 | { 204 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 205 | "friendlyName": ".NET Framework 4.0", 206 | "nugetTarget": "net4" 207 | }, 208 | { 209 | "fullName": "Silverlight,Version=v5.0", 210 | "friendlyName": "Silverlight 5.0", 211 | "nugetTarget": "sl50" 212 | } 213 | ] 214 | }, 215 | { 216 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile18", 217 | "profileName": "Profile18", 218 | "supportedByVisualStudio2013": false, 219 | "supportedByVisualStudio2015": false, 220 | "supportsAsync": true, 221 | "supportsGenericVariance": false, 222 | "nugetTarget": "portable-net403+sl40", 223 | "netStandard": null, 224 | "frameworks": [ 225 | { 226 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 227 | "friendlyName": ".NET Framework 4.0.3", 228 | "nugetTarget": "net403" 229 | }, 230 | { 231 | "fullName": "Silverlight,Version=v4.0", 232 | "friendlyName": "Silverlight 4.0", 233 | "nugetTarget": "sl40" 234 | } 235 | ] 236 | }, 237 | { 238 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile19", 239 | "profileName": "Profile19", 240 | "supportedByVisualStudio2013": true, 241 | "supportedByVisualStudio2015": true, 242 | "supportsAsync": true, 243 | "supportsGenericVariance": true, 244 | "nugetTarget": "portable-net403+sl50", 245 | "netStandard": null, 246 | "frameworks": [ 247 | { 248 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 249 | "friendlyName": ".NET Framework 4.0.3", 250 | "nugetTarget": "net403" 251 | }, 252 | { 253 | "fullName": "Silverlight,Version=v5.0", 254 | "friendlyName": "Silverlight 5.0", 255 | "nugetTarget": "sl50" 256 | } 257 | ] 258 | }, 259 | { 260 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile23", 261 | "profileName": "Profile23", 262 | "supportedByVisualStudio2013": false, 263 | "supportedByVisualStudio2015": false, 264 | "supportsAsync": true, 265 | "supportsGenericVariance": false, 266 | "nugetTarget": "portable-net45+sl40", 267 | "netStandard": null, 268 | "frameworks": [ 269 | { 270 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 271 | "friendlyName": ".NET Framework 4.5", 272 | "nugetTarget": "net45" 273 | }, 274 | { 275 | "fullName": "Silverlight,Version=v4.0", 276 | "friendlyName": "Silverlight 4.0", 277 | "nugetTarget": "sl40" 278 | } 279 | ] 280 | }, 281 | { 282 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile24", 283 | "profileName": "Profile24", 284 | "supportedByVisualStudio2013": true, 285 | "supportedByVisualStudio2015": true, 286 | "supportsAsync": true, 287 | "supportsGenericVariance": true, 288 | "nugetTarget": "portable-net45+sl50", 289 | "netStandard": null, 290 | "frameworks": [ 291 | { 292 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 293 | "friendlyName": ".NET Framework 4.5", 294 | "nugetTarget": "net45" 295 | }, 296 | { 297 | "fullName": "Silverlight,Version=v5.0", 298 | "friendlyName": "Silverlight 5.0", 299 | "nugetTarget": "sl50" 300 | } 301 | ] 302 | }, 303 | { 304 | "fullName": ".NETPortable,Version=v4.6,Profile=Profile31", 305 | "profileName": "Profile31", 306 | "supportedByVisualStudio2013": true, 307 | "supportedByVisualStudio2015": true, 308 | "supportsAsync": true, 309 | "supportsGenericVariance": true, 310 | "nugetTarget": "portable-win81+wp81", 311 | "netStandard": "netstandard1.0", 312 | "frameworks": [ 313 | { 314 | "fullName": ".NETCore,Version=v4.5.1,Profile=*", 315 | "friendlyName": "Windows 8.1", 316 | "nugetTarget": "win81" 317 | }, 318 | { 319 | "fullName": "WindowsPhone,Version=v8.1", 320 | "friendlyName": "Windows Phone Silverlight 8.1", 321 | "nugetTarget": "wp81" 322 | } 323 | ] 324 | }, 325 | { 326 | "fullName": ".NETPortable,Version=v4.6,Profile=Profile32", 327 | "profileName": "Profile32", 328 | "supportedByVisualStudio2013": true, 329 | "supportedByVisualStudio2015": true, 330 | "supportsAsync": true, 331 | "supportsGenericVariance": true, 332 | "nugetTarget": "portable-win81+wpa81", 333 | "netStandard": "netstandard1.2", 334 | "frameworks": [ 335 | { 336 | "fullName": ".NETCore,Version=v4.5.1,Profile=*", 337 | "friendlyName": "Windows 8.1", 338 | "nugetTarget": "win81" 339 | }, 340 | { 341 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 342 | "friendlyName": "Windows Phone 8.1", 343 | "nugetTarget": "wpa81" 344 | } 345 | ] 346 | }, 347 | { 348 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile36", 349 | "profileName": "Profile36", 350 | "supportedByVisualStudio2013": false, 351 | "supportedByVisualStudio2015": false, 352 | "supportsAsync": true, 353 | "supportsGenericVariance": false, 354 | "nugetTarget": "portable-net4+sl40+win8+wp8", 355 | "netStandard": null, 356 | "frameworks": [ 357 | { 358 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 359 | "friendlyName": ".NET Framework 4.0", 360 | "nugetTarget": "net4" 361 | }, 362 | { 363 | "fullName": "Silverlight,Version=v4.0", 364 | "friendlyName": "Silverlight 4.0", 365 | "nugetTarget": "sl40" 366 | }, 367 | { 368 | "fullName": ".NETCore,Version=v4.5,Profile=*", 369 | "friendlyName": "Windows 8.0", 370 | "nugetTarget": "win8" 371 | }, 372 | { 373 | "fullName": "WindowsPhone,Version=v8.0", 374 | "friendlyName": "Windows Phone Silverlight 8.0", 375 | "nugetTarget": "wp8" 376 | } 377 | ] 378 | }, 379 | { 380 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile37", 381 | "profileName": "Profile37", 382 | "supportedByVisualStudio2013": true, 383 | "supportedByVisualStudio2015": true, 384 | "supportsAsync": true, 385 | "supportsGenericVariance": true, 386 | "nugetTarget": "portable-net4+sl50+win8", 387 | "netStandard": null, 388 | "frameworks": [ 389 | { 390 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 391 | "friendlyName": ".NET Framework 4.0", 392 | "nugetTarget": "net4" 393 | }, 394 | { 395 | "fullName": "Silverlight,Version=v5.0", 396 | "friendlyName": "Silverlight 5.0", 397 | "nugetTarget": "sl50" 398 | }, 399 | { 400 | "fullName": ".NETCore,Version=v4.5,Profile=*", 401 | "friendlyName": "Windows 8.0", 402 | "nugetTarget": "win8" 403 | } 404 | ] 405 | }, 406 | { 407 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile41", 408 | "profileName": "Profile41", 409 | "supportedByVisualStudio2013": false, 410 | "supportedByVisualStudio2015": false, 411 | "supportsAsync": true, 412 | "supportsGenericVariance": false, 413 | "nugetTarget": "portable-net403+sl40+win8", 414 | "netStandard": null, 415 | "frameworks": [ 416 | { 417 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 418 | "friendlyName": ".NET Framework 4.0.3", 419 | "nugetTarget": "net403" 420 | }, 421 | { 422 | "fullName": "Silverlight,Version=v4.0", 423 | "friendlyName": "Silverlight 4.0", 424 | "nugetTarget": "sl40" 425 | }, 426 | { 427 | "fullName": ".NETCore,Version=v4.5,Profile=*", 428 | "friendlyName": "Windows 8.0", 429 | "nugetTarget": "win8" 430 | } 431 | ] 432 | }, 433 | { 434 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile42", 435 | "profileName": "Profile42", 436 | "supportedByVisualStudio2013": true, 437 | "supportedByVisualStudio2015": true, 438 | "supportsAsync": true, 439 | "supportsGenericVariance": true, 440 | "nugetTarget": "portable-net403+sl50+win8", 441 | "netStandard": null, 442 | "frameworks": [ 443 | { 444 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 445 | "friendlyName": ".NET Framework 4.0.3", 446 | "nugetTarget": "net403" 447 | }, 448 | { 449 | "fullName": "Silverlight,Version=v5.0", 450 | "friendlyName": "Silverlight 5.0", 451 | "nugetTarget": "sl50" 452 | }, 453 | { 454 | "fullName": ".NETCore,Version=v4.5,Profile=*", 455 | "friendlyName": "Windows 8.0", 456 | "nugetTarget": "win8" 457 | } 458 | ] 459 | }, 460 | { 461 | "fullName": ".NETPortable,Version=v4.6,Profile=Profile44", 462 | "profileName": "Profile44", 463 | "supportedByVisualStudio2013": true, 464 | "supportedByVisualStudio2015": true, 465 | "supportsAsync": true, 466 | "supportsGenericVariance": true, 467 | "nugetTarget": "portable-net451+win81", 468 | "netStandard": "netstandard1.2", 469 | "frameworks": [ 470 | { 471 | "fullName": ".NETFramework,Version=v4.5.1,Profile=*", 472 | "friendlyName": ".NET Framework 4.5.1", 473 | "nugetTarget": "net451" 474 | }, 475 | { 476 | "fullName": ".NETCore,Version=v4.5.1,Profile=*", 477 | "friendlyName": "Windows 8.1", 478 | "nugetTarget": "win81" 479 | } 480 | ] 481 | }, 482 | { 483 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile46", 484 | "profileName": "Profile46", 485 | "supportedByVisualStudio2013": false, 486 | "supportedByVisualStudio2015": false, 487 | "supportsAsync": true, 488 | "supportsGenericVariance": false, 489 | "nugetTarget": "portable-net45+sl40+win8", 490 | "netStandard": null, 491 | "frameworks": [ 492 | { 493 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 494 | "friendlyName": ".NET Framework 4.5", 495 | "nugetTarget": "net45" 496 | }, 497 | { 498 | "fullName": "Silverlight,Version=v4.0", 499 | "friendlyName": "Silverlight 4.0", 500 | "nugetTarget": "sl40" 501 | }, 502 | { 503 | "fullName": ".NETCore,Version=v4.5,Profile=*", 504 | "friendlyName": "Windows 8.0", 505 | "nugetTarget": "win8" 506 | } 507 | ] 508 | }, 509 | { 510 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile47", 511 | "profileName": "Profile47", 512 | "supportedByVisualStudio2013": true, 513 | "supportedByVisualStudio2015": true, 514 | "supportsAsync": true, 515 | "supportsGenericVariance": true, 516 | "nugetTarget": "portable-net45+sl50+win8", 517 | "netStandard": null, 518 | "frameworks": [ 519 | { 520 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 521 | "friendlyName": ".NET Framework 4.5", 522 | "nugetTarget": "net45" 523 | }, 524 | { 525 | "fullName": "Silverlight,Version=v5.0", 526 | "friendlyName": "Silverlight 5.0", 527 | "nugetTarget": "sl50" 528 | }, 529 | { 530 | "fullName": ".NETCore,Version=v4.5,Profile=*", 531 | "friendlyName": "Windows 8.0", 532 | "nugetTarget": "win8" 533 | } 534 | ] 535 | }, 536 | { 537 | "fullName": ".NETPortable,Version=v4.5,Profile=Profile49", 538 | "profileName": "Profile49", 539 | "supportedByVisualStudio2013": true, 540 | "supportedByVisualStudio2015": true, 541 | "supportsAsync": true, 542 | "supportsGenericVariance": true, 543 | "nugetTarget": "portable-net45+wp8", 544 | "netStandard": "netstandard1.0", 545 | "frameworks": [ 546 | { 547 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 548 | "friendlyName": ".NET Framework 4.5", 549 | "nugetTarget": "net45" 550 | }, 551 | { 552 | "fullName": "WindowsPhone,Version=v8.0", 553 | "friendlyName": "Windows Phone Silverlight 8.0", 554 | "nugetTarget": "wp8" 555 | } 556 | ] 557 | }, 558 | { 559 | "fullName": ".NETPortable,Version=v4.5,Profile=Profile78", 560 | "profileName": "Profile78", 561 | "supportedByVisualStudio2013": true, 562 | "supportedByVisualStudio2015": true, 563 | "supportsAsync": true, 564 | "supportsGenericVariance": true, 565 | "nugetTarget": "portable-net45+win8+wp8", 566 | "netStandard": "netstandard1.0", 567 | "frameworks": [ 568 | { 569 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 570 | "friendlyName": ".NET Framework 4.5", 571 | "nugetTarget": "net45" 572 | }, 573 | { 574 | "fullName": ".NETCore,Version=v4.5,Profile=*", 575 | "friendlyName": "Windows 8.0", 576 | "nugetTarget": "win8" 577 | }, 578 | { 579 | "fullName": "WindowsPhone,Version=v8.0", 580 | "friendlyName": "Windows Phone Silverlight 8.0", 581 | "nugetTarget": "wp8" 582 | } 583 | ] 584 | }, 585 | { 586 | "fullName": ".NETPortable,Version=v4.6,Profile=Profile84", 587 | "profileName": "Profile84", 588 | "supportedByVisualStudio2013": true, 589 | "supportedByVisualStudio2015": true, 590 | "supportsAsync": true, 591 | "supportsGenericVariance": true, 592 | "nugetTarget": "portable-wpa81+wp81", 593 | "netStandard": "netstandard1.0", 594 | "frameworks": [ 595 | { 596 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 597 | "friendlyName": "Windows Phone 8.1", 598 | "nugetTarget": "wpa81" 599 | }, 600 | { 601 | "fullName": "WindowsPhone,Version=v8.1", 602 | "friendlyName": "Windows Phone Silverlight 8.1", 603 | "nugetTarget": "wp81" 604 | } 605 | ] 606 | }, 607 | { 608 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile88", 609 | "profileName": "Profile88", 610 | "supportedByVisualStudio2013": false, 611 | "supportedByVisualStudio2015": false, 612 | "supportsAsync": true, 613 | "supportsGenericVariance": false, 614 | "nugetTarget": "portable-net4+sl40+win8+wp71", 615 | "netStandard": null, 616 | "frameworks": [ 617 | { 618 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 619 | "friendlyName": ".NET Framework 4.0", 620 | "nugetTarget": "net4" 621 | }, 622 | { 623 | "fullName": "Silverlight,Version=v4.0", 624 | "friendlyName": "Silverlight 4.0", 625 | "nugetTarget": "sl40" 626 | }, 627 | { 628 | "fullName": ".NETCore,Version=v4.5,Profile=*", 629 | "friendlyName": "Windows 8.0", 630 | "nugetTarget": "win8" 631 | }, 632 | { 633 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone7*", 634 | "friendlyName": "Windows Phone Silverlight 7.5", 635 | "nugetTarget": "wp71" 636 | } 637 | ] 638 | }, 639 | { 640 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile92", 641 | "profileName": "Profile92", 642 | "supportedByVisualStudio2013": true, 643 | "supportedByVisualStudio2015": true, 644 | "supportsAsync": true, 645 | "supportsGenericVariance": true, 646 | "nugetTarget": "portable-net4+win8+wpa81", 647 | "netStandard": null, 648 | "frameworks": [ 649 | { 650 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 651 | "friendlyName": ".NET Framework 4.0", 652 | "nugetTarget": "net4" 653 | }, 654 | { 655 | "fullName": ".NETCore,Version=v4.5,Profile=*", 656 | "friendlyName": "Windows 8.0", 657 | "nugetTarget": "win8" 658 | }, 659 | { 660 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 661 | "friendlyName": "Windows Phone 8.1", 662 | "nugetTarget": "wpa81" 663 | } 664 | ] 665 | }, 666 | { 667 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile95", 668 | "profileName": "Profile95", 669 | "supportedByVisualStudio2013": false, 670 | "supportedByVisualStudio2015": false, 671 | "supportsAsync": false, 672 | "supportsGenericVariance": false, 673 | "nugetTarget": "portable-net403+sl40+win8+wp70", 674 | "netStandard": null, 675 | "frameworks": [ 676 | { 677 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 678 | "friendlyName": ".NET Framework 4.0.3", 679 | "nugetTarget": "net403" 680 | }, 681 | { 682 | "fullName": "Silverlight,Version=v4.0", 683 | "friendlyName": "Silverlight 4.0", 684 | "nugetTarget": "sl40" 685 | }, 686 | { 687 | "fullName": ".NETCore,Version=v4.5,Profile=*", 688 | "friendlyName": "Windows 8.0", 689 | "nugetTarget": "win8" 690 | }, 691 | { 692 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone*", 693 | "friendlyName": "Windows Phone Silverlight 7.0", 694 | "nugetTarget": "wp70" 695 | } 696 | ] 697 | }, 698 | { 699 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile96", 700 | "profileName": "Profile96", 701 | "supportedByVisualStudio2013": false, 702 | "supportedByVisualStudio2015": false, 703 | "supportsAsync": true, 704 | "supportsGenericVariance": false, 705 | "nugetTarget": "portable-net403+sl40+win8+wp71", 706 | "netStandard": null, 707 | "frameworks": [ 708 | { 709 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 710 | "friendlyName": ".NET Framework 4.0.3", 711 | "nugetTarget": "net403" 712 | }, 713 | { 714 | "fullName": "Silverlight,Version=v4.0", 715 | "friendlyName": "Silverlight 4.0", 716 | "nugetTarget": "sl40" 717 | }, 718 | { 719 | "fullName": ".NETCore,Version=v4.5,Profile=*", 720 | "friendlyName": "Windows 8.0", 721 | "nugetTarget": "win8" 722 | }, 723 | { 724 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone7*", 725 | "friendlyName": "Windows Phone Silverlight 7.5", 726 | "nugetTarget": "wp71" 727 | } 728 | ] 729 | }, 730 | { 731 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile102", 732 | "profileName": "Profile102", 733 | "supportedByVisualStudio2013": true, 734 | "supportedByVisualStudio2015": true, 735 | "supportsAsync": true, 736 | "supportsGenericVariance": true, 737 | "nugetTarget": "portable-net403+win8+wpa81", 738 | "netStandard": null, 739 | "frameworks": [ 740 | { 741 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 742 | "friendlyName": ".NET Framework 4.0.3", 743 | "nugetTarget": "net403" 744 | }, 745 | { 746 | "fullName": ".NETCore,Version=v4.5,Profile=*", 747 | "friendlyName": "Windows 8.0", 748 | "nugetTarget": "win8" 749 | }, 750 | { 751 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 752 | "friendlyName": "Windows Phone 8.1", 753 | "nugetTarget": "wpa81" 754 | } 755 | ] 756 | }, 757 | { 758 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile104", 759 | "profileName": "Profile104", 760 | "supportedByVisualStudio2013": false, 761 | "supportedByVisualStudio2015": false, 762 | "supportsAsync": true, 763 | "supportsGenericVariance": false, 764 | "nugetTarget": "portable-net45+sl40+win8+wp71", 765 | "netStandard": null, 766 | "frameworks": [ 767 | { 768 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 769 | "friendlyName": ".NET Framework 4.5", 770 | "nugetTarget": "net45" 771 | }, 772 | { 773 | "fullName": "Silverlight,Version=v4.0", 774 | "friendlyName": "Silverlight 4.0", 775 | "nugetTarget": "sl40" 776 | }, 777 | { 778 | "fullName": ".NETCore,Version=v4.5,Profile=*", 779 | "friendlyName": "Windows 8.0", 780 | "nugetTarget": "win8" 781 | }, 782 | { 783 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone7*", 784 | "friendlyName": "Windows Phone Silverlight 7.5", 785 | "nugetTarget": "wp71" 786 | } 787 | ] 788 | }, 789 | { 790 | "fullName": ".NETPortable,Version=v4.5,Profile=Profile111", 791 | "profileName": "Profile111", 792 | "supportedByVisualStudio2013": true, 793 | "supportedByVisualStudio2015": true, 794 | "supportsAsync": true, 795 | "supportsGenericVariance": true, 796 | "nugetTarget": "portable-net45+win8+wpa81", 797 | "netStandard": "netstandard1.1", 798 | "frameworks": [ 799 | { 800 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 801 | "friendlyName": ".NET Framework 4.5", 802 | "nugetTarget": "net45" 803 | }, 804 | { 805 | "fullName": ".NETCore,Version=v4.5,Profile=*", 806 | "friendlyName": "Windows 8.0", 807 | "nugetTarget": "win8" 808 | }, 809 | { 810 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 811 | "friendlyName": "Windows Phone 8.1", 812 | "nugetTarget": "wpa81" 813 | } 814 | ] 815 | }, 816 | { 817 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile131", 818 | "profileName": "Profile131", 819 | "supportedByVisualStudio2013": false, 820 | "supportedByVisualStudio2015": false, 821 | "supportsAsync": false, 822 | "supportsGenericVariance": false, 823 | "nugetTarget": "", 824 | "netStandard": null, 825 | "frameworks": [ 826 | { 827 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 828 | "friendlyName": ".NET Framework 4.0.3", 829 | "nugetTarget": "net403" 830 | }, 831 | { 832 | "fullName": "Silverlight,Version=v4.0", 833 | "friendlyName": "Silverlight 4.0", 834 | "nugetTarget": "sl40" 835 | }, 836 | { 837 | "fullName": ".NETCore,Version=v4.5,Profile=*", 838 | "friendlyName": "Windows 8.0", 839 | "nugetTarget": "win8" 840 | }, 841 | { 842 | "fullName": "Silverlight,Version=v4.0,Profile=WindowsPhone*", 843 | "friendlyName": "Windows Phone Silverlight 7.0", 844 | "nugetTarget": "wp70" 845 | }, 846 | { 847 | "fullName": "Xbox,Version=v4.0,Profile=*", 848 | "friendlyName": "XBox 360", 849 | "nugetTarget": "" 850 | } 851 | ] 852 | }, 853 | { 854 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile136", 855 | "profileName": "Profile136", 856 | "supportedByVisualStudio2013": true, 857 | "supportedByVisualStudio2015": true, 858 | "supportsAsync": true, 859 | "supportsGenericVariance": true, 860 | "nugetTarget": "portable-net4+sl50+win8+wp8", 861 | "netStandard": null, 862 | "frameworks": [ 863 | { 864 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 865 | "friendlyName": ".NET Framework 4.0", 866 | "nugetTarget": "net4" 867 | }, 868 | { 869 | "fullName": "Silverlight,Version=v5.0", 870 | "friendlyName": "Silverlight 5.0", 871 | "nugetTarget": "sl50" 872 | }, 873 | { 874 | "fullName": ".NETCore,Version=v4.5,Profile=*", 875 | "friendlyName": "Windows 8.0", 876 | "nugetTarget": "win8" 877 | }, 878 | { 879 | "fullName": "WindowsPhone,Version=v8.0", 880 | "friendlyName": "Windows Phone Silverlight 8.0", 881 | "nugetTarget": "wp8" 882 | } 883 | ] 884 | }, 885 | { 886 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile143", 887 | "profileName": "Profile143", 888 | "supportedByVisualStudio2013": false, 889 | "supportedByVisualStudio2015": false, 890 | "supportsAsync": true, 891 | "supportsGenericVariance": false, 892 | "nugetTarget": "portable-net403+sl40+win8+wp8", 893 | "netStandard": null, 894 | "frameworks": [ 895 | { 896 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 897 | "friendlyName": ".NET Framework 4.0.3", 898 | "nugetTarget": "net403" 899 | }, 900 | { 901 | "fullName": "Silverlight,Version=v4.0", 902 | "friendlyName": "Silverlight 4.0", 903 | "nugetTarget": "sl40" 904 | }, 905 | { 906 | "fullName": ".NETCore,Version=v4.5,Profile=*", 907 | "friendlyName": "Windows 8.0", 908 | "nugetTarget": "win8" 909 | }, 910 | { 911 | "fullName": "WindowsPhone,Version=v8.0", 912 | "friendlyName": "Windows Phone Silverlight 8.0", 913 | "nugetTarget": "wp8" 914 | } 915 | ] 916 | }, 917 | { 918 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile147", 919 | "profileName": "Profile147", 920 | "supportedByVisualStudio2013": true, 921 | "supportedByVisualStudio2015": true, 922 | "supportsAsync": true, 923 | "supportsGenericVariance": true, 924 | "nugetTarget": "portable-net403+sl50+win8+wp8", 925 | "netStandard": null, 926 | "frameworks": [ 927 | { 928 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 929 | "friendlyName": ".NET Framework 4.0.3", 930 | "nugetTarget": "net403" 931 | }, 932 | { 933 | "fullName": "Silverlight,Version=v5.0", 934 | "friendlyName": "Silverlight 5.0", 935 | "nugetTarget": "sl50" 936 | }, 937 | { 938 | "fullName": ".NETCore,Version=v4.5,Profile=*", 939 | "friendlyName": "Windows 8.0", 940 | "nugetTarget": "win8" 941 | }, 942 | { 943 | "fullName": "WindowsPhone,Version=v8.0", 944 | "friendlyName": "Windows Phone Silverlight 8.0", 945 | "nugetTarget": "wp8" 946 | } 947 | ] 948 | }, 949 | { 950 | "fullName": ".NETPortable,Version=v4.6,Profile=Profile151", 951 | "profileName": "Profile151", 952 | "supportedByVisualStudio2013": true, 953 | "supportedByVisualStudio2015": true, 954 | "supportsAsync": true, 955 | "supportsGenericVariance": true, 956 | "nugetTarget": "portable-net451+win81+wpa81", 957 | "netStandard": "netstandard1.2", 958 | "frameworks": [ 959 | { 960 | "fullName": ".NETFramework,Version=v4.5.1,Profile=*", 961 | "friendlyName": ".NET Framework 4.5.1", 962 | "nugetTarget": "net451" 963 | }, 964 | { 965 | "fullName": ".NETCore,Version=v4.5.1,Profile=*", 966 | "friendlyName": "Windows 8.1", 967 | "nugetTarget": "win81" 968 | }, 969 | { 970 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 971 | "friendlyName": "Windows Phone 8.1", 972 | "nugetTarget": "wpa81" 973 | } 974 | ] 975 | }, 976 | { 977 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile154", 978 | "profileName": "Profile154", 979 | "supportedByVisualStudio2013": false, 980 | "supportedByVisualStudio2015": false, 981 | "supportsAsync": true, 982 | "supportsGenericVariance": false, 983 | "nugetTarget": "portable-net45+sl40+win8+wp8", 984 | "netStandard": null, 985 | "frameworks": [ 986 | { 987 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 988 | "friendlyName": ".NET Framework 4.5", 989 | "nugetTarget": "net45" 990 | }, 991 | { 992 | "fullName": "Silverlight,Version=v4.0", 993 | "friendlyName": "Silverlight 4.0", 994 | "nugetTarget": "sl40" 995 | }, 996 | { 997 | "fullName": ".NETCore,Version=v4.5,Profile=*", 998 | "friendlyName": "Windows 8.0", 999 | "nugetTarget": "win8" 1000 | }, 1001 | { 1002 | "fullName": "WindowsPhone,Version=v8.0", 1003 | "friendlyName": "Windows Phone Silverlight 8.0", 1004 | "nugetTarget": "wp8" 1005 | } 1006 | ] 1007 | }, 1008 | { 1009 | "fullName": ".NETPortable,Version=v4.6,Profile=Profile157", 1010 | "profileName": "Profile157", 1011 | "supportedByVisualStudio2013": true, 1012 | "supportedByVisualStudio2015": true, 1013 | "supportsAsync": true, 1014 | "supportsGenericVariance": true, 1015 | "nugetTarget": "portable-win81+wpa81+wp81", 1016 | "netStandard": "netstandard1.0", 1017 | "frameworks": [ 1018 | { 1019 | "fullName": ".NETCore,Version=v4.5.1,Profile=*", 1020 | "friendlyName": "Windows 8.1", 1021 | "nugetTarget": "win81" 1022 | }, 1023 | { 1024 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1025 | "friendlyName": "Windows Phone 8.1", 1026 | "nugetTarget": "wpa81" 1027 | }, 1028 | { 1029 | "fullName": "WindowsPhone,Version=v8.1", 1030 | "friendlyName": "Windows Phone Silverlight 8.1", 1031 | "nugetTarget": "wp81" 1032 | } 1033 | ] 1034 | }, 1035 | { 1036 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile158", 1037 | "profileName": "Profile158", 1038 | "supportedByVisualStudio2013": true, 1039 | "supportedByVisualStudio2015": true, 1040 | "supportsAsync": true, 1041 | "supportsGenericVariance": true, 1042 | "nugetTarget": "portable-net45+sl50+win8+wp8", 1043 | "netStandard": null, 1044 | "frameworks": [ 1045 | { 1046 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 1047 | "friendlyName": ".NET Framework 4.5", 1048 | "nugetTarget": "net45" 1049 | }, 1050 | { 1051 | "fullName": "Silverlight,Version=v5.0", 1052 | "friendlyName": "Silverlight 5.0", 1053 | "nugetTarget": "sl50" 1054 | }, 1055 | { 1056 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1057 | "friendlyName": "Windows 8.0", 1058 | "nugetTarget": "win8" 1059 | }, 1060 | { 1061 | "fullName": "WindowsPhone,Version=v8.0", 1062 | "friendlyName": "Windows Phone Silverlight 8.0", 1063 | "nugetTarget": "wp8" 1064 | } 1065 | ] 1066 | }, 1067 | { 1068 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile225", 1069 | "profileName": "Profile225", 1070 | "supportedByVisualStudio2013": true, 1071 | "supportedByVisualStudio2015": true, 1072 | "supportsAsync": true, 1073 | "supportsGenericVariance": true, 1074 | "nugetTarget": "portable-net4+sl50+win8+wpa81", 1075 | "netStandard": null, 1076 | "frameworks": [ 1077 | { 1078 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 1079 | "friendlyName": ".NET Framework 4.0", 1080 | "nugetTarget": "net4" 1081 | }, 1082 | { 1083 | "fullName": "Silverlight,Version=v5.0", 1084 | "friendlyName": "Silverlight 5.0", 1085 | "nugetTarget": "sl50" 1086 | }, 1087 | { 1088 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1089 | "friendlyName": "Windows 8.0", 1090 | "nugetTarget": "win8" 1091 | }, 1092 | { 1093 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1094 | "friendlyName": "Windows Phone 8.1", 1095 | "nugetTarget": "wpa81" 1096 | } 1097 | ] 1098 | }, 1099 | { 1100 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile240", 1101 | "profileName": "Profile240", 1102 | "supportedByVisualStudio2013": true, 1103 | "supportedByVisualStudio2015": true, 1104 | "supportsAsync": true, 1105 | "supportsGenericVariance": true, 1106 | "nugetTarget": "portable-net403+sl50+win8+wpa81", 1107 | "netStandard": null, 1108 | "frameworks": [ 1109 | { 1110 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 1111 | "friendlyName": ".NET Framework 4.0.3", 1112 | "nugetTarget": "net403" 1113 | }, 1114 | { 1115 | "fullName": "Silverlight,Version=v5.0", 1116 | "friendlyName": "Silverlight 5.0", 1117 | "nugetTarget": "sl50" 1118 | }, 1119 | { 1120 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1121 | "friendlyName": "Windows 8.0", 1122 | "nugetTarget": "win8" 1123 | }, 1124 | { 1125 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1126 | "friendlyName": "Windows Phone 8.1", 1127 | "nugetTarget": "wpa81" 1128 | } 1129 | ] 1130 | }, 1131 | { 1132 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile255", 1133 | "profileName": "Profile255", 1134 | "supportedByVisualStudio2013": true, 1135 | "supportedByVisualStudio2015": true, 1136 | "supportsAsync": true, 1137 | "supportsGenericVariance": true, 1138 | "nugetTarget": "portable-net45+sl50+win8+wpa81", 1139 | "netStandard": null, 1140 | "frameworks": [ 1141 | { 1142 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 1143 | "friendlyName": ".NET Framework 4.5", 1144 | "nugetTarget": "net45" 1145 | }, 1146 | { 1147 | "fullName": "Silverlight,Version=v5.0", 1148 | "friendlyName": "Silverlight 5.0", 1149 | "nugetTarget": "sl50" 1150 | }, 1151 | { 1152 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1153 | "friendlyName": "Windows 8.0", 1154 | "nugetTarget": "win8" 1155 | }, 1156 | { 1157 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1158 | "friendlyName": "Windows Phone 8.1", 1159 | "nugetTarget": "wpa81" 1160 | } 1161 | ] 1162 | }, 1163 | { 1164 | "fullName": ".NETPortable,Version=v4.5,Profile=Profile259", 1165 | "profileName": "Profile259", 1166 | "supportedByVisualStudio2013": true, 1167 | "supportedByVisualStudio2015": true, 1168 | "supportsAsync": true, 1169 | "supportsGenericVariance": true, 1170 | "nugetTarget": "portable-net45+win8+wpa81+wp8", 1171 | "netStandard": "netstandard1.0", 1172 | "frameworks": [ 1173 | { 1174 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 1175 | "friendlyName": ".NET Framework 4.5", 1176 | "nugetTarget": "net45" 1177 | }, 1178 | { 1179 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1180 | "friendlyName": "Windows 8.0", 1181 | "nugetTarget": "win8" 1182 | }, 1183 | { 1184 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1185 | "friendlyName": "Windows Phone 8.1", 1186 | "nugetTarget": "wpa81" 1187 | }, 1188 | { 1189 | "fullName": "WindowsPhone,Version=v8.0", 1190 | "friendlyName": "Windows Phone Silverlight 8.0", 1191 | "nugetTarget": "wp8" 1192 | } 1193 | ] 1194 | }, 1195 | { 1196 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile328", 1197 | "profileName": "Profile328", 1198 | "supportedByVisualStudio2013": true, 1199 | "supportedByVisualStudio2015": true, 1200 | "supportsAsync": true, 1201 | "supportsGenericVariance": true, 1202 | "nugetTarget": "portable-net4+sl50+win8+wpa81+wp8", 1203 | "netStandard": null, 1204 | "frameworks": [ 1205 | { 1206 | "fullName": ".NETFramework,Version=v4.0,Profile=*", 1207 | "friendlyName": ".NET Framework 4.0", 1208 | "nugetTarget": "net4" 1209 | }, 1210 | { 1211 | "fullName": "Silverlight,Version=v5.0", 1212 | "friendlyName": "Silverlight 5.0", 1213 | "nugetTarget": "sl50" 1214 | }, 1215 | { 1216 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1217 | "friendlyName": "Windows 8.0", 1218 | "nugetTarget": "win8" 1219 | }, 1220 | { 1221 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1222 | "friendlyName": "Windows Phone 8.1", 1223 | "nugetTarget": "wpa81" 1224 | }, 1225 | { 1226 | "fullName": "WindowsPhone,Version=v8.0", 1227 | "friendlyName": "Windows Phone Silverlight 8.0", 1228 | "nugetTarget": "wp8" 1229 | } 1230 | ] 1231 | }, 1232 | { 1233 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile336", 1234 | "profileName": "Profile336", 1235 | "supportedByVisualStudio2013": true, 1236 | "supportedByVisualStudio2015": true, 1237 | "supportsAsync": true, 1238 | "supportsGenericVariance": true, 1239 | "nugetTarget": "portable-net403+sl50+win8+wpa81+wp8", 1240 | "netStandard": null, 1241 | "frameworks": [ 1242 | { 1243 | "fullName": ".NETFramework,Version=v4.0.3,Profile=*", 1244 | "friendlyName": ".NET Framework 4.0.3", 1245 | "nugetTarget": "net403" 1246 | }, 1247 | { 1248 | "fullName": "Silverlight,Version=v5.0", 1249 | "friendlyName": "Silverlight 5.0", 1250 | "nugetTarget": "sl50" 1251 | }, 1252 | { 1253 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1254 | "friendlyName": "Windows 8.0", 1255 | "nugetTarget": "win8" 1256 | }, 1257 | { 1258 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1259 | "friendlyName": "Windows Phone 8.1", 1260 | "nugetTarget": "wpa81" 1261 | }, 1262 | { 1263 | "fullName": "WindowsPhone,Version=v8.0", 1264 | "friendlyName": "Windows Phone Silverlight 8.0", 1265 | "nugetTarget": "wp8" 1266 | } 1267 | ] 1268 | }, 1269 | { 1270 | "fullName": ".NETPortable,Version=v4.0,Profile=Profile344", 1271 | "profileName": "Profile344", 1272 | "supportedByVisualStudio2013": true, 1273 | "supportedByVisualStudio2015": true, 1274 | "supportsAsync": true, 1275 | "supportsGenericVariance": true, 1276 | "nugetTarget": "portable-net45+sl50+win8+wpa81+wp8", 1277 | "netStandard": null, 1278 | "frameworks": [ 1279 | { 1280 | "fullName": ".NETFramework,Version=v4.5,Profile=*", 1281 | "friendlyName": ".NET Framework 4.5", 1282 | "nugetTarget": "net45" 1283 | }, 1284 | { 1285 | "fullName": "Silverlight,Version=v5.0", 1286 | "friendlyName": "Silverlight 5.0", 1287 | "nugetTarget": "sl50" 1288 | }, 1289 | { 1290 | "fullName": ".NETCore,Version=v4.5,Profile=*", 1291 | "friendlyName": "Windows 8.0", 1292 | "nugetTarget": "win8" 1293 | }, 1294 | { 1295 | "fullName": "WindowsPhoneApp,Version=v8.1,Profile=*", 1296 | "friendlyName": "Windows Phone 8.1", 1297 | "nugetTarget": "wpa81" 1298 | }, 1299 | { 1300 | "fullName": "WindowsPhone,Version=v8.0", 1301 | "friendlyName": "Windows Phone Silverlight 8.0", 1302 | "nugetTarget": "wp8" 1303 | } 1304 | ] 1305 | } 1306 | ] 1307 | ; --------------------------------------------------------------------------------