Skip to content

Cross-cutting features and infrastructure — template matrix (expanded)

This document is a static snapshot derived from Directory.Build.props, ConnectSoft.TemplateRepositoryDirectory.Build.props, build/*.props, solution (.slnx) layout, and ConnectSoft.BaseTemplate.ApplicationModel.csproj as of the date in the front matter. Submodule SHAs may differ on other machines.


How to read this document

  1. § Column legend — repository / evaluation-path identifiers (BT, MS, Bot, Id-H, …).
  2. § Solution structure — how Layer 2 (ConnectSoft.BaseTemplate) and Layer 3 (extended) solutions map project types to features.
  3. § MSBuild feature matrix — one row per flag or small group; Y / N after the full props chain (Host vs base-template/ satellite where it differs).
  4. § Repository infrastructure — Docker, Kubernetes manifests, MkDocs, root documentation pipeline (not the same as MSBuild flags).
  5. § Microsoft Bot Framework (exclusive) — only ConnectSoft.MicrosoftBotFrameworkTemplate.
  6. § Testing — test project types present in each solution.
  7. § ApplicationModel — typically always-on libraries — NuGet/packages wired without Condition in BaseTemplate’s ApplicationModel (they still need a successful compile of that project).
  8. § Source files — which build/*.props to edit when regenerating this matrix.

Legend

Symbol Meaning
Y Effective true / feature on for that column after imports.
N Effective false / symbols stripped / feature off for compile graph.
Not applicable (e.g. Bot-only row for non-Bot columns — use § Microsoft Bot Framework).

Column IDs (same as v1 of this matrix)

ID Repository / path
BT ConnectSoft.BaseTemplate — standalone; full AuthoringMode; no Layer 3 post-import.
MS ConnectSoft.MicroserviceTemplate — no ConnectSoftBaseTemplateDirectoryPostImportfull Authoring.
Bot ConnectSoft.MicrosoftBotFrameworkTemplateMinimalHostNoOp.props (empty) → full Authoring + Bot-only packages (§ Bot).
Id-H / Id-S ConnectSoft.IdentityTemplateHost (not under base-template/) vs base-template/ satellite.
GW-H / GW-S ConnectSoft.ApiGatewayTemplate — Host vs satellite.
Wr ConnectSoft.WorkerTemplate — Host and satellite share the same Worker minimal overrides (satellite runs ExtendedHost first).
HC-H / HC-S ConnectSoft.HealthChecksAggregatorTemplate — Host vs satellite (HealthChecksSatelliteOrleansOff on satellite).
AS-H / AS-S ConnectSoft.AuthorizationServerTemplate — Host vs satellite.

Host vs satellite (reminder)

  • Host — Layer 3 projects at repo root; imports the repo-specific *Host.props (or Worker minimal) fragment.
  • Sat — Projects under base-template/; usually imports ExtendedHost.BaseTemplateSatelliteDefaults.props so CPM PackageVersion conditions match satellite graphs; ConnectSoft.BaseTemplate satellite *.csproj use Option A (PackageReference Condition aligned with PackageVersion). Extra fragments possible (e.g. Orleans off for Health Checks satellite).

Solution structure and feature correspondence

Layer 2 — ConnectSoft.BaseTemplate (from ConnectSoft.BaseTemplate.slnx)

The template solution is conditional (#if in .slnx): shipped dotnet new output depends on chosen symbols. In AuthoringMode (developer clone of the repo), essentially all optional projects are present.

Area Typical projects Driven by (examples)
Host entry ConnectSoft.BaseTemplate.Application Always
Composition root ConnectSoft.BaseTemplate.ApplicationModel Always; pulls most cross-cutting NuGet
Domain DomainModel, DomainModel.Impl Always
Persistence EntityModel, PersistenceModel, PersistenceModel.NHibernate, PersistenceModel.MongoDb, migrations projects PersistenceModelTypeNone, UseNHibernate, UseMongoDb, Migrations
Messaging MessagingModel, FlowModel, FlowModel.NServiceBus, FlowModel.MassTransit MessagingModelTypeNone, UseNServiceBus, UseMassTransit
Schedulers SchedulerModel, SchedulerModel.Hangfire SchedulerModelTypeNone, UseHangFire
Service surfaces ServiceModel, ServiceModel.RestApi, ServiceModel.Grpc, ServiceModel.GraphQL, ServiceModel.CoreWCF, ServiceModel.SignalR, ServiceModel.AzureFunction, ServiceModel.ServiceFabric ServiceModelTypeNone, UseRestApi, UseGrpc, …
Actors ActorModel, ActorModel.Orleans, ActorModel.Dapr, ActorModel.Akka ActorModelTypeNone, UseOrleans, UseDapr, UseAkka
AI / agents AIModel, AgentFramework, ModelContextProtocol UseMicrosoftExtensionsAI, UseMicrosoftAgentFramework, UseMCP, …
Cross-cutting Options, Metrics, InfrastructureModel Options/Metrics typically always; infrastructure pattern varies
Tooling DiagramAsCodeModel (.pyproj, non-build) Always in solution folder
Containers DockerCompose .dcproj Docker
Tests UnitTests, ArchitectureTests, AcceptanceTests Always in Authoring solution
Docs docs/**, mkdocs.yml, azure-pipelines-documentation.yml Repo / template metadata

Layer 3 — extended templates (Identity, ApiGateway, Worker, …)

Pattern Description
Submodule base-template/ → same structural ideas as Layer 2; satellite build uses ExtendedHost (see v1 Source files table).
Renamed projects ConnectSoft.<Product>.* mirrors BaseTemplate slices (e.g. IdentityTemplate.Application replaces or wraps the default BaseTemplate application depending on template).
MSBuild profile Root Directory.Build.props imports ConnectSoft.TemplateRepositoryDirectory.Build.props → sets post-import that turns off subsets of AuthoringMode for Host only (or Worker minimal for both paths).
Solution file Root ConnectSoft.*Template.slnx usually includes subset of base-template projects (often ApplicationModel + core) plus all Layer 3 projects; full BaseTemplate test projects may still live under base-template/tests in the submodule.

MSBuild feature matrix (split rows)

Values: Y = on, N = off. Rows reflect Directory.Build.props AuthoringMode plus Layer 3 build/*.props overrides.

HTTP API surface, documentation UX, transport polish

Feature (MSBuild / symbol) BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
Swagger (Swagger) Y Y Y Y Y Y Y Y Y Y Y Y
Scalar (Scalar) Y Y Y Y Y Y Y Y Y Y Y Y
CORS (CORS) Y Y Y Y Y Y Y Y Y Y Y Y
Rate limiting (RateLimiting) Y Y Y Y Y Y Y Y Y Y Y Y
Request timeout (RequestTimeout) Y Y Y Y Y Y Y Y Y Y Y Y
Response compression (Compression) Y Y Y Y Y Y Y Y Y Y Y Y

Health

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
ASP.NET health checks (HealthCheck) Y Y Y Y Y Y Y Y Y Y Y Y
Health Checks UI (HealthCheckUI) Y Y Y Y Y Y Y Y Y Y Y Y
Health UI: in-memory storage (UseInMemoryHealthCheckUIStorageProvider) Y Y Y Y Y Y Y Y Y Y Y Y
Health UI: SQL Server storage (UseSqlServerHealthCheckUIStorageProvider) Y Y Y Y Y Y Y Y Y Y Y Y
Publish to Seq (UseSeqAsHealthChecksPublisher) Y Y Y Y Y Y Y Y Y Y Y Y
Publish to Application Insights (UseApplicationInsightsAsHealthChecksPublisher) Y Y Y Y Y Y Y Y Y Y Y Y

Logging

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
Serilog (Serilog) Y Y Y Y Y Y Y Y Y Y Y Y
Log4Net (Log4Net) Y Y Y N Y N Y N N Y N Y

Observability backends and exporters (MSBuild switches)

These flags drive package references and configuration templates in BaseTemplate; they do not remove the core OpenTelemetry packages by themselves in minimal hosts.

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
OpenTelemetry (OpenTelemetry) Y Y Y Y Y Y Y Y Y Y Y Y
OTel: collector (UseOtelCollector) Y Y Y Y Y Y Y Y Y Y Y Y
OTel: direct export (UseDirectExport) Y Y Y Y Y Y Y Y Y Y Y Y
Backend: ELK (UseElkStack) Y Y Y Y Y Y Y Y Y Y Y Y
Backend: Prometheus + Grafana (UsePrometheusGrafana) Y Y Y Y Y Y Y Y Y Y Y Y
Backend: Seq (UseSeqBackend) Y Y Y Y Y Y Y Y Y Y Y Y
Backend: Azure Monitor (UseAzureMonitorBackend) Y Y Y Y Y Y Y Y Y Y Y Y
Backend: Application Insights (UseApplicationInsightsBackend) Y Y Y Y Y Y Y Y Y Y Y Y
Backend: Jaeger (UseJaegerBackend) Y Y Y Y Y Y Y Y Y Y Y Y
Application Insights (SDK / app) (UseApplicationInsights) Y Y Y Y Y Y Y Y Y Y Y Y
Resource monitoring (ResourceMonitoring) Y Y Y Y Y Y Y Y Y Y Y Y

HTTP request latency (ConnectSoft.Extensions.Telemetry)

Not an MSBuild toggle: ConnectSoft.Extensions.Telemetry is referenced from ConnectSoft.BaseTemplate.ApplicationModel (and Layer 3 host Application / ApplicationModel projects) for HTTP request latency export. Registration flows through MicroserviceRegistrationBase: AddMicroserviceLatencyTelemetryCollection / UseMicroserviceLatencyTelemetryCollection, which delegate to AddConnectSoftRequestLatencyTelemetry / UseConnectSoftRequestLatencyTelemetry. Configuration section ConnectSoftLatencyTelemetry is validated at startup (strict binding). See Latency telemetry and submodule base-template/docs/Latency Monitoring.md.

Concern BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
ConnectSoft.Extensions.Telemetry on ApplicationModel + Application (HTTP-capable hosts) Y Y Y Y Y Y Y Y Y Y Y Y

Configuration, feature flags, compliance (packages tied to symbols)

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
Feature flags (FeatureFlags) Y Y Y Y Y Y Y Y Y Y Y Y
Azure App Configuration: feature flags provider (UseAzureAppConfigurationAsFeatureFlagsProvider) Y Y Y Y Y Y Y Y Y Y Y Y
Azure App Configuration: extra configuration (UseAzureAppConfigurationAsAdditionalConfigurationProvider) Y Y Y Y Y Y Y Y Y Y Y Y

ConnectSoft.Extensions.Compliance + redaction packages in ApplicationModel are tied to these global patterns; hosts do not generally turn off Compliance with a single Use* flag in the minimal fragments (still compiled via ApplicationModel).

Caching

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
Distributed cache: Redis (DistributedCacheRedis) Y Y Y Y Y Y Y Y Y Y Y Y
Distributed cache: memory (DistributedCacheInMemory) Y Y Y Y Y Y Y Y Y Y Y Y
Distributed cache: none (DistributedCacheNone) N N N N N N N N N N N N

Persistence and data access

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
NHibernate (UseNHibernate) Y Y Y Y Y N Y Y N Y Y Y
NHibernate 2nd-level cache: Redis (UseRedisAsNHibernateSecondLevelCache) Y Y Y Y Y N Y Y N Y Y Y
SQL Server dialect (UseSqlServerNHibernateDialect) Y Y Y Y Y N Y Y N Y Y Y
PostgreSQL dialect (UsePostgreSQLNHibernateDialect) Y Y Y Y Y N Y Y N Y Y Y
MySQL dialect (UseMySqlNHibernateDialect) Y Y Y Y Y N Y Y N Y Y Y
MongoDB (UseMongoDb) Y Y Y N Y N Y N N Y N Y
Migrations (Migrations) Y Y Y Y Y N Y Y N Y Y Y

Messaging

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
NServiceBus (UseNServiceBus) Y Y Y Y Y N Y Y Y Y Y Y
NServiceBus SQL persistence (UseNServiceBusSQLPersistence) Y Y Y Y Y N Y Y Y Y Y Y
NServiceBus Mongo persistence (UseNServiceBusMongoDBPersistence) Y Y Y Y Y N Y Y Y Y Y Y
NServiceBus Cosmos persistence (UseNServiceBusCosmosDBPersistence) Y Y Y Y Y N Y Y Y Y Y Y
NServiceBus SQL transport (UseNServiceBusSqlServerTransport) Y Y Y Y Y N Y Y Y Y Y Y
NServiceBus RabbitMQ transport (UseNServiceBusRabbitMQTransport) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit (UseMassTransit) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit NHibernate persistence (UseMassTransitNHibernatePersistence) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit Mongo persistence (UseMassTransitMongoDBPersistence) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit Cosmos persistence (UseMassTransitCosmosDBPersistence) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit Dapper persistence (UseMassTransitDapperPersistence) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit SQL transport (UseMassTransitSqlServerTransport) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit RabbitMQ transport (UseMassTransitRabbitMQTransport) Y Y Y Y Y N Y Y Y Y Y Y
MassTransit Azure Service Bus transport (UseMassTransitAzureServiceBusTransport) Y Y Y Y Y N Y Y Y Y Y Y
Messaging graph disabled (MessagingModelTypeNone) N N N N N Y N N N N N N

Actors and distributed runtime

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
Orleans (UseOrleans) Y Y Y Y Y N Y Y N N Y Y
Orleans ADO grain persistence (UseOrleansAdoNetGrainPersistence) Y Y Y Y Y N Y Y N N Y Y
Orleans Azure blob grain persistence (UseOrleansAzureBlobStorageGrainPersistence) Y Y Y Y Y N Y Y N N Y Y
Dapr actors (UseDapr) Y Y Y N Y N Y N Y Y Y Y
Akka actors (UseAkka) Y Y Y N Y N Y N Y Y Y Y

HC-S: Orleans forced off for base-template/ paths (HealthChecksSatelliteOrleansOff.props) to avoid tooling conflicts (see that file’s comment).

Service models (HTTP / RPC / real-time / serverless)

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
REST (UseRestApi) Y Y Y Y Y Y Y Y Y Y Y Y
gRPC contracts (UseGrpc) Y Y Y Y Y Y Y Y Y Y Y Y
gRPC Kestrel hosting (UseGrpcHosting) Y Y Y Y Y Y Y Y N Y Y Y
GraphQL (UseGraphQL) Y Y Y N Y N Y N Y Y Y Y
CoreWCF (UseCoreWCF) — SOAP, fault contracts Y Y Y N Y N Y N Y Y Y Y
SignalR (UseSignalR) Y Y Y N Y Y Y N Y Y Y Y
SignalR: no backplane (UseNoneSignalRBackplane) Y Y Y Y Y Y Y Y Y Y Y Y
SignalR: Redis backplane (UseRedisSignalRBackplane) Y Y Y Y Y Y Y Y Y Y Y Y
Azure Functions surface (UseAzureFunction) Y Y Y N Y N Y N N Y Y Y
Service Fabric surface (UseServiceFabric) Y Y Y N Y N Y N Y Y Y Y

Schedulers, audit, automation

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
HangFire (UseHangFire) Y Y Y N Y N Y Y N Y Y Y
Audit.Net (UseAuditNet) Y Y Y Y Y N Y Y Y Y Y Y
MCP (UseMCP) Y Y Y Y Y N Y Y Y Y Y Y

Microsoft.Extensions.AI, Agent Framework, vectors, LLM flags

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
Microsoft.Extensions.AI (UseMicrosoftExtensionsAI) Y Y Y N Y N Y N N Y N Y
Embeddings (UseMicrosoftExtensionsAIEmbedding) Y Y Y N Y N Y N N Y N Y
OpenAI provider (UseMicrosoftExtensionsAIOpenAIProvider) Y Y Y N Y N Y N N Y N Y
Azure OpenAI provider (UseMicrosoftExtensionsAIAzureOpenAIProvider) Y Y Y N Y N Y N N Y N Y
Azure AI Inference provider (UseMicrosoftExtensionsAIAzureAIInferenceProvider) Y Y Y N Y N Y N N Y N Y
Ollama provider (UseMicrosoftExtensionsAIOllamaProvider) Y Y Y N Y N Y N N Y N Y
Embedding providers (OpenAI / Azure / Ollama / Inference) Y Y Y N Y N Y N N Y N Y
AI evaluation (UseMicrosoftExtensionsAIEvaluation) Y Y Y N Y N Y N N Y N Y
Microsoft Agent Framework (UseMicrosoftAgentFramework) Y Y Y N Y N Y N N Y N Y
Agent Framework OpenAI (UseMicrosoftAgentFrameworkOpenAI) Y Y Y N Y N Y N N Y N Y
Agent Framework Azure AI (UseMicrosoftAgentFrameworkAzureAI) Y Y Y N Y N Y N N Y N Y
Agent Framework workflows (UseMicrosoftAgentFrameworkWorkflows) Y Y Y N Y N Y N N Y N Y
Semantic Kernel Azure AI Search connector (UseSemanticKernelAzureAISearchConnector) Y Y Y N Y N Y N N Y N Y
Semantic Kernel SQL Server connector (UseSemanticKernelSqlServerConnector) Y Y Y N Y N Y N N Y N Y
Vector store (any) (UseVectorStore) Y Y Y N Y N Y N N Y N Y
Vector: in-memory (UseVectorStoreInMemory) Y Y Y N Y N Y N N Y N Y
Vector: Azure AI Search (UseVectorStoreAzureAISearch) Y Y Y N Y N Y N N Y N Y
Vector: SQL Server (UseVectorStoreSqlServer) Y Y Y N Y N Y N N Y N Y
Vector: PGVector (UseVectorStorePgVector) Y Y Y N Y N Y N N Y N Y
Vector: Qdrant (UseVectorStoreQdrant) Y Y Y N Y N Y N N Y N Y
Vector ingestion (UseVectorIngestion, chunkers, host) Y Y Y N Y N Y N N Y N Y
OpenAI / Azure OpenAI / Ollama (legacy flags) (UseOpenAI, UseAzureOpenAI, UseOllama) Y Y Y N Y N Y N N Y N Y
Agent RAG / skills (UseAgentFrameworkRag, UseAgentSkills) Y Y Y N Y N Y N N Y N Y

BaseTemplate sample “GenerateFeature*” demos

Feature BT MS Bot Id-H Id-S GW-H GW-S Wr HC-H HC-S AS-H AS-S
GenerateFeatureA (+ use cases) Y Y Y N Y Y Y N Y Y Y Y
GenerateFeatureB (+ use cases) Y Y Y N Y Y Y N Y Y Y Y

Repository infrastructure (not the same as MSBuild Use*)

These rows describe repo layout / CI, not the table above. Y = present at repository root (or default product path) in the workspace snapshot.

Capability BT MS Bot Identity ApiGateway Worker HealthChecks AuthServer
Docker MSBuild flag (Authoring) Y Y Y Y Y Y Y Y
Docker Compose .dcproj + compose YAML in root solution Y Y Y Y Y Y Y Y
Kubernetes manifests in root solution (Deployment/kubernetes) Y Y Y Y Y Y Y Y
mkdocs.yml at repo root Y Y N Y Y Y Y Y
azure-pipelines-documentation.yml at repo root (MkDocs CI) Y Y N Y Y Y Y N
Submodule carries BaseTemplate docs + base-template/azure-pipelines-documentation.yml Y Y Y Y Y Y Y

Bot: MkDocs config lives under base-template/mkdocs.yml (submodule), not at the Bot repo root.


Microsoft Bot Framework (exclusive extended template)

Only ConnectSoft.MicrosoftBotFrameworkTemplate adds the Bot Builder stack and BotModel project reference (see Directory.Packages.propsUseMicrosoftBotBuilder and ConnectSoft.MicrosoftBotFrameworkTemplate.ApplicationModel.csproj).

Representative additional packages (not in other extended templates’ ApplicationModel):

Capability Bot template All other extended templates in this matrix
Microsoft.Bot.Builder Y
Microsoft.Bot.Builder.Integration.AspNet.Core Y
Microsoft.Bot.Builder.Dialogs Y
Bot Builder Application Insights (when UseApplicationInsights) Y
ConnectSoft.*.BotModel project Y

Testing

Layer 2 — ConnectSoft.BaseTemplate

Type Project (typical path)
Unit tests/ConnectSoft.BaseTemplate.UnitTests
Architecture tests/ConnectSoft.BaseTemplate.ArchitectureTests
Acceptance tests/ConnectSoft.BaseTemplate.AcceptanceTests

Layer 3 — extended templates (root .slnx)

Each extended template renames test projects to ConnectSoft.<Product>.*Tests and includes Acceptance, Architecture, and Unit where present. The submodule still contains BaseTemplate’s own three test projects for satellite builds.

Template Unit Architecture Acceptance Notes
Microservice Y Y Y
Identity Y Y Y
ApiGateway Y Y Y
Worker Y Y Y
Health Checks Y Y Y
Authorization Server Y Y Y
Microsoft Bot Framework Y Y Y Acceptance path may be top-level folder per .slnx

Test technology: projects target .NET + MSTest / Microsoft Testing Platform (see Directory.Build.props TestingPlatformDotnetTestSupport for test projects). Acceptance tests typically drive WebApplicationFactory / integration scenarios; architecture tests enforce solution rules (see each repo’s ArchitectureTests).


ApplicationModel — typically always-on libraries (BaseTemplate)

The following are referenced from ConnectSoft.BaseTemplate.ApplicationModel.csproj without Condition on the item (or with conditions that stay true in full Authoring). Minimal hosts still compile ApplicationModel; they rely on DefineConstants / Use* overrides so optional code files are excluded — the packages may remain listed until you trim the csproj.

Use this as a catalog of cross-cutting building blocks, not as duplicate Y/N matrix rows:

Concern Packages / wiring (examples)
Validation FluentValidation, ConnectSoft.Extensions.Validation.FluentValidation
HTTP / errors Microsoft.AspNetCore.HeaderPropagation, Microsoft.AspNetCore.Diagnostics.Middleware, Hellang.Middleware.ProblemDetails, ConnectSoft.AspNetCore.Http, ConnectSoft.Net.Http
Options Microsoft.Extensions.Options, Microsoft.Extensions.Options.DataAnnotations, ConnectSoft.Extensions.Options; project ref ConnectSoft.BaseTemplate.Options
Localization Microsoft.Extensions.Localization*, ConnectSoft.Extensions.Localization
Metrics / telemetry abstractions ConnectSoft.Extensions.Diagnostics.Metrics, ConnectSoft.Extensions.Telemetry (HTTP request latency export: logs + System.Diagnostics.Metrics + optional Activity enrichment), Microsoft.Extensions.Telemetry*; project ref ConnectSoft.BaseTemplate.Metrics
Service discovery Microsoft.Extensions.ServiceDiscovery* packages, ConnectSoft.Extensions.ServiceDiscovery
Compliance / redaction Microsoft.Extensions.Compliance*, ConnectSoft.Extensions.Compliance
Security headers / web security ConnectSoft.Extensions.WebSecurity, NetEscapades.AspNetCore.SecurityHeaders
Mapping AutoMapper
DI / resilience Microsoft.Extensions.DependencyInjection.AutoActivation, Polly, Scrutor
Domain / app model ConnectSoft.Extensions.ApplicationModel, ConnectSoft.Extensions.DomainModel*, ConnectSoft.Extensions.ServiceModel, ConnectSoft.Extensions
Transactions ConnectSoft.Extensions.Transactions
Identity protocols Microsoft.IdentityModel.*, System.IdentityModel.Tokens.Jwt
WCF primitives (for CoreWCF / faults) System.ServiceModel.Primitives (present even when UseCoreWCF is false — host may strip related projects)
Database clients (baseline) Microsoft.Data.SqlClient, MySql.Data, Npgsql, System.Data.Odbc

CORS is enabled via MSBuild CORS and middleware packages; Swagger / Scalar via their Use* flags and Swashbuckle / Scalar packages.


Source files (for updates)

Repo Entry props Host / satellite fragments
BaseTemplate Authoring only; optional fallback ../build/DisableMicrosoftExtensionsStackForMinimalHost.props if present beside submodule in a host repo.
Microservice Empty ConnectSoft.TemplateRepositoryDirectory.Build.props
Bot build/MinimalHostNoOp.props
Identity build/DisableMicrosoftExtensionsStackForMinimalHost.props IdentityHost.props; satellite: ExtendedHost.BaseTemplateSatelliteDefaults.props
ApiGateway same entry GatewayHost.props + .targets
Worker build/DisableMicrosoftExtensionsStackForWorkerHost.props WorkerHost.Minimal.props (always); satellite also ExtendedHost
Health Checks same entry as Identity HealthChecksHost.props; satellite: ExtendedHost + HealthChecksSatelliteOrleansOff.props
Auth Server same entry as Identity AuthorizationServerHost.props; satellite: ExtendedHost

Other template repositories (outside this MSBuild matrix)

Blazor, Maui, Library, Platform, AISkills, ConnectSoft.Templates*, etc. use different solution shapes and props. Compare their Directory.Build.props and packages directly.


Caveats

  1. DefineConstants manipulation: a property may read N while a package reference still exists — runtime behavior follows compiled #if blocks and host trimming.
  2. Submodule revision: base-template/ content tracks ConnectSoft.BaseTemplate at a pinned commit; this matrix assumes aligned props with the Layer 2 repo.
  3. Local-only file: may remain untracked; regenerate after changing any build/Disable*.props or ExtendedHost*.props.