public static void Register(CommandLineApplication cmdApp, ReportsFactory reportsFactory, IApplicationEnvironment applicationEnvironment, IServiceProvider serviceProvider) { cmdApp.Command("publish", c => { c.Description = "Publish application for deployment"; var argProject = c.Argument("[project]", "Path to project, default is current directory"); var optionOut = c.Option("-o|--out <PATH>", "Where does it go", CommandOptionType.SingleValue); var optionConfiguration = c.Option("--configuration <CONFIGURATION>", "The configuration to use for deployment (Debug|Release|{Custom})", CommandOptionType.SingleValue); var optionNoSource = c.Option("--no-source", "Compiles the source files into NuGet packages", CommandOptionType.NoValue); var optionRuntime = c.Option("--runtime <RUNTIME>", "Name or full path of the runtime folder to include, or \"active\" for current runtime on PATH", CommandOptionType.MultipleValue); var optionNative = c.Option("--native", "Build and include native images. User must provide targeted CoreCLR runtime versions along with this option.", CommandOptionType.NoValue); var optionIncludeSymbols = c.Option("--include-symbols", "Include symbols in output bundle", CommandOptionType.NoValue); var optionWwwRoot = c.Option("--wwwroot <NAME>", "Name of public folder in the project directory", CommandOptionType.SingleValue); var optionWwwRootOut = c.Option("--wwwroot-out <NAME>", "Name of public folder in the output, can be used only when the '--wwwroot' option or 'webroot' in project.json is specified", CommandOptionType.SingleValue); var optionQuiet = c.Option("--quiet", "Do not show output such as source/destination of published files", CommandOptionType.NoValue); c.HelpOption("-?|-h|--help"); c.OnExecute(() => { c.ShowRootCommandFullNameAndVersion(); var options = new PublishOptions { OutputDir = optionOut.Value(), ProjectDir = argProject.Value ?? System.IO.Directory.GetCurrentDirectory(), Configuration = optionConfiguration.Value() ?? "Debug", RuntimeTargetFramework = applicationEnvironment.RuntimeFramework, WwwRoot = optionWwwRoot.Value(), WwwRootOut = optionWwwRootOut.Value() ?? optionWwwRoot.Value(), NoSource = optionNoSource.HasValue(), Runtimes = optionRuntime.HasValue() ? string.Join(";", optionRuntime.Values). Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) : new string[0], Native = optionNative.HasValue(), IncludeSymbols = optionIncludeSymbols.HasValue(), Reports = reportsFactory.CreateReports(optionQuiet.HasValue()) }; var manager = new PublishManager(serviceProvider, options); if (!manager.Publish()) { return -1; } return 0; }); }); }
public PublishManager(PublishOptions options, IApplicationEnvironment applicationEnvironment) { _applicationEnvironment = applicationEnvironment; _options = options; _options.ProjectDir = Normalize(_options.ProjectDir); var outputDir = _options.OutputDir ?? Path.Combine(_options.ProjectDir, "bin", "output"); _options.OutputDir = Normalize(outputDir); ScriptExecutor = new ScriptExecutor(_options.Reports.Information); }
public PublishManager(IServiceProvider hostServices, PublishOptions options) { _hostServices = hostServices; _options = options; _options.ProjectDir = Normalize(_options.ProjectDir); var outputDir = _options.OutputDir ?? Path.Combine(_options.ProjectDir, "bin", "output"); _options.OutputDir = Normalize(outputDir); ScriptExecutor = new ScriptExecutor(_options.Reports.Information); }
/// <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); }
/// <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)); }