Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
150613 stories
·
33 followers

Random.Code() - Managing Properties From Records in C#, Part 5

1 Share
From: Jason Bock
Duration: 0:00
Views: 2

A Sunday night coding stream? Why not! Got my first test passing this morning, so let's write more tests and see what breaks.

https://github.com/JasonBock/Transpire/issues/44

#dotnet #csharp

Read the whole story
alvinashcraft
55 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Microsoft confirms Windows 11 dark mode upgrade, with plans for third-party apps and Registry Editor

1 Share

Windows 11 has a full-fledged dark theme, and it works well for the most part, but it doesn’t really apply to legacy pop-ups, such as the Properties tab. Windows Latest has learned that Microsoft is preparing to roll out a dark-themed Properties tab, and now a senior executive has confirmed the plans.

In a response to developer Albacore and Microsoft watcher Zac, Marcus Ash, who leads Design and Research for Windows and Devices, confirmed that a major dark mode upgrade is in progress.

According to Marcus Ash, Microsoft is building tools to bring dark mode to more areas of Windows 11 and plans to keep improving consistency. The company won’t make commitments just yet, but there are also plans to cover legacy tools like the Registry Editor.

“We are pushing to get our tools/techniques to the point where we can get dark theme into more areas across Windows. No timelines to commit to yet for Regedit. As we make progress in various legacy system panels/dialogs, we will keep improving consistency,” Marcus Ash wrote in a X post.

However, Microsoft may be able to roll out dark mode across all system-level dialogs and pages in Windows, but it can’t force third-party apps to use dark mode, as that might end up breaking the interface.

This means third-party tabs that haven’t adopted dark theme will continue to appear in light mode, but that doesn’t mean Microsoft has no plans to encourage more third-party developers to better support Windows 11 theming.

“Third-party tabs that haven’t adopted dark theme support will render in light. We’re focused on improving platform support to make dark mode easier for developers to adopt across their tabs,” Microsoft’s executive noted in another X post.

Microsoft won’t tell us when major dark mode improvements will roll out, but it’s definitely coming later this year.

What’s wrong with Windows 11’s dark mode?

Right now, if you use Windows 11 in dark mode and go to different areas of the operating system, such as the Properties tab in File Explorer, you’ll see a light background.

Properties tab with light theme in Windows 11

You might argue how difficult it is to paint every corner of File Explorer with a dark background when File Explorer itself runs in dark mode. Well, it’s not as easy as you might think, and it’s largely because of how Windows is built.

Windows does not draw every interface element from the same shared theme pipeline, so dark mode does not automatically apply consistently across all components.

As a result, most legacy features in Windows still do not support dark mode. If you open Bluetooth & devices settings, then click on Send and receive files, Windows will open a legacy dialog that still uses a light background.

Bluetooth file transfer in Windows

Or if you go to Device Manager and try to update one of the drivers, you’re only going to come across light-themed pop-ups.

Device Manager in Windows 11

I am only sharing a few examples, but there are hundreds of pop-ups in Windows still using a light background, or even design controls from Windows 3.1.

Windows 3.1 UI in Windows 11
Windows 3.1 UI in Windows 11

Dark mode has gotten better in the last few years

In December 2025, the Patch Tuesday update rolled out dark mode across most operations dialogs, including the dialog that shows up when you try to delete a large folder or copy-paste duplicate files or folders.

Operations dialogs dark mode update also includes error dialogs, which appear when you try to delete folders that you shouldn’t, such as the Windows folder.

File Explorer dark mode dialogs for Delete Folder

Likewise, Microsoft also rolled out dark mode to the progress window, which appears when you try to move large files or folders from one location to another.

This change is available on all PCs running Windows 11 25H2/24H2 with recent cumulative updates, and if you haven’t tested it thoroughly yet, I can confirm dark mode shows up across these pop-ups:

  • A dialog that appears when a file is in use.
  • A pop-up that appears when you don’t have enough disk space.
  • Or when you empty the Recycle Bin, Windows needs final confirmation. Even that dialog has dark mode.
  • And even the conflict dialog, which appears when another file with the same name exists.

Other dialogs with dark mode support include zip pop-ups and security warnings. It’s only going to get better from here, as the company has confirmed the big upgrade and is already testing dark mode for Windows Run (legacy).

