mirror of
https://github.com/DuendeSoftware/products
synced 2026-05-24 01:18:22 +00:00
Publish - 2026-05-22 13:27:37 UTC
This commit is contained in:
parent
dd6e90d083
commit
2b7da400b8
14 changed files with 89 additions and 112 deletions
|
|
@ -88,3 +88,5 @@ dotnet_naming_rule.async_methods_must_end_with_async.severity = none
|
|||
|
||||
[platform/src/AdminStudio.Web/Services/*GrpcService.cs]
|
||||
dotnet_naming_rule.async_methods_must_end_with_async.severity = none
|
||||
|
||||
|
||||
|
|
|
|||
39
bff/bff.slnf
39
bff/bff.slnf
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"solution": {
|
||||
"path": "..\\products.slnx",
|
||||
"projects": [
|
||||
"bff\\hosts\\Blazor\\PerComponent\\Hosts.Bff.Blazor.PerComponent.Client\\Hosts.Bff.Blazor.PerComponent.Client.csproj",
|
||||
"bff\\hosts\\Blazor\\PerComponent\\Hosts.Bff.Blazor.PerComponent\\Hosts.Bff.Blazor.PerComponent.csproj",
|
||||
"bff\\hosts\\Blazor\\WebAssembly\\Hosts.Bff.Blazor.WebAssembly.Client\\Hosts.Bff.Blazor.WebAssembly.Client.csproj",
|
||||
"bff\\hosts\\Blazor\\WebAssembly\\Hosts.Bff.Blazor.WebAssembly\\Hosts.Bff.Blazor.WebAssembly.csproj",
|
||||
"bff\\hosts\\Hosts.AppHost\\Hosts.AppHost.csproj",
|
||||
"bff\\hosts\\Hosts.Bff.DPoP\\Hosts.Bff.DPoP.csproj",
|
||||
"bff\\hosts\\Hosts.Bff.EF\\Hosts.Bff.EF.csproj",
|
||||
"bff\\hosts\\Hosts.Bff.InMemory\\Hosts.Bff.InMemory.csproj",
|
||||
"bff\\hosts\\Hosts.Bff.MultiFrontend\\Hosts.Bff.MultiFrontend.csproj",
|
||||
"bff\\hosts\\Hosts.Bff.Performance\\Hosts.Bff.Performance.csproj",
|
||||
"bff\\hosts\\Hosts.IdentityServer\\Hosts.IdentityServer.csproj",
|
||||
"bff\\hosts\\Hosts.ServiceDefaults\\Hosts.ServiceDefaults.csproj",
|
||||
"bff\\hosts\\RemoteApis\\Hosts.RemoteApi.DPoP\\Hosts.RemoteApi.DPoP.csproj",
|
||||
"bff\\hosts\\RemoteApis\\Hosts.RemoteApi.Isolated\\Hosts.RemoteApi.Isolated.csproj",
|
||||
"bff\\hosts\\RemoteApis\\Hosts.RemoteApi\\Hosts.RemoteApi.csproj",
|
||||
"bff\\migrations\\UserSessionDb\\UserSessionDb.csproj",
|
||||
"bff\\performance\\Bff.Benchmarks\\Bff.Benchmarks.csproj",
|
||||
"bff\\performance\\Bff.Performance\\Bff.Performance.csproj",
|
||||
"bff\\src\\Bff.Blazor.Client\\Bff.Blazor.Client.csproj",
|
||||
"bff\\src\\Bff.Blazor\\Bff.Blazor.csproj",
|
||||
"bff\\src\\Bff.EntityFramework\\Bff.EntityFramework.csproj",
|
||||
"bff\\src\\Bff.Yarp\\Bff.Yarp.csproj",
|
||||
"bff\\src\\Bff\\Bff.csproj",
|
||||
"bff\\templates\\src\\BffBlazorAutoRenderMode\\BffBlazorAutoRenderMode.Client\\BffBlazorAutoRenderMode.Client.csproj",
|
||||
"bff\\templates\\src\\BffBlazorAutoRenderMode\\BffBlazorAutoRenderMode\\BffBlazorAutoRenderMode.csproj",
|
||||
"bff\\templates\\src\\BffLocalApi\\BffLocalApi.csproj",
|
||||
"bff\\templates\\src\\BffRemoteApi\\BffRemoteApi.csproj",
|
||||
"bff\\test\\Bff.Tests\\Bff.Tests.csproj",
|
||||
"bff\\test\\Hosts.Tests\\Hosts.Tests.csproj",
|
||||
"shared\\AppHost.Abstractions\\AppHost.Abstractions.csproj",
|
||||
"shared\\ShouldlyExtensions\\ShouldlyExtensions.csproj",
|
||||
"shared\\Xunit.Playwright\\Xunit.Playwright.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
61
bff/bff.slnx
Normal file
61
bff/bff.slnx
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<Solution>
|
||||
<Folder Name="/hosts/">
|
||||
<Project Path="hosts/Hosts.AppHost/Hosts.AppHost.csproj" />
|
||||
<Project Path="hosts/Hosts.Bff.DPoP/Hosts.Bff.DPoP.csproj" />
|
||||
<Project Path="hosts/Hosts.Bff.EF/Hosts.Bff.EF.csproj" />
|
||||
<Project Path="hosts/Hosts.Bff.InMemory/Hosts.Bff.InMemory.csproj" />
|
||||
<Project Path="hosts/Hosts.Bff.MultiFrontend/Hosts.Bff.MultiFrontend.csproj" />
|
||||
<Project Path="hosts/Hosts.Bff.Performance/Hosts.Bff.Performance.csproj" />
|
||||
<Project Path="hosts/Hosts.IdentityServer/Hosts.IdentityServer.csproj" />
|
||||
<Project Path="hosts/Hosts.ServiceDefaults/Hosts.ServiceDefaults.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/hosts/Blazor/" />
|
||||
<Folder Name="/hosts/Blazor/PerComponent/">
|
||||
<Project Path="hosts/Blazor/PerComponent/Hosts.Bff.Blazor.PerComponent.Client/Hosts.Bff.Blazor.PerComponent.Client.csproj" />
|
||||
<Project Path="hosts/Blazor/PerComponent/Hosts.Bff.Blazor.PerComponent/Hosts.Bff.Blazor.PerComponent.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/hosts/Blazor/WebAssembly/">
|
||||
<Project Path="hosts/Blazor/WebAssembly/Hosts.Bff.Blazor.WebAssembly.Client/Hosts.Bff.Blazor.WebAssembly.Client.csproj" />
|
||||
<Project Path="hosts/Blazor/WebAssembly/Hosts.Bff.Blazor.WebAssembly/Hosts.Bff.Blazor.WebAssembly.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/hosts/RemoteApis/">
|
||||
<Project Path="hosts/RemoteApis/Hosts.RemoteApi.DPoP/Hosts.RemoteApi.DPoP.csproj" />
|
||||
<Project Path="hosts/RemoteApis/Hosts.RemoteApi.Isolated/Hosts.RemoteApi.Isolated.csproj" />
|
||||
<Project Path="hosts/RemoteApis/Hosts.RemoteApi/Hosts.RemoteApi.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/migrations/">
|
||||
<Project Path="migrations/UserSessionDb/UserSessionDb.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/performance/">
|
||||
<Project Path="performance/Bff.Benchmarks/Bff.Benchmarks.csproj" />
|
||||
<Project Path="performance/Bff.Performance/Bff.Performance.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/src/">
|
||||
<Project Path="src/Bff.Blazor.Client/Bff.Blazor.Client.csproj" />
|
||||
<Project Path="src/Bff.Blazor/Bff.Blazor.csproj" />
|
||||
<Project Path="src/Bff.EntityFramework/Bff.EntityFramework.csproj" />
|
||||
<Project Path="src/Bff.Yarp/Bff.Yarp.csproj" />
|
||||
<Project Path="src/Bff/Bff.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/templates/" />
|
||||
<Folder Name="/templates/src/">
|
||||
<Project Path="templates/src/BffLocalApi/BffLocalApi.csproj" />
|
||||
<Project Path="templates/src/BffRemoteApi/BffRemoteApi.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/templates/src/BffBlazorAutoRenderMode/">
|
||||
<Project Path="templates/src/BffBlazorAutoRenderMode/BffBlazorAutoRenderMode.Client/BffBlazorAutoRenderMode.Client.csproj" />
|
||||
<Project Path="templates/src/BffBlazorAutoRenderMode/BffBlazorAutoRenderMode/BffBlazorAutoRenderMode.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/test/">
|
||||
<Project Path="test/Bff.Tests/Bff.Tests.csproj" />
|
||||
<Project Path="test/Hosts.Tests/Hosts.Tests.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/tools/">
|
||||
<Project Path="tools/PublicApi/PublicApi.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/shared/">
|
||||
<Project Path="../shared/AppHost.Abstractions/AppHost.Abstractions.csproj" />
|
||||
<Project Path="../shared/ShouldlyExtensions/ShouldlyExtensions.csproj" />
|
||||
<Project Path="../shared/Xunit.Playwright/Xunit.Playwright.csproj" />
|
||||
</Folder>
|
||||
</Solution>
|
||||
|
|
@ -21,5 +21,7 @@
|
|||
<AnalysisMode>None</AnalysisMode>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
|
||||
<!-- IDE1006: Naming rule violation (async suffix) - Razor Pages use OnGet/OnPost convention -->
|
||||
<NoWarn>$(NoWarn);IDE1006</NoWarn>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<PackageReference Include="Duende.IdentityServer" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\bff\hosts\Hosts.ServiceDefaults\Hosts.ServiceDefaults.csproj" />
|
||||
<ProjectReference Include="..\Hosts.ServiceDefaults\Hosts.ServiceDefaults.csproj" />
|
||||
<ProjectReference Include="..\..\src\Bff.Yarp\Bff.Yarp.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\shared\AppHost.Abstractions\AppHost.Abstractions.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\shared\AppHost.Abstractions\AppHost.Abstractions.csproj" />
|
||||
<ProjectReference Include="..\..\src\Bff\Bff.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<Project>
|
||||
|
||||
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))" />
|
||||
<Import Project="../../src.props" />
|
||||
<Import Project="../../../src.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<AnalysisMode>None</AnalysisMode>
|
||||
|
|
@ -12,6 +12,9 @@
|
|||
|
||||
<!-- RS0027: API with optional parameter(s) should have the most parameters amongst its public overloads -->
|
||||
<NoWarn>$(NoWarn);RS0027</NoWarn>
|
||||
|
||||
<!-- IDE1006: Naming rule violation (async suffix) - benchmark methods -->
|
||||
<NoWarn>$(NoWarn);IDE1006</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -32,19 +32,19 @@ internal class BffClientAuthenticationStateProvider : AuthenticationStateProvide
|
|||
_fetchUserService = fetchUserService;
|
||||
_ = persistentUserService.GetPersistedUser(out var user);
|
||||
_user = user;
|
||||
_timer = timeProvider.CreateTimer(TimerCallback,
|
||||
_timer = timeProvider.CreateTimer(TimerCallbackAsync,
|
||||
null,
|
||||
TimeSpan.FromMilliseconds(options.Value.WebAssemblyStateProviderPollingDelay),
|
||||
TimeSpan.FromMilliseconds(options.Value.WebAssemblyStateProviderPollingInterval));
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
private async void TimerCallback(object? _)
|
||||
private async void TimerCallbackAsync(object? _)
|
||||
{
|
||||
await _semaphore.WaitAsync();
|
||||
try
|
||||
{
|
||||
_user = await RefreshUser();
|
||||
_user = await RefreshUserAsync();
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
@ -52,7 +52,7 @@ internal class BffClientAuthenticationStateProvider : AuthenticationStateProvide
|
|||
}
|
||||
}
|
||||
|
||||
private async Task<ClaimsPrincipal> RefreshUser()
|
||||
private async Task<ClaimsPrincipal> RefreshUserAsync()
|
||||
{
|
||||
// We don't want to do any polling if we already know that the user is anonymous.
|
||||
// There's no way for us to become authenticated without the server issuing a cookie
|
||||
|
|
@ -94,7 +94,7 @@ internal class BffClientAuthenticationStateProvider : AuthenticationStateProvide
|
|||
if (_user == null)
|
||||
#pragma warning restore CA1508
|
||||
{
|
||||
_user = await RefreshUser();
|
||||
_user = await RefreshUserAsync();
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ internal class ServerSideTokenStore(
|
|||
Ct ct = default)
|
||||
{
|
||||
logger.RetrievingTokenForUser(LogLevel.Debug, user.Identity?.Name);
|
||||
var session = await GetSession(user);
|
||||
var session = await GetSessionAsync(user);
|
||||
if (session == null)
|
||||
{
|
||||
var anonymous = new ClaimsPrincipal(new ClaimsIdentity());
|
||||
|
|
@ -50,7 +50,7 @@ internal class ServerSideTokenStore(
|
|||
return tokensInAuthProperties.GetUserToken(ticket.Properties, parameters);
|
||||
}
|
||||
|
||||
private async Task<UserSession?> GetSession(ClaimsPrincipal user)
|
||||
private async Task<UserSession?> GetSessionAsync(ClaimsPrincipal user)
|
||||
{
|
||||
if (user.Identity?.IsAuthenticated == false)
|
||||
{
|
||||
|
|
@ -86,7 +86,7 @@ internal class ServerSideTokenStore(
|
|||
UserTokenRequestParameters? parameters = null, Ct ct = default)
|
||||
{
|
||||
logger.StoringTokenForUser(LogLevel.Debug, user.Identity?.Name);
|
||||
await UpdateTicket(user,
|
||||
await UpdateTicketAsync(user,
|
||||
async ticket => { await tokensInAuthProperties.SetUserTokenAsync(token, ticket.Properties, parameters, ct); });
|
||||
}
|
||||
|
||||
|
|
@ -94,16 +94,16 @@ internal class ServerSideTokenStore(
|
|||
public async Task ClearTokenAsync(ClaimsPrincipal user, UserTokenRequestParameters? parameters = null, Ct ct = default)
|
||||
{
|
||||
logger.RemovingTokenForUser(LogLevel.Debug, user.Identity?.Name);
|
||||
await UpdateTicket(user, ticket =>
|
||||
await UpdateTicketAsync(user, ticket =>
|
||||
{
|
||||
tokensInAuthProperties.RemoveUserToken(ticket.Properties, parameters);
|
||||
return Task.CompletedTask;
|
||||
});
|
||||
}
|
||||
|
||||
protected async Task UpdateTicket(ClaimsPrincipal user, Func<AuthenticationTicket, Task> updateAction)
|
||||
protected async Task UpdateTicketAsync(ClaimsPrincipal user, Func<AuthenticationTicket, Task> updateAction)
|
||||
{
|
||||
var session = await GetSession(user);
|
||||
var session = await GetSessionAsync(user);
|
||||
if (session == null)
|
||||
{
|
||||
logger.FailedToFindSessionToUpdate(LogLevel.Debug);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<Project>
|
||||
|
||||
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))" />
|
||||
<Import Project="../../src.props" />
|
||||
<Import Project="../../../src.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<PackageTags>OAuth 2.0;OpenID Connect;Security;BFF;IdentityServer;ASP.NET Core;SPA;Blazor</PackageTags>
|
||||
|
|
@ -17,6 +17,9 @@
|
|||
|
||||
<!-- RS0027: API with optional parameter(s) should have the most parameters amongst its public overloads -->
|
||||
<NoWarn>$(NoWarn);RS0027</NoWarn>
|
||||
|
||||
<!-- IDE1006: Naming rule violation (async suffix) - pre-existing in BFF code -->
|
||||
<NoWarn>$(NoWarn);IDE1006</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<Project>
|
||||
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)..\'))" />
|
||||
<Import Project="../../src.targets" />
|
||||
<Import Project="../../../src.targets" />
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -33,5 +33,5 @@
|
|||
<NoWarn>$(NoWarn);CA2201</NoWarn><!-- Do not raise reserved exception types -->
|
||||
<NoWarn>$(NoWarn);CA2254</NoWarn><!-- Template should be a static expression -->
|
||||
</PropertyGroup>
|
||||
<Import Project="../../test.props" />
|
||||
<Import Project="../../../test.props" />
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,6 @@
|
|||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\shared\Xunit.Playwright\Xunit.Playwright.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\shared\Xunit.Playwright\Xunit.Playwright.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -30,61 +30,6 @@
|
|||
<Folder Name="/cli/testing/">
|
||||
<Project Path="cli/testing/Cli.TestPlugin/Cli.TestPlugin.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/" />
|
||||
<Folder Name="/bff/hosts/">
|
||||
<Project Path="bff/hosts/Hosts.AppHost/Hosts.AppHost.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.Bff.DPoP/Hosts.Bff.DPoP.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.Bff.EF/Hosts.Bff.EF.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.Bff.InMemory/Hosts.Bff.InMemory.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.Bff.MultiFrontend/Hosts.Bff.MultiFrontend.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.Bff.Performance/Hosts.Bff.Performance.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.IdentityServer/Hosts.IdentityServer.csproj" />
|
||||
<Project Path="bff/hosts/Hosts.ServiceDefaults/Hosts.ServiceDefaults.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/hosts/Blazor/" />
|
||||
<Folder Name="/bff/hosts/Blazor/PerComponent/">
|
||||
<Project Path="bff/hosts/Blazor/PerComponent/Hosts.Bff.Blazor.PerComponent.Client/Hosts.Bff.Blazor.PerComponent.Client.csproj" />
|
||||
<Project Path="bff/hosts/Blazor/PerComponent/Hosts.Bff.Blazor.PerComponent/Hosts.Bff.Blazor.PerComponent.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/hosts/Blazor/WebAssembly/">
|
||||
<Project Path="bff/hosts/Blazor/WebAssembly/Hosts.Bff.Blazor.WebAssembly.Client/Hosts.Bff.Blazor.WebAssembly.Client.csproj" />
|
||||
<Project Path="bff/hosts/Blazor/WebAssembly/Hosts.Bff.Blazor.WebAssembly/Hosts.Bff.Blazor.WebAssembly.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/hosts/RemoteApis/">
|
||||
<Project Path="bff/hosts/RemoteApis/Hosts.RemoteApi.DPoP/Hosts.RemoteApi.DPoP.csproj" />
|
||||
<Project Path="bff/hosts/RemoteApis/Hosts.RemoteApi.Isolated/Hosts.RemoteApi.Isolated.csproj" />
|
||||
<Project Path="bff/hosts/RemoteApis/Hosts.RemoteApi/Hosts.RemoteApi.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/migrations/">
|
||||
<Project Path="bff/migrations/UserSessionDb/UserSessionDb.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/performance/">
|
||||
<Project Path="bff/performance/Bff.Benchmarks/Bff.Benchmarks.csproj" />
|
||||
<Project Path="bff/performance/Bff.Performance/Bff.Performance.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/src/">
|
||||
<Project Path="bff/src/Bff.Blazor.Client/Bff.Blazor.Client.csproj" />
|
||||
<Project Path="bff/src/Bff.Blazor/Bff.Blazor.csproj" />
|
||||
<Project Path="bff/src/Bff.EntityFramework/Bff.EntityFramework.csproj" />
|
||||
<Project Path="bff/src/Bff.Yarp/Bff.Yarp.csproj" />
|
||||
<Project Path="bff/src/Bff/Bff.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/templates/" />
|
||||
<Folder Name="/bff/templates/src/">
|
||||
<Project Path="bff/templates/src/BffLocalApi/BffLocalApi.csproj" />
|
||||
<Project Path="bff/templates/src/BffRemoteApi/BffRemoteApi.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/templates/src/BffBlazorAutoRenderMode/">
|
||||
<Project Path="bff/templates/src/BffBlazorAutoRenderMode/BffBlazorAutoRenderMode.Client/BffBlazorAutoRenderMode.Client.csproj" />
|
||||
<Project Path="bff/templates/src/BffBlazorAutoRenderMode/BffBlazorAutoRenderMode/BffBlazorAutoRenderMode.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/test/">
|
||||
<Project Path="bff/test/Bff.Tests/Bff.Tests.csproj" />
|
||||
<Project Path="bff/test/Hosts.Tests/Hosts.Tests.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/bff/tools/">
|
||||
<Project Path="bff/tools/PublicApi/PublicApi.csproj" />
|
||||
</Folder>
|
||||
<Folder Name="/conformance-report/" />
|
||||
<Folder Name="/conformance-report/src/">
|
||||
<Project Path="conformance-report/src/ConformanceReport/ConformanceReport.csproj" />
|
||||
|
|
|
|||
Loading…
Reference in a new issue