Consolidate options to a single file
This commit is contained in:
parent
bcd210819a
commit
c1ef1e533f
|
|
@ -1,44 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using Microsoft.Extensions.CommandLineUtils;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
|
||||||
{
|
|
||||||
public class CommonOptions
|
|
||||||
{
|
|
||||||
public static readonly string ConfigureCompilationTypeTemplate = "--configure-compilation-type";
|
|
||||||
public static readonly string ContentRootTemplate = "--content-root";
|
|
||||||
public static readonly string EmbedViewSourceTemplate = "--embed-view-sources";
|
|
||||||
|
|
||||||
public CommandArgument ProjectArgument { get; private set; }
|
|
||||||
|
|
||||||
public CommandOption ConfigureCompilationType { get; private set; }
|
|
||||||
|
|
||||||
public CommandOption ContentRootOption { get; private set; }
|
|
||||||
|
|
||||||
public CommandOption EmbedViewSourcesOption { get; private set; }
|
|
||||||
|
|
||||||
public void Configure(CommandLineApplication app)
|
|
||||||
{
|
|
||||||
ProjectArgument = app.Argument(
|
|
||||||
"project",
|
|
||||||
"The path to the project (project folder or project.json) with precompilation.");
|
|
||||||
|
|
||||||
ConfigureCompilationType = app.Option(
|
|
||||||
ConfigureCompilationTypeTemplate,
|
|
||||||
"Type with Configure method",
|
|
||||||
CommandOptionType.SingleValue);
|
|
||||||
|
|
||||||
ContentRootOption = app.Option(
|
|
||||||
ContentRootTemplate,
|
|
||||||
"The application's content root.",
|
|
||||||
CommandOptionType.SingleValue);
|
|
||||||
|
|
||||||
EmbedViewSourcesOption = app.Option(
|
|
||||||
EmbedViewSourceTemplate,
|
|
||||||
"Embed view sources as resources in the generated assembly.",
|
|
||||||
CommandOptionType.NoValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,94 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.Extensions.CommandLineUtils;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
|
{
|
||||||
|
public class CompilationOptions
|
||||||
|
{
|
||||||
|
public static readonly string ConfigureCompilationTypeTemplate = "--configure-compilation-type";
|
||||||
|
public static readonly string ContentRootTemplate = "--content-root";
|
||||||
|
public static readonly string EmbedViewSourceTemplate = "--embed-view-sources";
|
||||||
|
public static readonly string StrongNameKeyPath = "--key-file";
|
||||||
|
public static readonly string DelaySignTemplate = "--delay-sign";
|
||||||
|
public static readonly string PublicSignTemplate = "--public-sign";
|
||||||
|
public static readonly string ApplicationNameTemplate = "--application-name";
|
||||||
|
public static readonly string OutputPathTemplate = "--output-path";
|
||||||
|
|
||||||
|
public CompilationOptions(CommandLineApplication app)
|
||||||
|
{
|
||||||
|
OutputPathOption = app.Option(
|
||||||
|
OutputPathTemplate,
|
||||||
|
"Path to the emit the precompiled assembly to.",
|
||||||
|
CommandOptionType.SingleValue);
|
||||||
|
|
||||||
|
ApplicationNameOption = app.Option(
|
||||||
|
ApplicationNameTemplate,
|
||||||
|
"Name of the application to produce precompiled assembly for.",
|
||||||
|
CommandOptionType.SingleValue);
|
||||||
|
|
||||||
|
ProjectArgument = app.Argument(
|
||||||
|
"project",
|
||||||
|
"The path to the project (project folder or project.json) with precompilation.");
|
||||||
|
|
||||||
|
ConfigureCompilationType = app.Option(
|
||||||
|
ConfigureCompilationTypeTemplate,
|
||||||
|
"Type with Configure method",
|
||||||
|
CommandOptionType.SingleValue);
|
||||||
|
|
||||||
|
ContentRootOption = app.Option(
|
||||||
|
ContentRootTemplate,
|
||||||
|
"The application's content root.",
|
||||||
|
CommandOptionType.SingleValue);
|
||||||
|
|
||||||
|
EmbedViewSourcesOption = app.Option(
|
||||||
|
EmbedViewSourceTemplate,
|
||||||
|
"Embed view sources as resources in the generated assembly.",
|
||||||
|
CommandOptionType.NoValue);
|
||||||
|
|
||||||
|
KeyFileOption = app.Option(
|
||||||
|
StrongNameKeyPath,
|
||||||
|
"Strong name key path",
|
||||||
|
CommandOptionType.SingleValue);
|
||||||
|
|
||||||
|
DelaySignOption = app.Option(
|
||||||
|
DelaySignTemplate,
|
||||||
|
"Determines if the precompiled view assembly is to be delay signed.",
|
||||||
|
CommandOptionType.NoValue);
|
||||||
|
|
||||||
|
PublicSignOption = app.Option(
|
||||||
|
PublicSignTemplate,
|
||||||
|
"Determines if the precompiled view assembly is to be public signed.",
|
||||||
|
CommandOptionType.NoValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommandArgument ProjectArgument { get; }
|
||||||
|
|
||||||
|
public CommandOption ConfigureCompilationType { get; }
|
||||||
|
|
||||||
|
public CommandOption ContentRootOption { get; }
|
||||||
|
|
||||||
|
public CommandOption EmbedViewSourcesOption { get; }
|
||||||
|
|
||||||
|
public CommandOption KeyFileOption { get; }
|
||||||
|
|
||||||
|
public CommandOption DelaySignOption { get; }
|
||||||
|
|
||||||
|
public CommandOption PublicSignOption { get; }
|
||||||
|
|
||||||
|
public CommandOption OutputPathOption { get; }
|
||||||
|
|
||||||
|
public CommandOption ApplicationNameOption { get; }
|
||||||
|
|
||||||
|
public string OutputPath => OutputPathOption.Value();
|
||||||
|
|
||||||
|
public string ApplicationName => ApplicationNameOption.Value();
|
||||||
|
|
||||||
|
public string KeyFile => KeyFileOption.Value();
|
||||||
|
|
||||||
|
public bool DelaySign => DelaySignOption.HasValue();
|
||||||
|
|
||||||
|
public bool PublicSign => PublicSignOption.HasValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
@ -23,8 +22,6 @@ namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
{
|
{
|
||||||
public class PrecompileRunCommand
|
public class PrecompileRunCommand
|
||||||
{
|
{
|
||||||
public static readonly string ApplicationNameTemplate = "--application-name";
|
|
||||||
public static readonly string OutputPathTemplate = "--output-path";
|
|
||||||
private static readonly ParallelOptions ParalellOptions = new ParallelOptions
|
private static readonly ParallelOptions ParalellOptions = new ParallelOptions
|
||||||
{
|
{
|
||||||
MaxDegreeOfParallelism = 4
|
MaxDegreeOfParallelism = 4
|
||||||
|
|
@ -32,33 +29,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
|
|
||||||
private CommandLineApplication Application { get; set; }
|
private CommandLineApplication Application { get; set; }
|
||||||
|
|
||||||
private CommandOption OutputPathOption { get; set; }
|
|
||||||
|
|
||||||
private CommandOption ApplicationNameOption { get; set; }
|
|
||||||
|
|
||||||
private MvcServiceProvider MvcServiceProvider { get; set; }
|
private MvcServiceProvider MvcServiceProvider { get; set; }
|
||||||
|
|
||||||
private CommonOptions Options { get; } = new CommonOptions();
|
private CompilationOptions Options { get; set; }
|
||||||
|
|
||||||
private StrongNameOptions StrongNameOptions { get; } = new StrongNameOptions();
|
|
||||||
|
|
||||||
private string ProjectPath { get; set; }
|
private string ProjectPath { get; set; }
|
||||||
|
|
||||||
public void Configure(CommandLineApplication app)
|
public void Configure(CommandLineApplication app)
|
||||||
{
|
{
|
||||||
Application = app;
|
Application = app;
|
||||||
Options.Configure(app);
|
Options = new CompilationOptions(app);
|
||||||
StrongNameOptions.Configure(app);
|
|
||||||
|
|
||||||
OutputPathOption = app.Option(
|
|
||||||
OutputPathTemplate,
|
|
||||||
"Path to the emit the precompiled assembly to.",
|
|
||||||
CommandOptionType.SingleValue);
|
|
||||||
|
|
||||||
ApplicationNameOption = app.Option(
|
|
||||||
ApplicationNameTemplate,
|
|
||||||
"Name of the application to produce precompiled assembly for.",
|
|
||||||
CommandOptionType.SingleValue);
|
|
||||||
|
|
||||||
app.OnExecute(() => Execute());
|
app.OnExecute(() => Execute());
|
||||||
}
|
}
|
||||||
|
|
@ -72,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
|
|
||||||
MvcServiceProvider = new MvcServiceProvider(
|
MvcServiceProvider = new MvcServiceProvider(
|
||||||
ProjectPath,
|
ProjectPath,
|
||||||
ApplicationNameOption.Value(),
|
Options.ApplicationNameOption.Value(),
|
||||||
Options.ContentRootOption.Value(),
|
Options.ContentRootOption.Value(),
|
||||||
Options.ConfigureCompilationType.Value());
|
Options.ConfigureCompilationType.Value());
|
||||||
|
|
||||||
|
|
@ -95,11 +75,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
var precompileAssemblyName = $"{ApplicationNameOption.Value()}{ViewsFeatureProvider.PrecompiledViewsAssemblySuffix}";
|
var precompileAssemblyName = $"{Options.ApplicationName}{ViewsFeatureProvider.PrecompiledViewsAssemblySuffix}";
|
||||||
var compilation = CompileViews(results, precompileAssemblyName);
|
var compilation = CompileViews(results, precompileAssemblyName);
|
||||||
var resources = GetResources(results);
|
var resources = GetResources(results);
|
||||||
|
|
||||||
var assemblyPath = Path.Combine(OutputPathOption.Value(), precompileAssemblyName + ".dll");
|
var assemblyPath = Path.Combine(Options.OutputPath, precompileAssemblyName + ".dll");
|
||||||
var emitResult = EmitAssembly(
|
var emitResult = EmitAssembly(
|
||||||
compilation,
|
compilation,
|
||||||
MvcServiceProvider.Compiler.EmitOptions,
|
MvcServiceProvider.Compiler.EmitOptions,
|
||||||
|
|
@ -212,9 +192,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
var codeGenerator = new ViewInfoContainerCodeGenerator(compiler, compilation);
|
var codeGenerator = new ViewInfoContainerCodeGenerator(compiler, compilation);
|
||||||
codeGenerator.AddViewFactory(results);
|
codeGenerator.AddViewFactory(results);
|
||||||
|
|
||||||
var assemblyName = new AssemblyName(ApplicationNameOption.Value());
|
var assemblyName = new AssemblyName(Options.ApplicationName);
|
||||||
assemblyName = Assembly.Load(assemblyName).GetName();
|
assemblyName = Assembly.Load(assemblyName).GetName();
|
||||||
codeGenerator.AddAssemblyMetadata(assemblyName, StrongNameOptions);
|
codeGenerator.AddAssemblyMetadata(assemblyName, Options);
|
||||||
|
|
||||||
return codeGenerator.Compilation;
|
return codeGenerator.Compilation;
|
||||||
}
|
}
|
||||||
|
|
@ -228,21 +208,21 @@ namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!OutputPathOption.HasValue())
|
if (!Options.OutputPathOption.HasValue())
|
||||||
{
|
{
|
||||||
Application.Error.WriteLine($"Option {OutputPathTemplate} does not specify a value.");
|
Application.Error.WriteLine($"Option {CompilationOptions.OutputPathTemplate} does not specify a value.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ApplicationNameOption.HasValue())
|
if (!Options.ApplicationNameOption.HasValue())
|
||||||
{
|
{
|
||||||
Application.Error.WriteLine($"Option {ApplicationNameTemplate} does not specify a value.");
|
Application.Error.WriteLine($"Option {CompilationOptions.ApplicationNameTemplate} does not specify a value.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Options.ContentRootOption.HasValue())
|
if (!Options.ContentRootOption.HasValue())
|
||||||
{
|
{
|
||||||
Application.Error.WriteLine($"Option {CommonOptions.ContentRootTemplate} does not specify a value.");
|
Application.Error.WriteLine($"Option {CompilationOptions.ContentRootTemplate} does not specify a value.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using Microsoft.Extensions.CommandLineUtils;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Internal
|
|
||||||
{
|
|
||||||
public class StrongNameOptions
|
|
||||||
{
|
|
||||||
public static readonly string StrongNameKeyPath = "--key-file";
|
|
||||||
public static readonly string DelaySignTemplate = "--delay-sign";
|
|
||||||
public static readonly string PublicSignTemplate = "--public-sign";
|
|
||||||
|
|
||||||
public CommandOption KeyFileOption { get; set; }
|
|
||||||
|
|
||||||
public CommandOption DelaySignOption { get; private set; }
|
|
||||||
|
|
||||||
public CommandOption PublicSignOption { get; private set; }
|
|
||||||
|
|
||||||
public void Configure(CommandLineApplication app)
|
|
||||||
{
|
|
||||||
KeyFileOption = app.Option(
|
|
||||||
StrongNameKeyPath,
|
|
||||||
"Strong name key path",
|
|
||||||
CommandOptionType.SingleValue);
|
|
||||||
|
|
||||||
DelaySignOption = app.Option(
|
|
||||||
DelaySignTemplate,
|
|
||||||
"Determines if the precompiled view assembly is to be delay signed.",
|
|
||||||
CommandOptionType.NoValue);
|
|
||||||
|
|
||||||
PublicSignOption = app.Option(
|
|
||||||
PublicSignTemplate,
|
|
||||||
"Determines if the precompiled view assembly is to be public signed.",
|
|
||||||
CommandOptionType.NoValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string KeyFile => KeyFileOption.Value();
|
|
||||||
|
|
||||||
public bool DelaySign => DelaySignOption.HasValue();
|
|
||||||
|
|
||||||
public bool PublicSign => PublicSignOption.HasValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -58,14 +58,14 @@ namespace {ViewsFeatureProvider.ViewInfoContainerNamespace}
|
||||||
|
|
||||||
public void AddAssemblyMetadata(
|
public void AddAssemblyMetadata(
|
||||||
AssemblyName applicationAssemblyName,
|
AssemblyName applicationAssemblyName,
|
||||||
StrongNameOptions strongNameOptions)
|
CompilationOptions compilationOptions)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(strongNameOptions.KeyFile))
|
if (!string.IsNullOrEmpty(compilationOptions.KeyFile))
|
||||||
{
|
{
|
||||||
var updatedOptions = Compilation.Options.WithStrongNameProvider(new DesktopStrongNameProvider());
|
var updatedOptions = Compilation.Options.WithStrongNameProvider(new DesktopStrongNameProvider());
|
||||||
var keyFilePath = Path.GetFullPath(strongNameOptions.KeyFile);
|
var keyFilePath = Path.GetFullPath(compilationOptions.KeyFile);
|
||||||
|
|
||||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || strongNameOptions.PublicSign)
|
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || compilationOptions.PublicSign)
|
||||||
{
|
{
|
||||||
updatedOptions = updatedOptions.WithCryptoPublicKey(
|
updatedOptions = updatedOptions.WithCryptoPublicKey(
|
||||||
SnkUtils.ExtractPublicKey(File.ReadAllBytes(keyFilePath)));
|
SnkUtils.ExtractPublicKey(File.ReadAllBytes(keyFilePath)));
|
||||||
|
|
@ -73,7 +73,7 @@ namespace {ViewsFeatureProvider.ViewInfoContainerNamespace}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
updatedOptions = updatedOptions.WithCryptoKeyFile(keyFilePath)
|
updatedOptions = updatedOptions.WithCryptoKeyFile(keyFilePath)
|
||||||
.WithDelaySign(strongNameOptions.DelaySign);
|
.WithDelaySign(compilationOptions.DelaySign);
|
||||||
}
|
}
|
||||||
|
|
||||||
Compilation = Compilation.WithOptions(updatedOptions);
|
Compilation = Compilation.WithOptions(updatedOptions);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue