Skip to content

Commit 0f358dd

Browse files
Merge pull request #403 from MPCoreDeveloper/feat/aspire-server-hosting
feat: add .NET Aspire hosting package + server container image
2 parents d9dbbb0 + 9e0af52 commit 0f358dd

13 files changed

Lines changed: 437 additions & 3 deletions

‎.github/workflows/ci.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ jobs:
281281
282282
push_layer "Layer 0 (core)" \
283283
"SharpCoreDB.[0-9]*.nupkg" \
284+
"SharpCoreDB.Aspire.Hosting.*.nupkg" \
284285
"SharpCoreDB.Client.Protocol.*.nupkg" \
285286
"SharpCoreDB.Server.Protocol.*.nupkg"
286287
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
name: Docker
2+
3+
on:
4+
push:
5+
tags: [ 'v*' ]
6+
workflow_dispatch:
7+
8+
env:
9+
REGISTRY: ghcr.io
10+
IMAGE_NAME: ghcr.io/mpcoredeveloper/sharpcoredb-server
11+
12+
jobs:
13+
build-and-push:
14+
name: Build & push SharpCoreDB server image
15+
runs-on: ubuntu-latest
16+
permissions:
17+
contents: read
18+
packages: write
19+
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
23+
24+
- name: Compute image tags
25+
id: meta
26+
shell: pwsh
27+
run: |
28+
$version = if ("${{ github.ref_type }}" -eq 'tag') { "${{ github.ref_name }}".TrimStart('v') } else { "${{ github.sha }}".Substring(0, 7) }
29+
$tags = @("${{ env.IMAGE_NAME }}:$version")
30+
if ("${{ github.ref_type }}" -eq 'tag') {
31+
$tags += "${{ env.IMAGE_NAME }}:latest"
32+
}
33+
Write-Host "Version: $version"
34+
Write-Host "Tags: $($tags -join ', ')"
35+
"version=$version" >> $env:GITHUB_OUTPUT
36+
"tags=$($tags -join ',')" >> $env:GITHUB_OUTPUT
37+
38+
- name: Set up QEMU
39+
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
40+
41+
- name: Set up Docker Buildx
42+
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
43+
44+
- name: Log in to GHCR
45+
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
46+
with:
47+
registry: ${{ env.REGISTRY }}
48+
username: ${{ github.actor }}
49+
password: ${{ secrets.GITHUB_TOKEN }}
50+
51+
- name: Build and push
52+
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
53+
with:
54+
context: .
55+
file: src/SharpCoreDB.Server/Dockerfile
56+
push: true
57+
platforms: linux/amd64, linux/arm64
58+
tags: ${{ steps.meta.outputs.tags }}
59+
build-args: |
60+
VERSION=${{ steps.meta.outputs.version }}
61+
labels: |
62+
org.opencontainers.image.title=SharpCoreDB Server
63+
org.opencontainers.image.description=SharpCoreDB network database server (gRPC + HTTPS)
64+
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
65+
org.opencontainers.image.version=${{ steps.meta.outputs.version }}
66+
org.opencontainers.image.revision=${{ github.sha }}

‎.github/workflows/publish-manual.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ jobs:
9595
9696
push_layer "Layer 0 (core)" \
9797
"SharpCoreDB.[0-9]*.nupkg" \
98+
"SharpCoreDB.Aspire.Hosting.*.nupkg" \
9899
"SharpCoreDB.Client.Protocol.*.nupkg" \
99100
"SharpCoreDB.Server.Protocol.*.nupkg"
100101

‎Directory.Packages.props‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<ItemGroup>
88
<PackageVersion Include="SharpCoreDB" Version="$(SharpCoreDBVersion)" />
99
<PackageVersion Include="SharpCoreDB.Analytics" Version="$(SharpCoreDBVersion)" />
10+
<PackageVersion Include="SharpCoreDB.Aspire.Hosting" Version="$(SharpCoreDBVersion)" />
1011
<PackageVersion Include="SharpCoreDB.Client" Version="$(SharpCoreDBVersion)" />
1112
<PackageVersion Include="SharpCoreDB.Client.Protocol" Version="$(SharpCoreDBVersion)" />
1213
<PackageVersion Include="SharpCoreDB.CQRS" Version="$(SharpCoreDBVersion)" />
@@ -30,6 +31,7 @@
3031
<PackageVersion Include="SharpCoreDB.Server.Core" Version="$(SharpCoreDBVersion)" />
3132
<PackageVersion Include="SharpCoreDB.Server.Protocol" Version="$(SharpCoreDBVersion)" />
3233
<PackageVersion Include="SharpCoreDB.VectorSearch" Version="$(SharpCoreDBVersion)" />
34+
<PackageVersion Include="Aspire.Hosting" Version="13.5.3" />
3335
<PackageVersion Include="Aspire.Hosting.AppHost" Version="13.5.3" />
3436
<PackageVersion Include="AngleSharp" Version="1.7.2" />
3537
<PackageVersion Include="AWSSDK.Core" Version="4.0.102.1" />

