| File: Common\DeploymentParameters.cs | Web Access |
| Project: src\aspnetcore\src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj (Microsoft.AspNetCore.Server.IntegrationTesting) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using System.Reflection; namespace Microsoft.AspNetCore.Server.IntegrationTesting; /// <summary> /// Parameters to control application deployment. /// </summary> public class DeploymentParameters { public DeploymentParameters() { EnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "true"; var configAttribute = Assembly.GetCallingAssembly().GetCustomAttribute<AssemblyConfigurationAttribute>(); if (configAttribute != null && !string.IsNullOrEmpty(configAttribute.Configuration)) { Configuration = configAttribute.Configuration; } } public DeploymentParameters(TestVariant variant) { EnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "true"; var configAttribute = Assembly.GetCallingAssembly().GetCustomAttribute<AssemblyConfigurationAttribute>(); if (configAttribute != null && !string.IsNullOrEmpty(configAttribute.Configuration)) { Configuration = configAttribute.Configuration; } ServerType = variant.Server; TargetFramework = variant.Tfm; ApplicationType = variant.ApplicationType; RuntimeArchitecture = variant.Architecture; HostingModel = variant.HostingModel; } /// <summary> /// Creates an instance of <see cref="DeploymentParameters"/>. /// </summary> /// <param name="applicationPath">Source code location of the target location to be deployed.</param> /// <param name="serverType">Where to be deployed on.</param> /// <param name="runtimeFlavor">Flavor of the clr to run against.</param> /// <param name="runtimeArchitecture">Architecture of the runtime to be used.</param> public DeploymentParameters( string applicationPath, ServerType serverType, RuntimeFlavor runtimeFlavor, RuntimeArchitecture runtimeArchitecture) { ArgumentException.ThrowIfNullOrEmpty(applicationPath); if (!Directory.Exists(applicationPath)) { throw new DirectoryNotFoundException($"Application path {applicationPath} does not exist."); } ApplicationPath = applicationPath; ApplicationName = new DirectoryInfo(ApplicationPath).Name; ServerType = serverType; RuntimeFlavor = runtimeFlavor; EnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "true"; var configAttribute = Assembly.GetCallingAssembly().GetCustomAttribute<AssemblyConfigurationAttribute>(); if (configAttribute != null && !string.IsNullOrEmpty(configAttribute.Configuration)) { Configuration = configAttribute.Configuration; } } public DeploymentParameters(DeploymentParameters parameters) { foreach (var propertyInfo in typeof(DeploymentParameters).GetProperties()) { if (propertyInfo.CanWrite) { propertyInfo.SetValue(this, propertyInfo.GetValue(parameters)); } } foreach (var kvp in parameters.EnvironmentVariables) { EnvironmentVariables.Add(kvp); } foreach (var kvp in parameters.PublishEnvironmentVariables) { PublishEnvironmentVariables.Add(kvp); } } public ApplicationPublisher ApplicationPublisher { get; set; } public ServerType ServerType { get; set; } public RuntimeFlavor RuntimeFlavor { get; set; } public RuntimeArchitecture RuntimeArchitecture { get; set; } = RuntimeArchitectures.Current; /// <summary> /// Suggested base url for the deployed application. The final deployed url could be /// different than this. Use <see cref="DeploymentResult.ApplicationBaseUri"/> for the /// deployed url. /// </summary> public string ApplicationBaseUriHint { get; set; } public bool RestoreDependencies { get; set; } /// <summary> /// Scheme used by the deployed application if <see cref="ApplicationBaseUriHint"/> is empty. /// </summary> public string Scheme { get; set; } = Uri.UriSchemeHttp; public string EnvironmentName { get; set; } public string ServerConfigTemplateContent { get; set; } public string ServerConfigLocation { get; set; } public string SiteName { get; set; } = "HttpTestSite"; public string ApplicationPath { get; set; } /// <summary> /// Gets or sets the name of the application. This is used to execute the application when deployed. /// Defaults to the file name of <see cref="ApplicationPath"/>. /// </summary> public string ApplicationName { get; set; } public string TargetFramework { get; set; } /// <summary> /// Configuration under which to build (ex: Release or Debug) /// </summary> public string Configuration { get; set; } = "Debug"; /// <summary> /// Space separated command line arguments to be passed to dotnet-publish /// </summary> public string AdditionalPublishParameters { get; set; } /// <summary> /// To publish the application before deployment. /// </summary> public bool PublishApplicationBeforeDeployment { get; set; } public bool PreservePublishedApplicationForDebugging { get; set; } public bool StatusMessagesEnabled { get; set; } = true; public ApplicationType ApplicationType { get; set; } public string PublishedApplicationRootPath { get; set; } public HostingModel HostingModel { get; set; } /// <summary> /// Environment variables to be set before starting the host. /// Not applicable for IIS Scenarios. /// </summary> public IDictionary<string, string> EnvironmentVariables { get; } = new Dictionary<string, string>(); /// <summary> /// Environment variables used when invoking dotnet publish. /// </summary> public IDictionary<string, string> PublishEnvironmentVariables { get; } = new Dictionary<string, string>(); /// <summary> /// For any application level cleanup to be invoked after performing host cleanup. /// </summary> public Action<DeploymentParameters> UserAdditionalCleanup { get; set; } /// <summary> /// Timeout for publish /// </summary> public TimeSpan? PublishTimeout { get; set; } public override string ToString() { return string.Format( CultureInfo.InvariantCulture, "[Variation] :: ServerType={0}, Runtime={1}, Arch={2}, BaseUrlHint={3}, Publish={4}, HostingModel={5}", ServerType, RuntimeFlavor, RuntimeArchitecture, ApplicationBaseUriHint, PublishApplicationBeforeDeployment, HostingModel); } }