public bool BuildNativeImages(PublishRoot root) { var success = true; foreach (var runtime in root.Runtimes) { NuGetDependencyResolver resolver; if (!_resolverLookup.TryGetValue(runtime.Framework, out resolver)) { throw new InvalidOperationException("No matching framework is found for " + runtime.Framework); } var runtimeBin = Path.Combine(runtime.TargetPath, "bin"); var options = new CrossgenOptions() { CrossgenPath = Path.Combine(runtimeBin, "crossgen.exe"), InputPaths = ResolveOutputAssemblies(root, resolver), RuntimePath = runtimeBin, Symbols = false }; var crossgenManager = new CrossgenManager(options); success &= crossgenManager.GenerateNativeImages(); if (!success) { return(false); } } return(success); }
public bool BuildNativeImages(PublishRoot root) { var success = true; // REVIEW: Does does doing this for multiple runtimes make sense? foreach (var runtime in root.Runtimes) { var runtimeBin = Path.Combine(runtime.TargetPath, "bin"); var options = new CrossgenOptions() { CrossgenPath = Path.Combine(runtimeBin, "crossgen.exe"), InputPaths = ResolveOutputAssemblies(root), RuntimePath = runtimeBin, Symbols = false }; var crossgenManager = new CrossgenManager(options); success &= crossgenManager.GenerateNativeImages(); if (!success) { return(false); } } return(success); }
/// <summary> /// This is the factory method to instantiate a PackNativeManager, if parameters are in invalid state and native /// generation cannot be performed, it would return null /// </summary> public static NativeImageGenerator Create(PublishOptions options, PublishRoot root, IEnumerable <DependencyContext> contexts) { if (options.Runtimes.Count() == 0) { options.Reports.Information.WriteLine( "Please provide target CoreCLR runtimes using --runtime flags".Yellow()); return(null); } foreach (var runtime in root.Runtimes) { var frameworkName = runtime.Framework; // NOTE: !IsDesktop == IsCore and only Core packages can be crossgened at least for now if (VersionUtility.IsDesktop(frameworkName)) { options.Reports.Information.WriteLine( "Native image generation is only supported for .NET Core flavors.".Yellow()); return(null); } } var duplicates = options.Runtimes .GroupBy(r => CrossgenManager.ResolveProcessorArchitecture(r)) .Where(g => g.Count() > 1); if (duplicates.Any()) { var message = "The following runtimes will result in output conflicts. Please provide distinct runtime flavor for each processor architecture:\n" + string.Join("\n", duplicates.Select( g => string.Format("Architecture: {0}\nRuntimes: {1}", g.Key, string.Join(", ", g)))); options.Reports.Information.WriteLine(message.Yellow()); return(null); } var contextMap = contexts.ToDictionary( context => context.FrameworkName, context => context.NuGetDependencyResolver ); return(new NativeImageGenerator(contextMap)); }