The post Microsoft confirms Windows 11 dark mode upgrade, with plans for third-party apps and Registry Editor appeared first on Windows Latest

Read the whole story
alvinashcraft
55 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Critter Stack Wide Releases — March Madness Edition

1 Share

As anybody knows who follows the Critter Stack on our Discord server, I’m uncomfortable with the rapid pace of releases that we’ve sustained in the past couple quarters and I think I would like the release cadence to slow down. However, open issues and pull requests feel like money burning a hole in my pocket, and I don’t letting things linger very long. Our rapid cadence is somewhat driven by JasperFx Software client requests, some by our community being quite aggressive in contributing changes, and our users finding new issues that need to be addressed. While I’ve been known to be very unhappy with feedback saying that our frequent release cadence must be a sign of poor quality, I think our community seems to mostly appreciate that we move relatively fast. I believe that we are definitely innovating much faster and more aggressively than any of the other asynchronous messaging tools in the .NET space, so there’s that. Anyway, enough of that, here’s a rundown of the new releases today.

It’s been a busy week across the Critter Stack! We shipped coordinated releases today across all five projects: Marten 8.27, Wolverine 5.25, Polecat 1.5, Weasel 8.11.1, and JasperFx 1.21.1. Here’s a rundown of what’s new.


Marten 8.27.0

Sharded Multi-Tenancy with Database Pooling

For teams operating at extreme scale — we’re talking hundreds of billions of events — Marten now supports a sharded multi-tenancy model that distributes tenants across a pool of databases. Each tenant gets its own native PostgreSQL LIST partition within a shard database, giving you the isolation benefits of per-tenant databases with the operational simplicity of a managed pool.

Configuration is straightforward:

opts.MultiTenantedWithShardedDatabases(x =>
{
    // Connection to the master database that holds the pool registry
    x.ConnectionString = masterConnectionString;

    // Schema for the registry tables in the master database
    x.SchemaName = "tenants";

    // Seed the database pool on startup
    x.AddDatabase("shard_01", shard1ConnectionString);
    x.AddDatabase("shard_02", shard2ConnectionString);
    x.AddDatabase("shard_03", shard3ConnectionString);
    x.AddDatabase("shard_04", shard4ConnectionString);

    // Choose a tenant assignment strategy (see below)
    x.UseHashAssignment(); // this is the default
});

Calling MultiTenantedWithShardedDatabases() automatically enables conjoined tenancy for both documents and events, with native PG list partitions created per tenant.

Three tenant assignment strategies are built-in:

  • Hash Assignment (default) — deterministic FNV-1a hash of the tenant ID. Fast, predictable, no database queries needed. Best when tenants are roughly equal in size.
  • Smallest Database — assigns new tenants to the database with the fewest existing tenants. Accepts a custom IDatabaseSizingStrategy for balancing by row count, disk usage, or any other metric.
  • Explicit Assignment — you control exactly which database hosts each tenant via the admin API.

The admin API lets you manage the pool at runtime: AddTenantToShardAsyncAddDatabaseToPoolAsyncMarkDatabaseFullAsync — all with advisory-locked concurrent safety.

See the multi-tenancy documentation for the full details.

Bulk COPY Event Append for High-Throughput Seeding

For data migrations, test fixture setup, load testing, or importing events from external systems, Marten now supports a bulk COPY-based event append that uses PostgreSQL’s COPY ... FROM STDIN BINARY for maximum throughput:

// Build up a list of stream actions with events
var streams = new List<StreamAction>();

for (int i = 0; i < 1000; i++)
{
    var streamId = Guid.NewGuid();
    var events = new object[]
    {
        new OrderPlaced(streamId, "Widget", 5),
        new OrderShipped(streamId, $"TRACK-{i}"),
        new OrderDelivered(streamId, DateTimeOffset.UtcNow)
    };

    streams.Add(StreamAction.Start(store.Events, streamId, events));
}

// Bulk insert all events using PostgreSQL COPY for maximum throughput
await store.BulkInsertEventsAsync(streams);

This supports all combinations of Guid/string identity, single/conjoined tenancy, archived stream partitioning, and metadata columns. When using conjoined tenancy, a tenant-specific overload is available:

await store.BulkInsertEventsAsync("tenant-abc", streams);

See the event appending documentation for more.

