public static string GetBootJsonContent(string assemblyFileName, string entryPoint, string[] assemblyReferences, IEnumerable <EmbeddedResourceInfo> embeddedContent, bool linkerEnabled) { var data = new BootJsonData( assemblyFileName, entryPoint, assemblyReferences, embeddedContent, linkerEnabled); return(JsonSerializer.Serialize(data, JsonSerializerOptionsProvider.Options)); }
internal static void WriteBootJson(Stream stream, string entryAssemblyName, string[] assemblies, bool linkerEnabled) { var data = new BootJsonData { entryAssembly = entryAssemblyName, assemblies = assemblies, linkerEnabled = linkerEnabled, }; var serializer = new DataContractJsonSerializer(typeof(BootJsonData)); serializer.WriteObject(stream, data); }
// Internal for tests internal void WriteBootJson(Stream output, string entryAssemblyName) { var result = new BootJsonData { entryAssembly = entryAssemblyName, cacheBootResources = CacheBootResources, debugBuild = DebugBuild, linkerEnabled = LinkerEnabled, resources = new ResourcesData(), config = new List <string>(), }; // Build a two-level dictionary of the form: // - assembly: // - UriPath (e.g., "System.Text.Json.dll") // - ContentHash (e.g., "4548fa2e9cf52986") // - runtime: // - UriPath (e.g., "dotnet.js") // - ContentHash (e.g., "3448f339acf512448") if (Resources != null) { var resourceData = result.resources; foreach (var resource in Resources) { var resourceTypeMetadata = resource.GetMetadata("BootManifestResourceType"); ResourceHashesByNameDictionary resourceList; switch (resourceTypeMetadata) { case "runtime": resourceList = resourceData.runtime; break; case "assembly": resourceList = resourceData.assembly; break; case "pdb": resourceData.pdb ??= new ResourceHashesByNameDictionary(); resourceList = resourceData.pdb; break; case "satellite": if (resourceData.satelliteResources is null) { resourceData.satelliteResources = new Dictionary <string, ResourceHashesByNameDictionary>(StringComparer.OrdinalIgnoreCase); } var resourceCulture = resource.GetMetadata("Culture"); if (resourceCulture is null) { Log.LogWarning("Satellite resource {0} does not specify required metadata 'Culture'.", resource); continue; } if (!resourceData.satelliteResources.TryGetValue(resourceCulture, out resourceList)) { resourceList = new ResourceHashesByNameDictionary(); resourceData.satelliteResources.Add(resourceCulture, resourceList); } break; default: throw new NotSupportedException($"Unsupported BootManifestResourceType metadata value: {resourceTypeMetadata}"); } var resourceName = GetResourceName(resource); if (!resourceList.ContainsKey(resourceName)) { resourceList.Add(resourceName, $"sha256-{resource.GetMetadata("Integrity")}"); } } } if (ConfigurationFiles != null) { foreach (var configFile in ConfigurationFiles) { result.config.Add(Path.GetFileName(configFile.ItemSpec)); } } var serializer = new DataContractJsonSerializer(typeof(BootJsonData), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }); using var writer = JsonReaderWriterFactory.CreateJsonWriter(output, Encoding.UTF8, ownsStream: false, indent: true); serializer.WriteObject(writer, result); }