Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
0a3163c
Add Bitwarden Secrets Manager integration
sliekens May 19, 2026
9b0c46e
Add missing launch config to bitwarden example
sliekens May 19, 2026
4217d85
Convert bitwarden project name to required parameter
sliekens May 19, 2026
c31a2d3
Remove unused internal project name tracking
sliekens May 19, 2026
a18b6f5
Convert fake async to plain synchronous helper
sliekens May 19, 2026
7f137fb
Collapse the public overload matrix to one internal representation
sliekens May 19, 2026
396fb37
Add test for same-name AddSecret/GetSecret
sliekens May 19, 2026
26811a1
Expand sample with secret retrieval
sliekens May 19, 2026
bbdc191
Add ssl cert config for bitwarden sdk
sliekens May 19, 2026
68a3c39
Add first-class secret projection API
sliekens May 20, 2026
f9acaeb
Remove unused setter
sliekens May 20, 2026
a413b58
Add missing null/empty/whitespace guards
sliekens May 20, 2026
4f9e332
Make secret name matching case insensitive
sliekens May 20, 2026
6296bca
Skip Secrets.Update() for unchanged secrets
sliekens May 20, 2026
719eab7
Add missing logging
sliekens May 21, 2026
0c0922d
Make auth cache actually work and improve example
sliekens May 21, 2026
2d0d446
Replace manifest with pipeline steps
sliekens May 23, 2026
d736afe
Add compose env to example
sliekens May 23, 2026
4355662
Improve apphost state handling with IAspireStore
sliekens May 23, 2026
e23f171
Pin ssl cert dir in run mode
sliekens May 23, 2026
96bc17a
Ignore transient errors
sliekens May 23, 2026
e19d842
Fix argument passing
sliekens May 23, 2026
f1f0135
Configure auth state file as parameter
sliekens May 23, 2026
a35b6a3
Reorganize types into logical groups
sliekens May 24, 2026
8749577
Fix redundant parameter prompting
sliekens May 24, 2026
2394a6a
Reorganize auth and project cache files
sliekens May 24, 2026
71d0aad
Add env patch for resolved secrets
sliekens May 24, 2026
c9c03f0
Split deployment pipeline by concern
sliekens May 24, 2026
76faa88
Update bitwarden docs
sliekens May 25, 2026
6727c26
Disable deployed dashboard for example
sliekens May 25, 2026
dabdc0b
Make deployed example endpoints external
sliekens May 25, 2026
a4b8580
Merge branch 'main' into bitwarden-secret-manager-integration
aaronpowell May 25, 2026
70723e0
Tag 'provision-project' as 'provision-infra' too
sliekens May 25, 2026
7307f11
Make default cache path more predictable
sliekens May 26, 2026
23dbfdd
Use unique one-way hash for auth cache
sliekens May 26, 2026
a5de324
Replace WithRuntimeAccessToken with overload of WithReference
sliekens May 26, 2026
24df43b
Redesign client integration API as configuration callback
sliekens May 26, 2026
d8e515c
Update gitignore
sliekens May 26, 2026
af0ee60
Improve state transitions and document decisions
sliekens May 26, 2026
bd9ebd4
Add commands to reset auth cache and reprovision secrets
sliekens May 27, 2026
8ae9c2e
Highlight sync command, move reset auth cache to extras
sliekens May 27, 2026
c12f0c7
Handle transient bitwarden errors
sliekens May 27, 2026
ee99ee8
Add explicit TLS certificate validation
sliekens May 28, 2026
ee7c5a7
Make resource states less confusing
sliekens May 29, 2026
9fc69d6
Add parameter prompts
sliekens May 29, 2026
eb9cd43
Add a change audit trail
sliekens May 29, 2026
676695b
Deduplicate initial and repeated sync code
sliekens May 29, 2026
13753a8
Fix nonzero exit code after succesful retry
sliekens May 29, 2026
c691778
Improve state transitions
sliekens May 29, 2026
2a8d297
Add parameters to DAG
sliekens May 29, 2026
c798aa8
Add new ways to configure URLs
sliekens May 30, 2026
e7f0428
Allow resetting auth cache from any state
sliekens May 30, 2026
c7a87a1
Use `Waiting` instead of `ValueMissing` when params are not set
sliekens May 30, 2026
2865e47
Use UnsafeAccessor to check if parameter has a value
sliekens May 30, 2026
7688ecf
Unify managed and unmanaged secrets
sliekens May 30, 2026
750507c
Reorganize optional config in readme
sliekens May 30, 2026
a0958d3
Add Compatibility notes to readme
sliekens May 30, 2026
418d00f
Fix unmanaged secret value missing from env
sliekens May 31, 2026
e1e56bc
Fix deploy prompting values for unmanaged secrets
sliekens May 31, 2026
821caf1
Pre-sync managed secrets before process-parameters
sliekens May 31, 2026
ce46974
Add warnings and fallbacks when internals change
sliekens May 31, 2026
affc608
Add WithAuthCacheFile placeholder to sample app
sliekens May 31, 2026
e83d1a5
Add WithAuthCacheVolume for container resources
sliekens May 31, 2026
ff11ce4
Fix stale docs
sliekens May 31, 2026
20ee2ef
Allign auth caches with how bws cli does it
sliekens May 31, 2026
be3e66d
Add persistent auth cache example
sliekens May 31, 2026
edadbbc
Add simple curl client to example
sliekens May 31, 2026
f7cf2c3
Keep project and secret provisioning docs together
sliekens May 31, 2026
14e3620
Add unmanaged secret resolution doc
sliekens May 31, 2026
b69b75d
Remove stray UserSecretsId
sliekens May 31, 2026
ca60050
Update description to "it's just Aspire"
sliekens May 31, 2026
ea1d481
Improve ATS annotations
sliekens May 31, 2026
0758df7
Replace callback API with optional chaining for ATS compatibility
sliekens May 31, 2026
d73da87
Rework keyed service tests
sliekens Jun 1, 2026
41d9806
Align GetSecret with AddSecret
sliekens Jun 2, 2026
2cab923
Rework readme to add missing details, remove excessive details or rep…
sliekens Jun 2, 2026
1011c00
fixup! Replace callback API with optional chaining for ATS compatibility
sliekens Jun 3, 2026
e0ea8ec
Make BitwardenSecretResource provide the value without indirection
sliekens Jun 4, 2026
9db24c3
Don't implicitly WaitForCompletion, it's not a common pattern
sliekens Jun 4, 2026
5368d2a
Drop WithBitwardenSecretId/Value in favor of WithEnvironment
sliekens Jun 4, 2026
1f896b3
Fix outdated docs
sliekens Jun 4, 2026
5c2f174
Remove unnecessary local secret name
sliekens Jun 4, 2026
8746c19
Swap reprovision/reset cache commands
sliekens Jun 4, 2026
4f1b886
Fix repeated prompts on first deploy, improve first-time experience
sliekens Jun 5, 2026
b7eb71b
Introduce clear split between managed vs. externally managed secrets
sliekens Jun 5, 2026
8f0f088
Fix highlighted command test
sliekens Jun 5, 2026
1f5b920
Collapse AddBitwardenSecretManager overloads to a single method
sliekens Jun 5, 2026
69a2d18
Rename projectName in sample
sliekens Jun 5, 2026
b809e07
Cover blind spots in BitwardenSecretManagerProvisioner tests
sliekens Jun 5, 2026
5cf8d3f
Merge remote-tracking branch 'origin/main' into bitwarden-secret-mana…
sliekens Jun 5, 2026
b3f2def
Fix reloading deployment state on first run
sliekens Jun 6, 2026
fc6f19d
Log descriptive errors for missing parameters in non-interactive deploys
sliekens Jun 6, 2026
356b6ca
Align project deploy rules between publish and run mode
sliekens Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CommunityToolkit.Aspire.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
<Folder Name="/examples/azure-ext/">
<Project Path="examples/azure-ext/CommunityToolkit.Aspire.Azure.Extensions.AppHost/CommunityToolkit.Aspire.Azure.Extensions.AppHost.csproj" />
</Folder>
<Folder Name="/examples/bitwarden-secret-manager/">
<Project Path="examples/bitwarden-secret-manager/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.ApiService/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.ApiService.csproj" />
<Project Path="examples/bitwarden-secret-manager/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.AppHost/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.AppHost.csproj" />
</Folder>
<Folder Name="/examples/bun/">
<Project Path="examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost/CommunityToolkit.Aspire.Hosting.Bun.AppHost.csproj" />
</Folder>
Expand Down Expand Up @@ -200,11 +204,13 @@
<Project Path="examples\zitadel\CommunityToolkit.Aspire.Hosting.Zitadel.AppHost\CommunityToolkit.Aspire.Hosting.Zitadel.AppHost.csproj" />
</Folder>
<Folder Name="/src/">
<Project Path="src/CommunityToolkit.Aspire.Bitwarden.SecretManager/CommunityToolkit.Aspire.Bitwarden.SecretManager.csproj" />
<Project Path="src/CommunityToolkit.Aspire.GoFeatureFlag/CommunityToolkit.Aspire.GoFeatureFlag.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.ActiveMQ/CommunityToolkit.Aspire.Hosting.ActiveMQ.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.Adminer/CommunityToolkit.Aspire.Hosting.Adminer.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.Azure.Extensions/CommunityToolkit.Aspire.Hosting.Azure.Extensions.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.Bun/CommunityToolkit.Aspire.Hosting.Bun.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.DbGate/CommunityToolkit.Aspire.Hosting.DbGate.csproj" />
<Project Path="src/CommunityToolkit.Aspire.Hosting.Deno/CommunityToolkit.Aspire.Hosting.Deno.csproj" />
Expand Down Expand Up @@ -264,11 +270,13 @@
<Project Path="src/CommunityToolkit.Aspire.Hosting.Dapr/CommunityToolkit.Aspire.Hosting.Dapr.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="tests/CommunityToolkit.Aspire.Bitwarden.SecretManager.Tests/CommunityToolkit.Aspire.Bitwarden.SecretManager.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.GoFeatureFlag.Tests/CommunityToolkit.Aspire.GoFeatureFlag.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.ActiveMQ.Tests/CommunityToolkit.Aspire.Hosting.ActiveMQ.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Adminer.Tests/CommunityToolkit.Aspire.Hosting.Adminer.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.Tests/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Azure.Extensions.Tests/CommunityToolkit.Aspire.Hosting.Azure.Extensions.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.Tests/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Bun.Tests/CommunityToolkit.Aspire.Hosting.Bun.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.DbGate.Tests/CommunityToolkit.Aspire.Hosting.DbGate.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Deno.Tests/CommunityToolkit.Aspire.Hosting.Deno.Tests.csproj" />
Expand Down
2 changes: 2 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<ItemGroup Label="Aspire Packages">
<!-- Aspire packages -->
<PackageVersion Include="Aspire.Hosting" Version="$(AspireVersion)" />
<PackageVersion Include="Aspire.Hosting.Docker" Version="$(AspireVersion)" />
<PackageVersion Include="Aspire.Hosting.Azure.Storage" Version="$(AspireVersion)" />
<PackageVersion Include="Aspire.Hosting.Dapr" Version="$(AspireVersion)" />
<PackageVersion Include="Aspire.Hosting.Azure.AppContainers" Version="$(AspireVersion)" />
Expand Down Expand Up @@ -69,6 +70,7 @@
<ItemGroup Label="Integration Packages">
<!-- External packages -->
<PackageVersion Include="Azure.Provisioning.AppContainers" Version="1.2.0" />
<PackageVersion Include="Bitwarden.Secrets.Sdk" Version="1.0.0" />
<PackageVersion Include="JsonSchema.Net" Version="7.4.0" />
<PackageVersion Include="OllamaSharp" Version="5.4.12" />
<PackageVersion Include="OpenFeature.Providers.GOFeatureFlag" Version="1.0.0" />
Expand Down
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ This repository contains the source code for the Aspire Community Toolkit, a col
| - **Learn More**: [`Hosting.SqlDatabaseProjects`][sql-database-projects-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects][sql-database-projects-shields]][sql-database-projects-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects][sql-database-projects-shields-preview]][sql-database-projects-nuget-preview] | A hosting integration for the SQL Databases Projects. |
| - **Learn More**: [`Hosting.Rust`][rust-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.Rust][rust-shields]][rust-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.Rust][rust-shields-preview]][rust-nuget-preview] | A hosting integration for the Rust apps. |
| - **Learn More**: [`Hosting.Bun`][bun-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.Bun][bun-shields]][bun-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.Bun][bun-shields-preview]][bun-nuget-preview] | **Deprecated**: use the core `Aspire.Hosting.JavaScript` `AddBunApp(...)` integration. |
| - **Learn More**: [`Hosting.Bitwarden.SecretManager`][bitwarden-secret-manager-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager][bitwarden-secret-manager-hosting-shields]][bitwarden-secret-manager-hosting-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager][bitwarden-secret-manager-hosting-shields-preview]][bitwarden-secret-manager-hosting-nuget-preview] | A hosting integration for Bitwarden Secrets Manager projects and managed secrets. |
| - **Learn More**: [`Bitwarden.SecretManager`][bitwarden-secret-manager-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Bitwarden.SecretManager][bitwarden-secret-manager-client-shields]][bitwarden-secret-manager-client-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Bitwarden.SecretManager][bitwarden-secret-manager-client-shields-preview]][bitwarden-secret-manager-client-nuget-preview] | A client integration for authenticating and using the Bitwarden Secrets Manager SDK from Aspire applications. |
| - **Learn More**: [`Hosting.Perl`][perl-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.Perl][perl-shields]][perl-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.Perl][perl-shields-preview]][perl-nuget-preview] | A hosting integration for Perl scripts and APIs. |
| - **Learn More**: [`Hosting.Python.Extensions`][python-ext-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Python.Extensions][python-ext-shields]][python-ext-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.Python.Extensions][python-ext-shields-preview]][python-ext-nuget-preview] | An integration that contains some additional extensions for running python applications |
| - **Learn More**: [`Hosting.KurrentDB`][kurrentdb-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.KurrentDB][kurrentdb-shields]][kurrentdb-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.KurrentDB][kurrentdb-shields-preview]][kurrentdb-nuget-preview] | An Aspire hosting integration leveraging the [KurrentDB](https://www.kurrent.io) container. |
Expand Down Expand Up @@ -154,6 +156,15 @@ This project is supported by the [.NET Foundation](https://dotnetfoundation.org)
[bun-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Bun/
[bun-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Bun?label=nuget%20(preview)
[bun-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Bun/absoluteLatest
[bitwarden-secret-manager-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-bitwarden-secret-manager
[bitwarden-secret-manager-hosting-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager
[bitwarden-secret-manager-hosting-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager/
[bitwarden-secret-manager-hosting-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager?label=nuget%20(preview)
[bitwarden-secret-manager-hosting-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager/absoluteLatest
[bitwarden-secret-manager-client-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Bitwarden.SecretManager
[bitwarden-secret-manager-client-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Bitwarden.SecretManager/
[bitwarden-secret-manager-client-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Bitwarden.SecretManager?label=nuget%20(preview)
[bitwarden-secret-manager-client-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Bitwarden.SecretManager/absoluteLatest
[perl-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-perl
[perl-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Perl
[perl-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Perl/
Expand Down
2 changes: 2 additions & 0 deletions examples/bitwarden-secret-manager/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
aspire-output
.bitwarden/
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Bitwarden.SecretManager\CommunityToolkit.Aspire.Bitwarden.SecretManager.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using Bitwarden.Sdk;
using CommunityToolkit.Aspire.Bitwarden.SecretManager;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);

// Register the Bitwarden secret manager client with Aspire configuration binding.
// Use the same connection name as the Bitwarden project in the AppHost
// Configuration is injected as Aspire:Bitwarden:SecretManager:{connection_name}:{setting}
// (e.g. Aspire:Bitwarden:SecretManager:secrets:AccessToken).
builder.AddBitwardenSecretManagerClient(connectionName: "secrets", settings =>
{
// You can optionally override Aspire injected values here or set additional client settings.
settings.IdentityUrl = "https://vault.bitwarden.com/identity";
settings.ApiUrl = "https://vault.bitwarden.com/api";
settings.DisableHealthChecks = true;
});

var app = builder.Build();

app.MapGet("/", ([FromQuery] string? apiKey, BitwardenClient client, BitwardenSecretManagerClientSettings settings, IConfiguration configuration) =>
{
Guid secretId = configuration.GetValue<Guid>("DEMO_API_KEY_SECRET_ID");
SecretResponse secret = client.Secrets.Get(secretId);
if (string.IsNullOrEmpty(apiKey))
{
return Results.Problem("Missing apiKey query parameter.", statusCode: StatusCodes.Status401Unauthorized);
}
else if (secret.Value != apiKey)
{
return Results.Problem("Invalid apiKey.", statusCode: StatusCodes.Status401Unauthorized);
}

return Results.Text("""
Access granted to protected resource!

But please don't use query parameters for API keys in real applications... this is just a demo!
Consider using an HTTP header or similar approach to keep secrets out of URLs and logs.
""");
});

app.MapGet("/health", () => Results.Ok(new { status = "ok" }));

app.Run();
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:5278",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "https://localhost:7298;http://localhost:5278",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Aspire.AppHost.Sdk/13.4.0">

<PropertyGroup>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireHost>true</IsAspireHost>
<UserSecretsId>632cd204-f3fe-4c77-98e1-fa65b87b5fa9</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspire.Hosting.Docker" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager\CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.csproj" IsAspireProjectResource="false" />
<ProjectReference Include="..\CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.ApiService\CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager.ApiService.csproj" />
</ItemGroup>

</Project>
Loading
Loading