Other Fixes

  • FetchForWriting now auto-discovers natural keys without requiring an explicit projection registration, and works correctly with strongly typed IDs combined with UseIdentityMapForAggregates
  • Compiled queries using IsOneOf with array parameters now generate correct SQL
  • EF Core OwnsOne().ToJson() support (via Weasel 8.11.1) — schema diffing now correctly handles JSON column mapping when Marten and EF Core share a database
  • Thanks to @erdtsieck for fixing duplicate codegen when using secondary document stores!

Wolverine 5.25.0

This is a big release with 12 PRs merged — a mix of bug fixes, new features, and community contributions.

MassTransit and NServiceBus Interop for Azure Service Bus Topics

Previously, MassTransit and NServiceBus interoperability was only available on Azure Service Bus queues. With 5.25, you can now interoperate on ASB topics and subscriptions too — making it much easier to migrate incrementally or coexist with other .NET messaging frameworks:

// Publish to a topic with NServiceBus interop
opts.PublishAllMessages().ToAzureServiceBusTopic("nsb-topic")
    .UseNServiceBusInterop();

// Listen on a subscription with MassTransit interop
opts.ListenToAzureServiceBusSubscription("wolverine-sub")
    .FromTopic("wolverine-topic")
    .UseMassTransitInterop(mt => { })
    .DefaultIncomingMessage<ResponseMessage>().UseForReplies();

Both UseMassTransitInterop() and UseNServiceBusInterop() are available on AzureServiceBusTopic (for publishing) and AzureServiceBusSubscription (for listening). This is ideal for brownfield scenarios where you’re migrating services one at a time and need different messaging frameworks to talk to each other through shared ASB topics.

Other New Features

  • Handler Type Naming for Conventional Routing — NamingSource.FromHandlerType names listener queues after the handler type instead of the message type, useful for modular monolith scenarios with multiple handlers per message
  • Enhanced WolverineParameterAttribute — new FromHeaderFromClaim, and FromMethod value sources for binding handler parameters to HTTP headers, claims, or static method return values
  • Full Tracing for InvokeAsync — opt-in InvokeTracingMode.Full emits the same structured log messages as transport-received messages, with zero overhead in the default path
  • Configurable SQL transport polling interval — thanks to new contributor @xwipeoutx!

Bug Fixes


Polecat 1.5.0

Polecat — the Critter Stack’s newer, lighter-weight event store option — had a big jump from 1.2 to 1.5:

  • net9.0 support and CI workflow
  • SingleStreamProjection<TDoc, TId> with strongly-typed ID support
  • Auto-discover natural keys for FetchForWriting
  • Conjoined tenancy support for DCB tags and natural keys
  • Fix for FetchForWriting with UseIdentityMapForAggregates and strongly typed IDs

Weasel 8.11.1

  • EF Core OwnsOne().ToJson() support — Weasel’s schema diffing now correctly handles EF Core’s JSON column mapping, preventing spurious migration diffs when Marten and EF Core share a database

JasperFx 1.21.1 / JasperFx.Events 1.24.1

  • Skip unknown flags when AutoStartHost is true — fixes an issue where unrecognized CLI flags would cause errors during host auto-start
  • Retrofit IEventSlicer tests

Upgrading

All packages are available on NuGet now. The Marten and Wolverine releases are fully coordinated — if you’re using the Critter Stack together, upgrade both at the same time for the best experience.

As always, please report any issues on the respective GitHub repositories and join us on the Critter Stack Discord if you have questions!



Read the whole story
alvinashcraft
56 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

A technical report on Composer 2

1 Share
Read the whole story
alvinashcraft
57 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Did you sign up for the new White House app? Don’t use it until you read this!

1 Share
Did you sign up for the new White House app? Don’t use it until you read this, because it puts your privacy and data security at risk. Patrick Quirk takes an impressive technical piece and distills it for those of us who are not developers or coders. His article is based on original research by...

Source

Read the whole story
alvinashcraft
4 hours ago
reply
Pennsylvania, USA
Share this story
Delete

Multi-Model Support in GitHub Copilot SDK: GPT-5 vs Claude in C#

1 Share

Learn multi-model support in GitHub Copilot SDK: configure GPT-5 and Claude in C#, compare capabilities, build model-agnostic .NET apps.

Read the whole story
alvinashcraft
4 hours ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories