private static bool BuildTargetFrameworkNode(PackageSpec packageSpec, KeyValuePair <string, JToken> targetFramework, string filePath) { var frameworkName = GetFramework(targetFramework.Key); var properties = targetFramework.Value.Value <JObject>(); var importFrameworks = GetFrameworksFromArray(properties["imports"], packageSpec); var assetTargetFallbackFrameworks = GetFrameworksFromArray(properties["assetTargetFallback"], packageSpec); var targetFrameworkInformation = new TargetFrameworkInformation { FrameworkName = PackageSpecUtility.GetFallbackFramework(frameworkName, importFrameworks, assetTargetFallbackFrameworks), Dependencies = new List <LibraryDependency>(), Imports = importFrameworks, AssetTargetFallback = assetTargetFallbackFrameworks, Warn = GetWarnSetting(properties) }; PopulateDependencies( packageSpec.FilePath, targetFrameworkInformation.Dependencies, properties, "dependencies", isGacOrFrameworkReference: false); var frameworkAssemblies = new List <LibraryDependency>(); PopulateDependencies( packageSpec.FilePath, frameworkAssemblies, properties, "frameworkAssemblies", isGacOrFrameworkReference: true); frameworkAssemblies.ForEach(d => targetFrameworkInformation.Dependencies.Add(d)); packageSpec.TargetFrameworks.Add(targetFrameworkInformation); return(true); }
public static PackageSpec GetPackageSpec(JObject rawPackageSpec, string name, string packageSpecPath, string snapshotValue) { var packageSpec = new PackageSpec(); // Parse properties we know about var version = rawPackageSpec["version"]; var authors = rawPackageSpec["authors"]; var contentFiles = rawPackageSpec["contentFiles"]; packageSpec.Name = name; packageSpec.FilePath = name == null ? null : Path.GetFullPath(packageSpecPath); if (version != null) { try { var versionString = version.Value <string>(); packageSpec.HasVersionSnapshot = PackageSpecUtility.IsSnapshotVersion(versionString); packageSpec.Version = PackageSpecUtility.SpecifySnapshot(versionString, snapshotValue); } catch (Exception ex) { var lineInfo = (IJsonLineInfo)version; throw FileFormatException.Create(ex, version, packageSpec.FilePath); } } var packInclude = rawPackageSpec["packInclude"] as JObject; if (packInclude != null) { foreach (var include in packInclude) { packageSpec.PackInclude.Add(new KeyValuePair <string, string>(include.Key, include.Value.ToString())); } } packageSpec.Title = rawPackageSpec.GetValue <string>("title"); packageSpec.Description = rawPackageSpec.GetValue <string>("description"); packageSpec.Authors = authors == null ? new string[] { } : authors.ValueAsArray <string>(); packageSpec.ContentFiles = contentFiles == null ? new string[] { } : contentFiles.ValueAsArray <string>(); packageSpec.Dependencies = new List <LibraryDependency>(); packageSpec.Copyright = rawPackageSpec.GetValue <string>("copyright"); packageSpec.Language = rawPackageSpec.GetValue <string>("language"); var buildOptions = rawPackageSpec["buildOptions"] as JObject; if (buildOptions != null) { packageSpec.BuildOptions = new BuildOptions() { OutputName = buildOptions.GetValue <string>("outputName") }; } var scripts = rawPackageSpec["scripts"] as JObject; if (scripts != null) { foreach (var script in scripts) { var value = script.Value; if (value.Type == JTokenType.String) { packageSpec.Scripts[script.Key] = new string[] { value.Value <string>() }; } else if (value.Type == JTokenType.Array) { packageSpec.Scripts[script.Key] = script.Value.ValueAsArray <string>(); } else { throw FileFormatException.Create( string.Format("The value of a script in '{0}' can only be a string or an array of strings", PackageSpec.PackageSpecFileName), value, packageSpec.FilePath); } } } BuildTargetFrameworks(packageSpec, rawPackageSpec); PopulateDependencies( packageSpec.FilePath, packageSpec.Dependencies, rawPackageSpec, "dependencies", isGacOrFrameworkReference: false); packageSpec.PackOptions = GetPackOptions(packageSpec, rawPackageSpec); packageSpec.RestoreSettings = GetRestoreSettings(packageSpec, rawPackageSpec); packageSpec.RestoreMetadata = GetMSBuildMetadata(packageSpec, rawPackageSpec); // Read the runtime graph packageSpec.RuntimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(rawPackageSpec); // Read the name/path if it exists if (packageSpec.Name == null) { packageSpec.Name = packageSpec.RestoreMetadata?.ProjectName; } // Use the project.json path if one is set, otherwise use the project path if (packageSpec.FilePath == null) { packageSpec.FilePath = packageSpec.RestoreMetadata?.ProjectJsonPath ?? packageSpec.RestoreMetadata?.ProjectPath; } return(packageSpec); }