‎SharpCoreDB.sln‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 18
44
VisualStudioVersion = 18.1.11312.151
@@ -185,6 +185,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrderManagement.CqrsDemo",
185185
EndProject
186186
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCoreDB.AppHost", "src\SharpCoreDB.AppHost\SharpCoreDB.AppHost.csproj", "{532DCF54-42EE-41C6-AC93-4DB59425C017}"
187187
EndProject
188+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCoreDB.Aspire.Hosting", "src\SharpCoreDB.Aspire.Hosting\SharpCoreDB.Aspire.Hosting.csproj", "{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}"
189+
EndProject
188190
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCoreDB.Functional", "src\SharpCoreDB.Functional\SharpCoreDB.Functional.csproj", "{B7C3FE06-9C25-46F1-BDE4-C37A51192CDD}"
189191
EndProject
190192
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCoreDB.Functional.Dapper", "src\SharpCoreDB.Functional.Dapper\SharpCoreDB.Functional.Dapper.csproj", "{4D7E752E-F1E9-4580-A60F-6F3F31CBD8A8}"
@@ -731,6 +733,18 @@ Global
731733
{532DCF54-42EE-41C6-AC93-4DB59425C017}.Release|x64.Build.0 = Release|Any CPU
732734
{532DCF54-42EE-41C6-AC93-4DB59425C017}.Release|x86.ActiveCfg = Release|Any CPU
733735
{532DCF54-42EE-41C6-AC93-4DB59425C017}.Release|x86.Build.0 = Release|Any CPU
736+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
737+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
738+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Debug|x64.ActiveCfg = Debug|Any CPU
739+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Debug|x64.Build.0 = Debug|Any CPU
740+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Debug|x86.ActiveCfg = Debug|Any CPU
741+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Debug|x86.Build.0 = Debug|Any CPU
742+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
743+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Release|Any CPU.Build.0 = Release|Any CPU
744+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Release|x64.ActiveCfg = Release|Any CPU
745+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Release|x64.Build.0 = Release|Any CPU
746+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Release|x86.ActiveCfg = Release|Any CPU
747+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3}.Release|x86.Build.0 = Release|Any CPU
734748
{B7C3FE06-9C25-46F1-BDE4-C37A51192CDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
735749
{B7C3FE06-9C25-46F1-BDE4-C37A51192CDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
736750
{B7C3FE06-9C25-46F1-BDE4-C37A51192CDD}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -969,6 +983,7 @@ Global
969983
{16246662-205B-4B38-9C72-5386FD85A4B4} = {2F8A8533-DAA8-4CF9-A6C0-2F663AF7FD2E}
970984
{7BBCA0B4-D868-C04E-8748-21DE9A02486F} = {16246662-205B-4B38-9C72-5386FD85A4B4}
971985
{532DCF54-42EE-41C6-AC93-4DB59425C017} = {F8B5E3A4-1C2D-4E5F-8B9A-1D2E3F4A5B6C}
986+
{5D4E3C2B-1A09-4E8F-B6C7-D8E9F0A1B2C3} = {F8B5E3A4-1C2D-4E5F-8B9A-1D2E3F4A5B6C}
972987
{B7C3FE06-9C25-46F1-BDE4-C37A51192CDD} = {F8B5E3A4-1C2D-4E5F-8B9A-1D2E3F4A5B6C}
973988
{4D7E752E-F1E9-4580-A60F-6F3F31CBD8A8} = {F8B5E3A4-1C2D-4E5F-8B9A-1D2E3F4A5B6C}
974989
{67976C63-C341-4D9D-A805-812B565E7CC9} = {F8B5E3A4-1C2D-4E5F-8B9A-1D2E3F4A5B6C}

‎SharpCoreDB.slnx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
<File Path="docs/server/QUICKSTART.md" />
3333
<File Path="docs/server/REST_API.md" />
3434
<File Path="docs/server/SECURITY.md" />
35+
<File Path="docs/server/ASPIRE_INTEGRATION.md" />
3536
</Folder>
3637
<Folder Name="/Examples/">
3738
<Project Path="Examples/SharpCoreDB.GraphRAG.AIAssistant/SharpCoreDB.GraphRAG.AIAssistant.csproj" />
@@ -92,6 +93,7 @@
9293
<Folder Name="/src/">
9394
<Project Path="src/SharpCoreDB.Analytics/SharpCoreDB.Analytics.csproj" />
9495
<Project Path="src/SharpCoreDB.AppHost/SharpCoreDB.AppHost.csproj" />
96+
<Project Path="src/SharpCoreDB.Aspire.Hosting/SharpCoreDB.Aspire.Hosting.csproj" />
9597
<Project Path="src/SharpCoreDB.Client.Protocol/SharpCoreDB.Client.Protocol.csproj" />
9698
<Project Path="src/SharpCoreDB.Client/SharpCoreDB.Client.csproj" />
9799
<Project Path="src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj" />

‎docs/server/ASPIRE_INTEGRATION.md‎

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# SharpCoreDB Server × .NET Aspire Integration
2+
3+
> **Status:** SharpCoreDB-side prerequisites implemented · **Date:** 2026-09-05
4+
>
5+
> This repository delivers the two SharpCoreDB prerequisites defined by the SCDMS design doc
6+
> [`docs/aspire.md`](https://github.com/MPCoreDeveloper/SCDMS/blob/main/docs/aspire.md)
7+
> (SCDMS issue #10). Once the `SCDMS.Aspire.Hosting` package is built in the SCDMS repository,
8+
> SharpCoreDB server + SCDMS can run as one Aspire application with all SCDMS ⇄ SharpCoreDB
9+
> traffic over **gRPC**.
10+
11+
## Goal (from the SCDMS design doc)
12+
13+
Run SharpCoreDB server + SCDMS as a single Aspire app, like pgAdmin next to PostgreSQL:
14+
15+
```csharp
16+
var builder = DistributedApplication.CreateBuilder(args);
17+
18+
var sharpCoreDb = builder.AddSharpCoreDB("db")
19+
.WithServerContainer(); // SharpCoreDB server container
20+
21+
builder.AddSCDMS("admin")
22+
.WithGrpcReference(sharpCoreDb) // SCDMS container linked via gRPC
23+
.WithHttpEndpoint(port: 8080, name: "http");
24+
25+
builder.Build().Run();
26+
```
27+
28+
## What this repository now provides
29+
30+
### 1. Server container image → `ghcr.io/mpcoredeveloper/sharpcoredb-server`
31+
32+
- `.github/workflows/docker-publish.yml` builds and pushes the server image on every `v*` tag
33+
and via `workflow_dispatch`.
34+
- Multi-architecture: `linux/amd64` + `linux/arm64` (Docker Buildx + QEMU).
35+
- Tags: `<version>` (tag without the leading `v`) and `latest`.
36+
- Build context is the repository root; the Dockerfile lives at
37+
`src/SharpCoreDB.Server/Dockerfile`.
38+
39+
### 2. `SharpCoreDB.Aspire.Hosting` NuGet package
40+
41+
The package (project `src/SharpCoreDB.Aspire.Hosting/`) registers the server container in an
42+
Aspire application:
43+
44+
```csharp
45+
using SharpCoreDB.Aspire.Hosting;
46+
47+
var builder = DistributedApplication.CreateBuilder(args);
48+
49+
var db = builder.AddSharpCoreDB("db") // ghcr.io/mpcoredeveloper/sharpcoredb-server:latest
50+
.WithServerContainer()
51+
.WithImageTag("2.0.0.2") // optional pinned tag
52+
.WithJwtSecret("a-secret-of-at-least-32-characters");
53+
54+
builder.Build().Run();
55+
```
56+
57+
The resource (`SharpCoreDbServerResource`) implements `IResourceWithConnectionString` and always
58+
exposes **two** HTTPS endpoints:
59+
60+
| Endpoint | Container port | Purpose |
61+
|---|---|---|
62+
| `grpc` | 5001 | Primary gRPC protocol (HTTP/2), matching `Server.GrpcPort` |
63+
| `https` | 8443 | HTTPS REST API + `/health`, matching `Server.HttpsApiPort` |
64+
65+
The connection string of the resource points at the gRPC endpoint:
66+
`Host=<host>;Port=<port>;SSL=True`.
67+
68+
## TLS in development (important)
69+
70+
SharpCoreDB server **enforces TLS 1.2+** and refuses to start on plain HTTP
71+
(`Server.Security.TlsEnabled` must stay `true` and a certificate path is required). Both
72+
endpoints are therefore modeled with `WithHttpsEndpoint` in the hosting package.
73+
74+
- **Production / behind a reverse proxy:** terminate TLS at a publicly trusted proxy (see the
75+
SCDMS `samples/docker/` pattern) and mount the real certificate into `/app/certs`.
76+
- **Local Aspire development:** the container still needs a certificate. Use the Aspire
77+
development certificate (trust it in the consuming client) or mount a development PFX and
78+
point `Server__Security__TlsCertificatePath` at it. gRPC clients in development may need
79+
certificate validation disabled for the local `grpc` endpoint.
80+
81+
## Environment configuration
82+
83+
| Setting | Container env var | Notes |
84+
|---|---|---|
85+
| JWT secret | `Server__Security__JwtSecretKey` | Min. 32 chars; use `WithJwtSecret(...)` |
86+
| TLS cert | `Server__Security__TlsCertificatePath` | Default `./certs/server.pfx`; mount into `/app/certs` |
87+
| HTTPS API | `Server__EnableHttpsApi` / `Server__HttpsApiPort` | Defaults `true` / `8443` |
88+
| gRPC | `Server__EnableGrpc` / `Server__GrpcPort` | Defaults `true` / `5001` |
89+
90+
## Consuming the resource from another hosting package
91+
92+
`WithGrpcReference` (to be added by `SCDMS.Aspire.Hosting`) can resolve the gRPC endpoint and
93+
forward `SCDMS__DefaultServer*` settings:
94+
95+
```csharp
96+
var grpcEndpoint = sharpCoreDb.GetEndpoint("grpc");
97+
scdms.WithEnvironment("SCDMS__DefaultServerHost", grpcEndpoint)
98+
.WithEnvironment("SCDMS__DefaultServerPort", grpcEndpoint.Property(EndpointProperty.Port))
99+
.WithEnvironment("SCDMS__DefaultServerUseSsl", "true");
100+
```
101+
102+
## Related
103+
104+
- Server quick start: [`QUICKSTART.md`](QUICKSTART.md)
105+
- Server configuration reference: [`CONFIGURATION_SCHEMA.md`](CONFIGURATION_SCHEMA.md)
106+
- Server Docker Compose: `src/SharpCoreDB.Server/docker-compose.yml`
107+
- SCDMS Aspire design doc (the plan this implements):
108+
https://github.com/MPCoreDeveloper/SCDMS/blob/main/docs/aspire.md

‎docs/server/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ In server mode, SharpCoreDB runs as a network service instead of an in-process e
3333
- **Linux systemd:** `installers/linux/install.sh`
3434
- **macOS launchd:** `installers/macos/install.sh`
3535
- **Docker:** `src/SharpCoreDB.Server/docker-compose.yml`
36+
- **.NET Aspire:** `ASPIRE_INTEGRATION.md` — `SharpCoreDB.Aspire.Hosting` package + server container image
3637

3738
For complete production installation instructions, see `INSTALLATION.md`.
3839

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# SharpCoreDB.Aspire.Hosting
2+
3+
.NET Aspire hosting integration for the **SharpCoreDB network server** container image
4+
(`ghcr.io/mpcoredeveloper/sharpcoredb-server`).
5+
6+
## Quick start
7+
8+
```csharp
9+
var builder = DistributedApplication.CreateBuilder(args);
10+
11+
var db = builder.AddSharpCoreDB("db")
12+
.WithServerContainer()
13+
.WithImageTag("2.0.0.2")
14+
.WithJwtSecret("replace-with-a-secret-of-at-least-32-characters");
15+
16+
builder.Build().Run();
17+
```
18+
19+
The server container exposes two HTTPS endpoints (TLS 1.2+ is enforced, plain HTTP is not supported):
20+
21+
| Endpoint name | Container port | Purpose |
22+
|---|---|---|
23+
| `grpc` | 5001 | Primary gRPC protocol (HTTP/2) |
24+
| `https` | 8443 | HTTPS REST API + `/health` |
25+
26+
The resource implements `IResourceWithConnectionString`; the connection string points at the
27+
`grpc` endpoint (`Host=…;Port=…;SSL=True`).
28+
29+
## Extension methods
30+
31+
- `AddSharpCoreDB(name)` — adds the container resource.
32+
- `WithServerContainer()` — documentation alias for the container-based hosting intent.
33+
- `WithJwtSecret(secret)` — forwards `Server__Security__JwtSecretKey` (min. 32 chars).
34+
- `WithImageTag(tag)` — pick a published image tag instead of `latest`.
35+
36+
## Prerequisites
37+
38+
- The image is published to `ghcr.io/mpcoredeveloper/sharpcoredb-server` by the repository
39+
Docker workflow on every `v*` tag (`linux/amd64` + `linux/arm64`).
40+
41+
## Development notes (TLS)
42+
43+
In local Aspire development the container keeps enforcing TLS. Trust the Aspire development
44+
certificate in the consuming app, or connect over the Aspire network with certificate
45+
validation disabled for the `grpc` endpoint. See
46+
[docs/server/ASPIRE_INTEGRATION.md](https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/server/ASPIRE_INTEGRATION.md)
47+
for the full guide.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<!-- Aspire.Hosting resolves a large transitive graph that does not participate in the
5+
repo-wide central package version pinning. Central package management is disabled
6+
for this project only (same approach as src/SharpCoreDB.AppHost). -->
7+
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
8+
</PropertyGroup>
9+
10+
<PropertyGroup>
11+
<TargetFramework>net10.0</TargetFramework>
12+
<LangVersion>14.0</LangVersion>
13+
<Nullable>enable</Nullable>
14+
<ImplicitUsings>enable</ImplicitUsings>
15+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
16+
17+
<!-- Assembly info -->
18+
<AssemblyName>SharpCoreDB.Aspire.Hosting</AssemblyName>
19+
<Version>2.0.0.2</Version>
20+
<Description>.NET Aspire hosting integration for the SharpCoreDB network server</Description>
21+
22+
<!-- NuGet Package Properties -->
23+
<PackageId>SharpCoreDB.Aspire.Hosting</PackageId>
24+
<Authors>MPCoreDeveloper</Authors>
25+
<Company>SharpCoreDB</Company>
26+
<Product>SharpCoreDB.Aspire.Hosting</Product>
27+
<PackageTags>database;aspire;hosting;grpc;container;sharpcoredb;net10</PackageTags>
28+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
29+
<PackageProjectUrl>https://github.com/MPCoreDeveloper/SharpCoreDB</PackageProjectUrl>
30+
<RepositoryUrl>https://github.com/MPCoreDeveloper/SharpCoreDB</RepositoryUrl>
31+
<RepositoryType>git</RepositoryType>
32+
<PackageReadmeFile>NuGet.README.md</PackageReadmeFile>
33+
<PackageIcon>SharpCoreDB.jpg</PackageIcon>
34+
<IncludeSymbols>true</IncludeSymbols>
35+
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
36+
<PackageReleaseNotes>v2.0.0.2 (2026-09-05): first .NET Aspire hosting package for SharpCoreDB.Server - container image ghcr.io/mpcoredeveloper/sharpcoredb-server with HTTPS gRPC (5001) and HTTPS REST API (8443) endpoints. Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/server/ASPIRE_INTEGRATION.md</PackageReleaseNotes>
37+
</PropertyGroup>
38+
39+
<ItemGroup>
40+
<!-- Aspire hosting (matches SharpCoreDB.AppHost / Aspire.Hosting.AppHost 13.5.3). -->
41+
<PackageReference Include="Aspire.Hosting" Version="13.5.3" />
42+
</ItemGroup>
43+
44+
<ItemGroup>
45+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.400">
46+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
47+
<PrivateAssets>all</PrivateAssets>
48+
</PackageReference>
49+
</ItemGroup>
50+
51+
<ItemGroup>
52+
<None Include="NuGet.README.md" Pack="true" PackagePath="/" />
53+
<None Include="..\SharpCoreDB\SharpCoreDB.jpg" Link="SharpCoreDB.jpg" Pack="true" PackagePath="/" />
54+
</ItemGroup>
55+
56+
</Project>

0 commit comments

Comments
 (0)