
Yu Chen (Partner) asked a question.
Environment
- Package: `Progress.Sitefinity.AspNetCore` 15.4.8630.28 (also `.FormWidgets`, `.Widgets`, `Progress.Sitefinity.Renderer`, `Progress.Sitefinity.RestSdk` same version)
- Target framework: `net10.0`
- OS: macOS (Darwin 24.6.0, Apple Silicon)
- SDK: .NET 10
Issue
`WebApplicationBuilder.Build()` throws on macOS:
```
System.AggregateException: Some services are not able to be constructed
(Error while validating the service descriptor 'ServiceType:
Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitorService
Lifetime: Singleton ImplementationType:
Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitorService':
Unable to resolve service for type
'Microsoft.Extensions.Diagnostics.ResourceMonitoring.ISnapshotProvider'
while attempting to activate
'Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitorService'.)
at Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build()
at Program.<Main>$(String[] args) in Program.cs
```
Root cause
`AddSitefinity()` transitively references `Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization`, which calls `AddResourceMonitoring()`. That extension only registers an `ISnapshotProvider` implementation on Windows (`WindowsSnapshotProvider`) or Linux (`LinuxUtilizationProvider`) — macOS has no provider, so `ResourceMonitorService` cannot be resolved.
Tracked upstream at [dotnet/extensions#5962](https://github.com/dotnet/extensions/issues/5962) (open since Feb 2025).
This blocks all local dev on macOS. Production (Azure App Service / Linux) unaffected.
Reproduction
1. Create minimal ASP.NET Core `net10.0` project on macOS.
2. Add `Progress.Sitefinity.AspNetCore` 15.4.8630.28.
3. `builder.Services.AddSitefinity();`
4. `dotnet run` → exception above.
Current workaround
Register a stub `ISnapshotProvider` before `AddSitefinity()`:
```csharp
if (OperatingSystem.IsMacOS())
{
#pragma warning disable EXTOBS0001
builder.Services.AddSingleton<ISnapshotProvider, NoopSnapshotProvider>();
#pragma warning restore EXTOBS0001
}
```
with a no-op `ISnapshotProvider` returning zeroed `Snapshot` / `SystemResources`:
```csharp
using Microsoft.Extensions.Diagnostics.ResourceMonitoring;
internal sealed class NoopSnapshotProvider : ISnapshotProvider
{
public SystemResources Resources { get; } = new(1, 1, 1, 1);
public Snapshot GetSnapshot() => new(
totalTimeSinceStart: TimeSpan.Zero,
kernelTimeSinceStart: TimeSpan.Zero,
userTimeSinceStart: TimeSpan.Zero,
memoryUsageInBytes: 0);
}
```
Functional but relies on obsolete API (`EXTOBS0001`).
I would recommend a support ticket. I would look into it but i don't have a Mac :/