diff --git a/Aspire.sln b/Aspire.sln
index 52a3a75f81..a3109bb4e0 100644
--- a/Aspire.sln
+++ b/Aspire.sln
@@ -631,6 +631,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DaprServiceC", "playground\
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dashboard", "Dashboard", "{830F7CA9-8E51-4D62-832F-91F53F85B7AE}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.Client", "src\Components\Aspire.Client\Aspire.Client.csproj", "{9551D5BD-F7A8-4537-98CC-56483F8A0A6B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1653,6 +1655,10 @@ Global
{B26653B9-439E-4850-A7F8-43C6E5121952}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B26653B9-439E-4850-A7F8-43C6E5121952}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B26653B9-439E-4850-A7F8-43C6E5121952}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9551D5BD-F7A8-4537-98CC-56483F8A0A6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9551D5BD-F7A8-4537-98CC-56483F8A0A6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9551D5BD-F7A8-4537-98CC-56483F8A0A6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9551D5BD-F7A8-4537-98CC-56483F8A0A6B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1956,6 +1962,7 @@ Global
{042DD8C6-A26C-4B06-80A1-FE7F8659C5BC} = {B7345F72-712F-436C-AE18-CAF7CDD4A990}
{B26653B9-439E-4850-A7F8-43C6E5121952} = {57A42144-739E-49A7-BADB-BB8F5F20FA17}
{830F7CA9-8E51-4D62-832F-91F53F85B7AE} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60}
+ {9551D5BD-F7A8-4537-98CC-56483F8A0A6B} = {27381127-6C45-4B4C-8F18-41FF48DFE4B2}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6DCEDFEC-988E-4CB3-B45B-191EB5086E0C}
diff --git a/src/Components/Aspire.Azure.AI.OpenAI/Aspire.Azure.AI.OpenAI.csproj b/src/Components/Aspire.Azure.AI.OpenAI/Aspire.Azure.AI.OpenAI.csproj
index 6a22fde1c9..53ba82e1ea 100644
--- a/src/Components/Aspire.Azure.AI.OpenAI/Aspire.Azure.AI.OpenAI.csproj
+++ b/src/Components/Aspire.Azure.AI.OpenAI/Aspire.Azure.AI.OpenAI.csproj
@@ -17,8 +17,6 @@
-
-
@@ -31,6 +29,7 @@
+
diff --git a/src/Components/Aspire.Azure.Data.Tables/Aspire.Azure.Data.Tables.csproj b/src/Components/Aspire.Azure.Data.Tables/Aspire.Azure.Data.Tables.csproj
index aa710f182b..01e02978b5 100644
--- a/src/Components/Aspire.Azure.Data.Tables/Aspire.Azure.Data.Tables.csproj
+++ b/src/Components/Aspire.Azure.Data.Tables/Aspire.Azure.Data.Tables.csproj
@@ -15,8 +15,6 @@
-
-
@@ -29,4 +27,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Messaging.EventHubs/Aspire.Azure.Messaging.EventHubs.csproj b/src/Components/Aspire.Azure.Messaging.EventHubs/Aspire.Azure.Messaging.EventHubs.csproj
index 7d8f6a4ebc..dfc0bf83f4 100644
--- a/src/Components/Aspire.Azure.Messaging.EventHubs/Aspire.Azure.Messaging.EventHubs.csproj
+++ b/src/Components/Aspire.Azure.Messaging.EventHubs/Aspire.Azure.Messaging.EventHubs.csproj
@@ -17,8 +17,6 @@
-
-
@@ -29,5 +27,9 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Messaging.ServiceBus/Aspire.Azure.Messaging.ServiceBus.csproj b/src/Components/Aspire.Azure.Messaging.ServiceBus/Aspire.Azure.Messaging.ServiceBus.csproj
index dfadc7fbff..549c2d4dc9 100644
--- a/src/Components/Aspire.Azure.Messaging.ServiceBus/Aspire.Azure.Messaging.ServiceBus.csproj
+++ b/src/Components/Aspire.Azure.Messaging.ServiceBus/Aspire.Azure.Messaging.ServiceBus.csproj
@@ -15,8 +15,6 @@
-
-
@@ -28,5 +26,9 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Messaging.WebPubSub/Aspire.Azure.Messaging.WebPubSub.csproj b/src/Components/Aspire.Azure.Messaging.WebPubSub/Aspire.Azure.Messaging.WebPubSub.csproj
index 526f00d132..101077801f 100644
--- a/src/Components/Aspire.Azure.Messaging.WebPubSub/Aspire.Azure.Messaging.WebPubSub.csproj
+++ b/src/Components/Aspire.Azure.Messaging.WebPubSub/Aspire.Azure.Messaging.WebPubSub.csproj
@@ -15,8 +15,6 @@
-
-
@@ -27,5 +25,9 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Search.Documents/Aspire.Azure.Search.Documents.csproj b/src/Components/Aspire.Azure.Search.Documents/Aspire.Azure.Search.Documents.csproj
index 8da9dd3826..b458261bcf 100644
--- a/src/Components/Aspire.Azure.Search.Documents/Aspire.Azure.Search.Documents.csproj
+++ b/src/Components/Aspire.Azure.Search.Documents/Aspire.Azure.Search.Documents.csproj
@@ -15,8 +15,6 @@
-
-
@@ -28,4 +26,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Security.KeyVault/Aspire.Azure.Security.KeyVault.csproj b/src/Components/Aspire.Azure.Security.KeyVault/Aspire.Azure.Security.KeyVault.csproj
index 2458aea0eb..260dd96520 100644
--- a/src/Components/Aspire.Azure.Security.KeyVault/Aspire.Azure.Security.KeyVault.csproj
+++ b/src/Components/Aspire.Azure.Security.KeyVault/Aspire.Azure.Security.KeyVault.csproj
@@ -15,8 +15,6 @@
-
-
@@ -30,4 +28,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Storage.Blobs/Aspire.Azure.Storage.Blobs.csproj b/src/Components/Aspire.Azure.Storage.Blobs/Aspire.Azure.Storage.Blobs.csproj
index e104594e2e..6daa307aba 100644
--- a/src/Components/Aspire.Azure.Storage.Blobs/Aspire.Azure.Storage.Blobs.csproj
+++ b/src/Components/Aspire.Azure.Storage.Blobs/Aspire.Azure.Storage.Blobs.csproj
@@ -15,8 +15,6 @@
-
-
@@ -29,4 +27,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Azure.Storage.Queues/Aspire.Azure.Storage.Queues.csproj b/src/Components/Aspire.Azure.Storage.Queues/Aspire.Azure.Storage.Queues.csproj
index 0d49fad1a4..afacef0856 100644
--- a/src/Components/Aspire.Azure.Storage.Queues/Aspire.Azure.Storage.Queues.csproj
+++ b/src/Components/Aspire.Azure.Storage.Queues/Aspire.Azure.Storage.Queues.csproj
@@ -15,8 +15,6 @@
-
-
@@ -29,4 +27,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Client/Aspire.Client.csproj b/src/Components/Aspire.Client/Aspire.Client.csproj
new file mode 100644
index 0000000000..0e34e630f8
--- /dev/null
+++ b/src/Components/Aspire.Client/Aspire.Client.csproj
@@ -0,0 +1,14 @@
+
+
+ $(DefaultTargetFramework)
+ true
+ aspire
+ A package containing utilities for building Aspire Client integrations.
+ $(SharedDir)As-ire_icon_256.png
+
+
+
+
+
+
+
diff --git a/src/Components/Aspire.Client/ConfigurationSchemaAttributes.cs b/src/Components/Aspire.Client/ConfigurationSchemaAttributes.cs
new file mode 100644
index 0000000000..b4424cbe37
--- /dev/null
+++ b/src/Components/Aspire.Client/ConfigurationSchemaAttributes.cs
@@ -0,0 +1,33 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Aspire;
+
+///
+/// Attribute used to automatically generate a JSON schema for a component's configuration.
+///
+///
+/// Initializes a new instance of the class.
+///
+/// The path corresponding to which config section binds to.
+/// The type that is bound to the configuration. This type will be walked and generate a JSON schema for all the properties.
+/// (optional) The config sections to exclude from the ConfigurationSchema. This is useful if there are properties you don't want to publicize in the config schema.
+[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
+public sealed class ConfigurationSchemaAttribute(string path, Type type, string[]? exclusionPaths = null) : Attribute
+{
+
+ ///
+ /// The path corresponding to which config section binds to.
+ ///
+ public string Path { get; } = path;
+
+ ///
+ /// The type that is bound to the configuration. This type will be walked and generate a JSON schema for all the properties.
+ ///
+ public Type Type { get; } = type;
+
+ ///
+ /// (optional) The config sections to exclude from the ConfigurationSchema. This is useful if there are properties you don't want to publicize in the config schema.
+ ///
+ public string[]? ExclusionPaths { get; } = exclusionPaths;
+}
diff --git a/src/Components/Common/ConnectionStringValidation.cs b/src/Components/Aspire.Client/ConnectionStringValidation.cs
similarity index 56%
rename from src/Components/Common/ConnectionStringValidation.cs
rename to src/Components/Aspire.Client/ConnectionStringValidation.cs
index 23585611dd..737bf1a205 100644
--- a/src/Components/Common/ConnectionStringValidation.cs
+++ b/src/Components/Aspire.Client/ConnectionStringValidation.cs
@@ -3,8 +3,20 @@
namespace Aspire;
-internal static class ConnectionStringValidation
+///
+/// Provides a method to validate a connection string.
+///
+public static class ConnectionStringValidation
{
+ ///
+ /// Validates the provided connection string.
+ ///
+ /// The connection string to validate.
+ /// The name of the connection.
+ /// The default configuration section name.
+ /// The type-specific configuration section name (optional).
+ /// Indicates if it is EF design time (optional).
+ /// Thrown when the connection string is missing and it is not EF design time.
public static void ValidateConnectionString(string? connectionString, string connectionName, string defaultConfigSectionName, string? typeSpecificSectionName = null, bool isEfDesignTime = false)
{
if (string.IsNullOrWhiteSpace(connectionString) && !isEfDesignTime)
diff --git a/src/Components/Common/HealthChecksExtensions.cs b/src/Components/Aspire.Client/HealthChecksExtensions.cs
similarity index 68%
rename from src/Components/Common/HealthChecksExtensions.cs
rename to src/Components/Aspire.Client/HealthChecksExtensions.cs
index 29e4762df2..5cc96a11f4 100644
--- a/src/Components/Common/HealthChecksExtensions.cs
+++ b/src/Components/Aspire.Client/HealthChecksExtensions.cs
@@ -7,11 +7,16 @@
namespace Aspire;
-internal static class HealthChecksExtensions
+///
+/// Provides extension methods for adding health checks to the IHostApplicationBuilder.
+///
+public static class HealthChecksExtensions
{
///
/// Adds a HealthCheckRegistration if one hasn't already been added to the builder.
///
+ /// The IHostApplicationBuilder to add the health check to.
+ /// The HealthCheckRegistration to add.
public static void TryAddHealthCheck(this IHostApplicationBuilder builder, HealthCheckRegistration healthCheckRegistration)
{
builder.TryAddHealthCheck(healthCheckRegistration.Name, hcBuilder => hcBuilder.Add(healthCheckRegistration));
@@ -20,6 +25,9 @@ public static void TryAddHealthCheck(this IHostApplicationBuilder builder, Healt
///
/// Invokes the action if the given hasn't already been added to the builder.
///
+ /// The IHostApplicationBuilder to add the health check to.
+ /// The name of the health check.
+ /// The action to add the health check.
public static void TryAddHealthCheck(this IHostApplicationBuilder builder, string name, Action addHealthCheck)
{
var healthCheckKey = $"Aspire.HealthChecks.{name}";
diff --git a/src/Components/Aspire.Client/LoggingCategoriesAttribute.cs b/src/Components/Aspire.Client/LoggingCategoriesAttribute.cs
new file mode 100644
index 0000000000..95728ccc65
--- /dev/null
+++ b/src/Components/Aspire.Client/LoggingCategoriesAttribute.cs
@@ -0,0 +1,21 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Aspire;
+
+///
+/// Provides information to describe the logging categories produced by a component.
+///
+///
+/// Initializes a new instance of the class.
+///
+/// The list of log categories produced by the component. These categories will show up under the Logging:LogLevel section in appsettings.json.
+[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
+public sealed class LoggingCategoriesAttribute(params string[] categories) : Attribute
+{
+
+ ///
+ /// The list of log categories produced by the component. These categories will show up under the Logging:LogLevel section in appsettings.json.
+ ///
+ public string[] Categories { get; set; } = categories;
+}
diff --git a/src/Components/Aspire.Client/PublicAPI.Shipped.txt b/src/Components/Aspire.Client/PublicAPI.Shipped.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/Components/Aspire.Client/PublicAPI.Unshipped.txt b/src/Components/Aspire.Client/PublicAPI.Unshipped.txt
new file mode 100644
index 0000000000..bd5b339e53
--- /dev/null
+++ b/src/Components/Aspire.Client/PublicAPI.Unshipped.txt
@@ -0,0 +1,15 @@
+#nullable enable
+Aspire.ConfigurationSchemaAttribute
+Aspire.ConfigurationSchemaAttribute.ConfigurationSchemaAttribute(string! path, System.Type! type, string![]? exclusionPaths = null) -> void
+Aspire.ConfigurationSchemaAttribute.ExclusionPaths.get -> string![]?
+Aspire.ConfigurationSchemaAttribute.Path.get -> string!
+Aspire.ConfigurationSchemaAttribute.Type.get -> System.Type!
+Aspire.ConnectionStringValidation
+Aspire.HealthChecksExtensions
+Aspire.LoggingCategoriesAttribute
+Aspire.LoggingCategoriesAttribute.Categories.get -> string![]!
+Aspire.LoggingCategoriesAttribute.Categories.set -> void
+Aspire.LoggingCategoriesAttribute.LoggingCategoriesAttribute(params string![]! categories) -> void
+static Aspire.ConnectionStringValidation.ValidateConnectionString(string? connectionString, string! connectionName, string! defaultConfigSectionName, string? typeSpecificSectionName = null, bool isEfDesignTime = false) -> void
+static Aspire.HealthChecksExtensions.TryAddHealthCheck(this Microsoft.Extensions.Hosting.IHostApplicationBuilder! builder, Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckRegistration! healthCheckRegistration) -> void
+static Aspire.HealthChecksExtensions.TryAddHealthCheck(this Microsoft.Extensions.Hosting.IHostApplicationBuilder! builder, string! name, System.Action! addHealthCheck) -> void
diff --git a/src/Components/Aspire.Client/README.md b/src/Components/Aspire.Client/README.md
new file mode 100644
index 0000000000..4e832fc199
--- /dev/null
+++ b/src/Components/Aspire.Client/README.md
@@ -0,0 +1,9 @@
+# Aspire.Client
+
+Provides a set of common services and utilities for .NET Aspire Client integration packages.
+
+This package provides no integration package-specific functionality.
+
+## Feedback & contributing
+
+https://github.com/dotnet/aspire
diff --git a/src/Components/Aspire.Confluent.Kafka/Aspire.Confluent.Kafka.csproj b/src/Components/Aspire.Confluent.Kafka/Aspire.Confluent.Kafka.csproj
index 0d150dc21a..b69934c202 100644
--- a/src/Components/Aspire.Confluent.Kafka/Aspire.Confluent.Kafka.csproj
+++ b/src/Components/Aspire.Confluent.Kafka/Aspire.Confluent.Kafka.csproj
@@ -12,10 +12,6 @@
90
-
-
-
-
@@ -24,4 +20,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Elastic.Clients.Elasticsearch/Aspire.Elastic.Clients.Elasticsearch.csproj b/src/Components/Aspire.Elastic.Clients.Elasticsearch/Aspire.Elastic.Clients.Elasticsearch.csproj
index 124ce1c8af..35c5f3e619 100644
--- a/src/Components/Aspire.Elastic.Clients.Elasticsearch/Aspire.Elastic.Clients.Elasticsearch.csproj
+++ b/src/Components/Aspire.Elastic.Clients.Elasticsearch/Aspire.Elastic.Clients.Elasticsearch.csproj
@@ -12,11 +12,6 @@
80
-
-
-
-
-
@@ -26,4 +21,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Components/Aspire.Microsoft.Azure.Cosmos/Aspire.Microsoft.Azure.Cosmos.csproj b/src/Components/Aspire.Microsoft.Azure.Cosmos/Aspire.Microsoft.Azure.Cosmos.csproj
index 74fcb5bf55..6146b4cbf4 100644
--- a/src/Components/Aspire.Microsoft.Azure.Cosmos/Aspire.Microsoft.Azure.Cosmos.csproj
+++ b/src/Components/Aspire.Microsoft.Azure.Cosmos/Aspire.Microsoft.Azure.Cosmos.csproj
@@ -14,7 +14,6 @@
-
diff --git a/src/Components/Aspire.Microsoft.Data.SqlClient/Aspire.Microsoft.Data.SqlClient.csproj b/src/Components/Aspire.Microsoft.Data.SqlClient/Aspire.Microsoft.Data.SqlClient.csproj
index 519c915b5e..4312ba7321 100644
--- a/src/Components/Aspire.Microsoft.Data.SqlClient/Aspire.Microsoft.Data.SqlClient.csproj
+++ b/src/Components/Aspire.Microsoft.Data.SqlClient/Aspire.Microsoft.Data.SqlClient.csproj
@@ -13,12 +13,6 @@
41
-
-
-
-
-
-
@@ -32,4 +26,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Microsoft.EntityFrameworkCore.Cosmos/Aspire.Microsoft.EntityFrameworkCore.Cosmos.csproj b/src/Components/Aspire.Microsoft.EntityFrameworkCore.Cosmos/Aspire.Microsoft.EntityFrameworkCore.Cosmos.csproj
index bc103e16bc..03b926cec2 100644
--- a/src/Components/Aspire.Microsoft.EntityFrameworkCore.Cosmos/Aspire.Microsoft.EntityFrameworkCore.Cosmos.csproj
+++ b/src/Components/Aspire.Microsoft.EntityFrameworkCore.Cosmos/Aspire.Microsoft.EntityFrameworkCore.Cosmos.csproj
@@ -14,7 +14,6 @@
-
diff --git a/src/Components/Aspire.Microsoft.EntityFrameworkCore.SqlServer/Aspire.Microsoft.EntityFrameworkCore.SqlServer.csproj b/src/Components/Aspire.Microsoft.EntityFrameworkCore.SqlServer/Aspire.Microsoft.EntityFrameworkCore.SqlServer.csproj
index f1d2c0ded9..9def2fea5f 100644
--- a/src/Components/Aspire.Microsoft.EntityFrameworkCore.SqlServer/Aspire.Microsoft.EntityFrameworkCore.SqlServer.csproj
+++ b/src/Components/Aspire.Microsoft.EntityFrameworkCore.SqlServer/Aspire.Microsoft.EntityFrameworkCore.SqlServer.csproj
@@ -14,9 +14,6 @@
-
-
-
@@ -31,5 +28,9 @@
+
+
+
+
diff --git a/src/Components/Aspire.Milvus.Client/Aspire.Milvus.Client.csproj b/src/Components/Aspire.Milvus.Client/Aspire.Milvus.Client.csproj
index fdc34a0090..c4e5783e43 100644
--- a/src/Components/Aspire.Milvus.Client/Aspire.Milvus.Client.csproj
+++ b/src/Components/Aspire.Milvus.Client/Aspire.Milvus.Client.csproj
@@ -14,11 +14,6 @@
80
-
-
-
-
-
@@ -26,4 +21,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.MongoDB.Driver/Aspire.MongoDB.Driver.csproj b/src/Components/Aspire.MongoDB.Driver/Aspire.MongoDB.Driver.csproj
index 351b1508c3..222f37686c 100644
--- a/src/Components/Aspire.MongoDB.Driver/Aspire.MongoDB.Driver.csproj
+++ b/src/Components/Aspire.MongoDB.Driver/Aspire.MongoDB.Driver.csproj
@@ -13,12 +13,6 @@
86
-
-
-
-
-
-
@@ -29,5 +23,9 @@
+
+
+
+
diff --git a/src/Components/Aspire.MySqlConnector/Aspire.MySqlConnector.csproj b/src/Components/Aspire.MySqlConnector/Aspire.MySqlConnector.csproj
index ed436ee025..fb92ee77e2 100644
--- a/src/Components/Aspire.MySqlConnector/Aspire.MySqlConnector.csproj
+++ b/src/Components/Aspire.MySqlConnector/Aspire.MySqlConnector.csproj
@@ -12,12 +12,6 @@
83
-
-
-
-
-
-
@@ -27,4 +21,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.NATS.Net/Aspire.NATS.Net.csproj b/src/Components/Aspire.NATS.Net/Aspire.NATS.Net.csproj
index a4eef5442f..01e191bf4a 100644
--- a/src/Components/Aspire.NATS.Net/Aspire.NATS.Net.csproj
+++ b/src/Components/Aspire.NATS.Net/Aspire.NATS.Net.csproj
@@ -12,11 +12,6 @@
75
-
-
-
-
-
@@ -25,4 +20,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.csproj b/src/Components/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.csproj
index 56cb268b65..b04c8d6ca7 100644
--- a/src/Components/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.csproj
+++ b/src/Components/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.csproj
@@ -16,9 +16,6 @@
-
-
-
@@ -31,5 +28,9 @@
+
+
+
+
diff --git a/src/Components/Aspire.Npgsql/Aspire.Npgsql.csproj b/src/Components/Aspire.Npgsql/Aspire.Npgsql.csproj
index 65f48ae5f5..257cf6d6f6 100644
--- a/src/Components/Aspire.Npgsql/Aspire.Npgsql.csproj
+++ b/src/Components/Aspire.Npgsql/Aspire.Npgsql.csproj
@@ -12,12 +12,6 @@
87
-
-
-
-
-
-
@@ -28,4 +22,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.OpenAI/Aspire.OpenAI.csproj b/src/Components/Aspire.OpenAI/Aspire.OpenAI.csproj
index 288b16552a..83732c1317 100644
--- a/src/Components/Aspire.OpenAI/Aspire.OpenAI.csproj
+++ b/src/Components/Aspire.OpenAI/Aspire.OpenAI.csproj
@@ -14,10 +14,6 @@
70
-
-
-
-
diff --git a/src/Components/Aspire.Oracle.EntityFrameworkCore/Aspire.Oracle.EntityFrameworkCore.csproj b/src/Components/Aspire.Oracle.EntityFrameworkCore/Aspire.Oracle.EntityFrameworkCore.csproj
index 18a646edc1..7548622283 100644
--- a/src/Components/Aspire.Oracle.EntityFrameworkCore/Aspire.Oracle.EntityFrameworkCore.csproj
+++ b/src/Components/Aspire.Oracle.EntityFrameworkCore/Aspire.Oracle.EntityFrameworkCore.csproj
@@ -12,9 +12,6 @@
-
-
-
@@ -27,4 +24,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Pomelo.EntityFrameworkCore.MySql/Aspire.Pomelo.EntityFrameworkCore.MySql.csproj b/src/Components/Aspire.Pomelo.EntityFrameworkCore.MySql/Aspire.Pomelo.EntityFrameworkCore.MySql.csproj
index 44daebd83e..6a2b1c896a 100644
--- a/src/Components/Aspire.Pomelo.EntityFrameworkCore.MySql/Aspire.Pomelo.EntityFrameworkCore.MySql.csproj
+++ b/src/Components/Aspire.Pomelo.EntityFrameworkCore.MySql/Aspire.Pomelo.EntityFrameworkCore.MySql.csproj
@@ -13,9 +13,6 @@
-
-
-
@@ -28,4 +25,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Qdrant.Client/Aspire.Qdrant.Client.csproj b/src/Components/Aspire.Qdrant.Client/Aspire.Qdrant.Client.csproj
index 5690fc0e77..8d5044e7da 100644
--- a/src/Components/Aspire.Qdrant.Client/Aspire.Qdrant.Client.csproj
+++ b/src/Components/Aspire.Qdrant.Client/Aspire.Qdrant.Client.csproj
@@ -12,16 +12,15 @@
71
-
-
-
-
-
+
+
+
+
diff --git a/src/Components/Aspire.RabbitMQ.Client/Aspire.RabbitMQ.Client.csproj b/src/Components/Aspire.RabbitMQ.Client/Aspire.RabbitMQ.Client.csproj
index 6a0377be8d..7df3b11c39 100644
--- a/src/Components/Aspire.RabbitMQ.Client/Aspire.RabbitMQ.Client.csproj
+++ b/src/Components/Aspire.RabbitMQ.Client/Aspire.RabbitMQ.Client.csproj
@@ -12,11 +12,6 @@
80
-
-
-
-
-
@@ -30,4 +25,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.Seq/Aspire.Seq.csproj b/src/Components/Aspire.Seq/Aspire.Seq.csproj
index d726b300e1..2279433397 100644
--- a/src/Components/Aspire.Seq/Aspire.Seq.csproj
+++ b/src/Components/Aspire.Seq/Aspire.Seq.csproj
@@ -12,11 +12,6 @@
55
-
-
-
-
-
@@ -24,4 +19,8 @@
+
+
+
+
diff --git a/src/Components/Aspire.StackExchange.Redis.DistributedCaching/Aspire.StackExchange.Redis.DistributedCaching.csproj b/src/Components/Aspire.StackExchange.Redis.DistributedCaching/Aspire.StackExchange.Redis.DistributedCaching.csproj
index 57e1abb4e0..f03e86d682 100644
--- a/src/Components/Aspire.StackExchange.Redis.DistributedCaching/Aspire.StackExchange.Redis.DistributedCaching.csproj
+++ b/src/Components/Aspire.StackExchange.Redis.DistributedCaching/Aspire.StackExchange.Redis.DistributedCaching.csproj
@@ -12,10 +12,6 @@
59
-
-
-
-
diff --git a/src/Components/Aspire.StackExchange.Redis.OutputCaching/Aspire.StackExchange.Redis.OutputCaching.csproj b/src/Components/Aspire.StackExchange.Redis.OutputCaching/Aspire.StackExchange.Redis.OutputCaching.csproj
index 79c6bb1d46..3581037d10 100644
--- a/src/Components/Aspire.StackExchange.Redis.OutputCaching/Aspire.StackExchange.Redis.OutputCaching.csproj
+++ b/src/Components/Aspire.StackExchange.Redis.OutputCaching/Aspire.StackExchange.Redis.OutputCaching.csproj
@@ -12,10 +12,6 @@
59
-
-
-
-
diff --git a/src/Components/Aspire.StackExchange.Redis/Aspire.StackExchange.Redis.csproj b/src/Components/Aspire.StackExchange.Redis/Aspire.StackExchange.Redis.csproj
index 7df684408d..e48d7c4d40 100644
--- a/src/Components/Aspire.StackExchange.Redis/Aspire.StackExchange.Redis.csproj
+++ b/src/Components/Aspire.StackExchange.Redis/Aspire.StackExchange.Redis.csproj
@@ -13,11 +13,6 @@
42
-
-
-
-
-
@@ -34,5 +29,9 @@
+
+
+
+
diff --git a/src/Components/Common/ConfigurationSchemaAttributes.cs b/src/Components/Common/ConfigurationSchemaAttributes.cs
deleted file mode 100644
index 5b15afdd46..0000000000
--- a/src/Components/Common/ConfigurationSchemaAttributes.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace Aspire;
-
-///
-/// Attribute used to automatically generate a JSON schema for a component's configuration.
-///
-[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
-internal sealed class ConfigurationSchemaAttribute : Attribute
-{
- public ConfigurationSchemaAttribute(string path, Type type, string[]? exclusionPaths = null)
- {
- Path = path;
- Type = type;
- ExclusionPaths = exclusionPaths;
- }
-
- ///
- /// The path corresponding to which config section binds to.
- ///
- public string Path { get; }
-
- ///
- /// The type that is bound to the configuration. This type will be walked and generate a JSON schema for all the properties.
- ///
- public Type Type { get; }
-
- ///
- /// (optional) The config sections to exclude from the ConfigurationSchema. This is useful if there are properties you don't want to publicize in the config schema.
- ///
- public string[]? ExclusionPaths { get; }
-}
-
-///
-/// Provides information to describe the logging categories produced by a component.
-///
-[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
-internal sealed class LoggingCategoriesAttribute : Attribute
-{
- public LoggingCategoriesAttribute(params string[] categories)
- {
- Categories = categories;
- }
-
- ///
- /// The list of log categories produced by the component. These categories will show up under the Logging:LogLevel section in appsettings.json.
- ///
- public string[] Categories { get; set; }
-}