From b8cc89b12803ef9474572a3cecfb4ffb63ba4d52 Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Sun, 9 Jan 2022 20:29:21 +0000 Subject: [PATCH 1/8] Add aspnet hosting Add docker compose support --- Solutions/Docker.Compose/.dockerignore | 25 ++++++++++ .../Docker.Compose/docker-compose.dcproj | 18 +++++++ .../docker-compose.override.yml | 8 ++++ Solutions/Docker.Compose/docker-compose.yml | 15 ++++++ .../Marain.Tenancy.Host.AspNetCore/Dockerfile | 23 +++++++++ .../Marain.Tenancy.Host.AspNetCore.csproj | 28 +++++++++++ .../Marain.Tenancy.Host.AspNetCore/Program.cs | 25 ++++++++++ .../Properties/launchSettings.json | 35 ++++++++++++++ .../Marain.Tenancy.Host.AspNetCore/Startup.cs | 48 +++++++++++++++++++ .../appsettings.Development.json | 14 ++++++ .../Marain/Tenancy/Functions/TenancyHost.cs | 3 +- Solutions/Marain.Tenancy.sln | 12 +++++ 12 files changed, 252 insertions(+), 2 deletions(-) create mode 100644 Solutions/Docker.Compose/.dockerignore create mode 100644 Solutions/Docker.Compose/docker-compose.dcproj create mode 100644 Solutions/Docker.Compose/docker-compose.override.yml create mode 100644 Solutions/Docker.Compose/docker-compose.yml create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/Dockerfile create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/Program.cs create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/Properties/launchSettings.json create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json diff --git a/Solutions/Docker.Compose/.dockerignore b/Solutions/Docker.Compose/.dockerignore new file mode 100644 index 00000000..3729ff0c --- /dev/null +++ b/Solutions/Docker.Compose/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/Solutions/Docker.Compose/docker-compose.dcproj b/Solutions/Docker.Compose/docker-compose.dcproj new file mode 100644 index 00000000..9283f39a --- /dev/null +++ b/Solutions/Docker.Compose/docker-compose.dcproj @@ -0,0 +1,18 @@ + + + + 2.1 + Linux + e6ef3336-38d7-43ae-9840-6359f20db9c8 + LaunchBrowser + {Scheme}://localhost:{ServicePort}/swagger + marain.tenancy.host.aspnetcore + + + + docker-compose.yml + + + + + \ No newline at end of file diff --git a/Solutions/Docker.Compose/docker-compose.override.yml b/Solutions/Docker.Compose/docker-compose.override.yml new file mode 100644 index 00000000..367efe70 --- /dev/null +++ b/Solutions/Docker.Compose/docker-compose.override.yml @@ -0,0 +1,8 @@ +version: '3.4' + +services: + marain.tenancy.host.aspnetcore: + environment: + - ASPNETCORE_ENVIRONMENT=Development + ports: + - "80" diff --git a/Solutions/Docker.Compose/docker-compose.yml b/Solutions/Docker.Compose/docker-compose.yml new file mode 100644 index 00000000..85cc8e33 --- /dev/null +++ b/Solutions/Docker.Compose/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.4' + +services: + marain.tenancy.host.aspnetcore: + image: ${DOCKER_REGISTRY-}maraintenancyhostaspnetcore + build: + context: ./../ + dockerfile: Marain.Tenancy.Host.AspNetCore/Dockerfile + + marain.tenancy.host.aspnetcore-dapr: + image: "daprio/daprd:latest" + command: [ "./daprd", "-app-id", "marain.tenancy.host.aspnetcore", "-app-port", "80" ] + depends_on: + - marain.tenancy.host.aspnetcore + network_mode: "service:marain.tenancy.host.aspnetcore" \ No newline at end of file diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Dockerfile b/Solutions/Marain.Tenancy.Host.AspNetCore/Dockerfile new file mode 100644 index 00000000..ab8d4d6f --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Dockerfile @@ -0,0 +1,23 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src +COPY ["Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj", "Marain.Tenancy.Host.AspNetCore/"] +COPY ["Marain.Tenancy.Hosting.AspNetCore/Marain.Tenancy.Hosting.AspNetCore.csproj", "Marain.Tenancy.Hosting.AspNetCore/"] +COPY ["Marain.Tenancy.OpenApi.Service/Marain.Tenancy.OpenApi.Service.csproj", "Marain.Tenancy.OpenApi.Service/"] +RUN dotnet restore "Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj" +COPY . . +WORKDIR "/src/Marain.Tenancy.Host.AspNetCore" +RUN dotnet build "Marain.Tenancy.Host.AspNetCore.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "Marain.Tenancy.Host.AspNetCore.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "Marain.Tenancy.Host.AspNetCore.dll"] \ No newline at end of file diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj b/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj new file mode 100644 index 00000000..7b5c994e --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj @@ -0,0 +1,28 @@ + + + + net6.0 + ..\docker-compose.dcproj + Linux + + + + + + + + + PreserveNewest + + + + + + + + + + + + + diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Program.cs b/Solutions/Marain.Tenancy.Host.AspNetCore/Program.cs new file mode 100644 index 00000000..36b4916a --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Program.cs @@ -0,0 +1,25 @@ +namespace Marain.Tenancy.Host.AspNetCore +{ + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Hosting; + + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration((hostingContext, config) => + { + config.AddEnvironmentVariables(); + }) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} \ No newline at end of file diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Properties/launchSettings.json b/Solutions/Marain.Tenancy.Host.AspNetCore/Properties/launchSettings.json new file mode 100644 index 00000000..06ce2152 --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Properties/launchSettings.json @@ -0,0 +1,35 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:44494", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Marain.Tenancy.Host.AspNetCore": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": "true", + "applicationUrl": "http://localhost:5000" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", + "publishAllPorts": true + } + } +} \ No newline at end of file diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs b/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs new file mode 100644 index 00000000..30a23c64 --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs @@ -0,0 +1,48 @@ +namespace Marain.Tenancy.Host.AspNetCore +{ + using Corvus.Storage.Azure.BlobStorage; + + using Menes.Auditing.AuditLogSinks.Development; + using Menes.Hosting.AspNetCore; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Hosting; + + public class Startup + { + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) + { + services.AddTenancyApiWithAspNetPipelineHosting(); + services.AddOpenApiAuditing(); + + var sp = services.BuildServiceProvider(); + + IConfiguration configuration = sp.GetRequiredService(); + + BlobContainerConfiguration rootStorageConfiguration = configuration + .GetSection("RootBlobStorageConfiguration") + .Get(); + + services.AddTenantStoreOnAzureBlobStorage(rootStorageConfiguration); + +#if DEBUG + services.AddAuditLogSink(); +#endif + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseMenesCatchAll(); + } + } +} diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json new file mode 100644 index 00000000..84955144 --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json @@ -0,0 +1,14 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "TenantCloudBlobContainerFactoryOptions:AzureServicesAuthConnectionString": "", + + "TenantCacheConfiguration:GetTenantResponseCacheControlHeaderValue": "max-age=300", + + "RootTenantBlobStorageConfigurationOptions:AccountName": "UseDevelopmentStorage=true", +} diff --git a/Solutions/Marain.Tenancy.Host.Functions/Marain/Tenancy/Functions/TenancyHost.cs b/Solutions/Marain.Tenancy.Host.Functions/Marain/Tenancy/Functions/TenancyHost.cs index 94e06c69..ee842729 100644 --- a/Solutions/Marain.Tenancy.Host.Functions/Marain/Tenancy/Functions/TenancyHost.cs +++ b/Solutions/Marain.Tenancy.Host.Functions/Marain/Tenancy/Functions/TenancyHost.cs @@ -23,8 +23,7 @@ public class TenancyHost /// Initializes a new instance of the class. /// /// The OpenApi host. - public TenancyHost( - IOpenApiHost host) + public TenancyHost(IOpenApiHost host) { this.host = host; } diff --git a/Solutions/Marain.Tenancy.sln b/Solutions/Marain.Tenancy.sln index f0f82dd2..c95befb6 100644 --- a/Solutions/Marain.Tenancy.sln +++ b/Solutions/Marain.Tenancy.sln @@ -31,6 +31,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marain.Tenancy.Storage.Azur EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marain.Tenancy.Storage.Azure.BlobStorage.Specs", "Marain.Tenancy.Storage.Azure.BlobStorage.Specs\Marain.Tenancy.Storage.Azure.BlobStorage.Specs.csproj", "{B9D61A6F-9330-4590-98F2-3A033C96CD2E}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marain.Tenancy.Host.AspNetCore", "Marain.Tenancy.Host.AspNetCore\Marain.Tenancy.Host.AspNetCore.csproj", "{039CF3D2-264A-4073-8CA0-612186FF809A}" +EndProject +Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "Docker.Compose\docker-compose.dcproj", "{E6EF3336-38D7-43AE-9840-6359F20DB9C8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -77,6 +81,14 @@ Global {B9D61A6F-9330-4590-98F2-3A033C96CD2E}.Debug|Any CPU.Build.0 = Debug|Any CPU {B9D61A6F-9330-4590-98F2-3A033C96CD2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9D61A6F-9330-4590-98F2-3A033C96CD2E}.Release|Any CPU.Build.0 = Release|Any CPU + {039CF3D2-264A-4073-8CA0-612186FF809A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {039CF3D2-264A-4073-8CA0-612186FF809A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {039CF3D2-264A-4073-8CA0-612186FF809A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {039CF3D2-264A-4073-8CA0-612186FF809A}.Release|Any CPU.Build.0 = Release|Any CPU + {E6EF3336-38D7-43AE-9840-6359F20DB9C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6EF3336-38D7-43AE-9840-6359F20DB9C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6EF3336-38D7-43AE-9840-6359F20DB9C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6EF3336-38D7-43AE-9840-6359F20DB9C8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From cce12118fef5716e00f60a34086de0c241e56cff Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Sun, 9 Jan 2022 21:26:44 +0000 Subject: [PATCH 2/8] Remove local.setting.json --- .../Marain.Tenancy.Host.AspNetCore.csproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj b/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj index 7b5c994e..cbaf8890 100644 --- a/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj @@ -10,12 +10,6 @@ - - - PreserveNewest - - - From 606277309e79c85d1ce22080be0f75726c423f7d Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Sun, 9 Jan 2022 21:56:48 +0000 Subject: [PATCH 3/8] Add missing target --- Solutions/Docker.Compose/docker-compose.dcproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Solutions/Docker.Compose/docker-compose.dcproj b/Solutions/Docker.Compose/docker-compose.dcproj index 9283f39a..4726c6c7 100644 --- a/Solutions/Docker.Compose/docker-compose.dcproj +++ b/Solutions/Docker.Compose/docker-compose.dcproj @@ -15,4 +15,6 @@ + + \ No newline at end of file From b71cc319ba223082784ef42be556e384330f687d Mon Sep 17 00:00:00 2001 From: Ian Griffiths Date: Mon, 10 Jan 2022 07:20:27 +0000 Subject: [PATCH 4/8] Fix appsettings.Development.json Had wrong property names, and a spurious comma. Also added in swagger endpoint. --- .../Marain.Tenancy.Host.AspNetCore/Startup.cs | 37 ++++++++++++++++--- .../appsettings.Development.json | 4 +- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs b/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs index 30a23c64..00eaf707 100644 --- a/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs @@ -1,7 +1,10 @@ namespace Marain.Tenancy.Host.AspNetCore { + using System; + using Corvus.Storage.Azure.BlobStorage; + using Menes; using Menes.Auditing.AuditLogSinks.Development; using Menes.Hosting.AspNetCore; using Microsoft.AspNetCore.Builder; @@ -12,18 +15,21 @@ namespace Marain.Tenancy.Host.AspNetCore public class Startup { + public IConfiguration Configuration { get; } + + public Startup(IConfiguration configuration) + { + this.Configuration = configuration; + } + // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { - services.AddTenancyApiWithAspNetPipelineHosting(); + services.AddTenancyApiWithAspNetPipelineHosting(ConfigureOpenApiHost); services.AddOpenApiAuditing(); - var sp = services.BuildServiceProvider(); - - IConfiguration configuration = sp.GetRequiredService(); - - BlobContainerConfiguration rootStorageConfiguration = configuration + BlobContainerConfiguration rootStorageConfiguration = this.Configuration .GetSection("RootBlobStorageConfiguration") .Get(); @@ -44,5 +50,24 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseMenesCatchAll(); } + + // TODO: consolidate with functions startup code. + // This fixes a bug from that - the 2nd exception handler was wrong on two counts: + // 1. wrong exception type: if config is non-null and config.Documents is null, that's + // not ArgumentNullException + // 2. wrong argument order: we had the nameof and message flipped + // In any case, this startup is likely to be needed by any host, so we should put it + // somewhere common. + private static void ConfigureOpenApiHost(IOpenApiHostConfiguration config) + { + ArgumentNullException.ThrowIfNull(config); + + if (config.Documents == null) + { + throw new ArgumentException("AddTenancyApi callback: config.Documents", nameof(config)); + } + + config.Documents.AddSwaggerEndpoint(); + } } } diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json index 84955144..97fa7432 100644 --- a/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json @@ -10,5 +10,7 @@ "TenantCacheConfiguration:GetTenantResponseCacheControlHeaderValue": "max-age=300", - "RootTenantBlobStorageConfigurationOptions:AccountName": "UseDevelopmentStorage=true", + "RootBlobStorageConfiguration": { + "ConnectionStringPlainText": "UseDevelopmentStorage=true" + } } From d8e2f710f300d935990c1c6cbe61c98107e66445 Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Tue, 11 Jan 2022 11:39:25 +0000 Subject: [PATCH 5/8] Remove appsettings.Development.json --- .../appsettings.Development.json | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json deleted file mode 100644 index 97fa7432..00000000 --- a/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "TenantCloudBlobContainerFactoryOptions:AzureServicesAuthConnectionString": "", - - "TenantCacheConfiguration:GetTenantResponseCacheControlHeaderValue": "max-age=300", - - "RootBlobStorageConfiguration": { - "ConnectionStringPlainText": "UseDevelopmentStorage=true" - } -} From 27624aa79a2120be6cbc41895a88f1f0448c5620 Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Tue, 11 Jan 2022 11:44:07 +0000 Subject: [PATCH 6/8] Add appsettings.template.json with required structure for a functioning app. Exclude appsettings.development.json so that dev secrets don't get committed into the repo. --- .gitignore | 5 ++++- .../appsettings.template.json | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.template.json diff --git a/.gitignore b/.gitignore index 870ddfc7..2d0804d3 100644 --- a/.gitignore +++ b/.gitignore @@ -340,4 +340,7 @@ appsettings.json **/MsDeploy -*.feature.cs \ No newline at end of file +*.feature.cs + +# ignore local settings file that may contain secrets. +/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.Development.json diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.template.json b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.template.json new file mode 100644 index 00000000..82efc507 --- /dev/null +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/appsettings.template.json @@ -0,0 +1,15 @@ +// Rename to appsettings.development.json and remove this line. +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "TenantCloudBlobContainerFactoryOptions:AzureServicesAuthConnectionString": "", + "TenantCacheConfiguration:GetTenantResponseCacheControlHeaderValue": "max-age=300", + "RootBlobStorageConfiguration": { + "ConnectionStringPlainText": "DefaultEndpointsProtocol=https;AccountName=;AccountKey=;EndpointSuffix=core.windows.net" + } +} \ No newline at end of file From a44dd5bcf276158ce06d0ffc8b189ab65d79c8aa Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Tue, 11 Jan 2022 12:57:17 +0000 Subject: [PATCH 7/8] Prevent solution from being packaged as a .nupkg --- .../Marain.Tenancy.Host.AspNetCore.csproj | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj b/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj index cbaf8890..2d3c836b 100644 --- a/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Marain.Tenancy.Host.AspNetCore.csproj @@ -4,12 +4,9 @@ net6.0 ..\docker-compose.dcproj Linux + false - - - - From b7c6920cfa50ccac3f470377c07b4e7f7aca6b37 Mon Sep 17 00:00:00 2001 From: Howard van Rooijen Date: Wed, 12 Jan 2022 07:03:10 +0000 Subject: [PATCH 8/8] Implement Matthew's suggestion --- Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs b/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs index 00eaf707..5f52e34d 100644 --- a/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs +++ b/Solutions/Marain.Tenancy.Host.AspNetCore/Startup.cs @@ -62,7 +62,7 @@ private static void ConfigureOpenApiHost(IOpenApiHostConfiguration config) { ArgumentNullException.ThrowIfNull(config); - if (config.Documents == null) + if (config.Documents is null) { throw new ArgumentException("AddTenancyApi callback: config.Documents", nameof(config)); }