Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2,249 changes: 1,818 additions & 431 deletions .editorconfig

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
This repository’s canonical agent guidance has been consolidated into:

- `agent.md` in the root folder or relative path is `../agent.md` to this file.
- `agents.md` in the root folder or relative path is `../agents.md` to this file.

GitHub Copilot (and other coding agents) should read and follow `agent.md` for build/test commands, repository architecture context, coding standards, and AOT requirements.
GitHub Copilot (and other coding agents) should read and follow `agents.md` for build/test commands, repository architecture context, coding standards, and AOT requirements.

If there is any conflict between this file and `agent.md`, follow **agent.md**.
If there is any conflict between this file and `agents.md`, follow **agents.md**.
10 changes: 2 additions & 8 deletions .github/workflows/BuildDeploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,15 @@ jobs:
with:
fetch-depth: 0

- name: Setup .NET (With cache)
- name: Setup .NET
uses: actions/setup-dotnet@v5.3.0
with:
dotnet-version: |
8.0.x
9.0.x
10.0.x
11.0.x
dotnet-quality: 'preview'
cache: true
cache-dependency-path: |
**/Directory.Packages.props
**/*.slnx
**/*.csproj
**/global.json
**/nuget.config

- name: NBGV
id: nbgv
Expand Down
10 changes: 2 additions & 8 deletions .github/workflows/BuildOnly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,15 @@ jobs:
with:
fetch-depth: 0

- name: Setup .NET (With cache)
- name: Setup .NET
uses: actions/setup-dotnet@v5.3.0
with:
dotnet-version: |
8.0.x
9.0.x
10.0.x
11.0.x
dotnet-quality: 'preview'
cache: true
cache-dependency-path: |
**/Directory.Packages.props
**/*.slnx
**/*.csproj
**/global.json
**/nuget.config

- name: NBGV
id: nbgv
Expand Down
7 changes: 6 additions & 1 deletion agent.md → AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# agent.md
# AGENTS.md

This file is the single source of truth for AI/agent assistance in this repository (Claude Code, GitHub Copilot, and other coding agents). It consolidates build/test commands, architecture context, coding standards, and AOT guidance.

Expand Down Expand Up @@ -373,3 +373,8 @@ _total = this.WhenAnyValue(
* Expression trees in hot paths without caching
* Platform-specific code in `src/Extensions.Hosting.SingleInstance/` core library
* Breaking public APIs without proper versioning and documentation


Follow the canonical repository agent guidance in @agent.md.

If anything in this file conflicts with @agent.md, follow @agent.md.
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# CLAUDE.md

Follow the canonical repository agent guidance in @agent.md.
Follow the canonical repository agent guidance in @agents.md.

If anything in this file conflicts with @agent.md, follow @agent.md.
If anything in this file conflicts with @agents.md, follow @agents.md.
138 changes: 138 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
<Net8PackageVersion>8.0.28</Net8PackageVersion>
<Net9PackageVersion>9.0.17</Net9PackageVersion>
<Net10PackageVersion>10.0.9</Net10PackageVersion>
<Net11PreviewPackageVersion>11.0.0-preview.5.26302.115</Net11PreviewPackageVersion>
<MauiNet9PackageVersion>9.0.120</MauiNet9PackageVersion>
<MauiNet10PackageVersion>10.0.71</MauiNet10PackageVersion>
<MauiNet11PackageVersion>11.0.0-preview.5.26304.4</MauiNet11PackageVersion>
</PropertyGroup>

<ItemGroup>
<PackageVersion Include="Avalonia" Version="12.0.5" />
<PackageVersion Include="Avalonia.Desktop" Version="12.0.5" />
<PackageVersion Include="Avalonia.Themes.Fluent" Version="12.0.5" />
<PackageVersion Include="CP.Nuke.BuildTools" Version="3.0.2" />
<PackageVersion Include="log4net" Version="3.3.2" />
<PackageVersion Include="Microsoft.Build.Tasks.Core" Version="18.7.1" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="18.7.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="10.0.300" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.8.0" />
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="2.2.0" />
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.10.85" />
<PackageVersion Include="NuGet.Protocol" Version="7.6.0" />
<PackageVersion Include="Nuke.Common" Version="10.1.0" />
<PackageVersion Include="PublicApiGenerator" Version="11.5.4" />
<PackageVersion Include="ReactiveUI" Version="24.0.0-beta.3" />
<PackageVersion Include="ReactiveUI.Avalonia" Version="12.1.0-beta.1" />
<PackageVersion Include="ReactiveUI.Core" Version="24.0.0-beta.3" />
<PackageVersion Include="ReactiveUI.Disposables" Version="6.0.0" />
<PackageVersion Include="ReactiveUI.Drawing" Version="24.0.0-beta.3" />
<PackageVersion Include="ReactiveUI.Maui" Version="24.0.0-beta.3" />
<PackageVersion Include="ReactiveUI.Primitives" Version="6.0.0" />
<PackageVersion Include="ReactiveUI.Primitives.Core" Version="6.0.0" />
<PackageVersion Include="ReactiveUI.WinForms" Version="24.0.0-beta.3" />
<PackageVersion Include="ReactiveUI.WinUI" Version="24.0.0-beta.3" />
<PackageVersion Include="ReactiveUI.WPF" Version="24.0.0-beta.3" />
<PackageVersion Include="Roslynator.Analyzers" Version="4.15.0" />
<PackageVersion Include="Splat" Version="20.0.0" />
<PackageVersion Include="Splat.Microsoft.Extensions.DependencyInjection" Version="20.0.0" />
<PackageVersion Include="SQLitePCLRaw.lib.e_sqlite3" Version="3.50.3" />
<PackageVersion Include="StyleSharp.Analyzers" Version="3.16.0" />
<PackageVersion Include="Tmds.DBus.Protocol" Version="0.94.2" />
<PackageVersion Include="TUnit" Version="1.58.0" />
<PackageVersion Include="Verify.TUnit" Version="31.20.0" />
</ItemGroup>

<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0')) != 'true'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Configuration" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.TraceSource" Version="$(Net10PackageVersion)" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="$(Net10PackageVersion)" />
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="$(Net10PackageVersion)" />
</ItemGroup>

<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0')) == 'true'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Configuration" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.TraceSource" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="$(Net11PreviewPackageVersion)" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.StartsWith('net8'))">
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(Net8PackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="$(Net8PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(Net8PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(Net8PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="$(Net8PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(Net10PackageVersion)" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(Net10PackageVersion)" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.StartsWith('net9'))">
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(Net9PackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="$(Net9PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(Net9PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(Net9PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="$(Net9PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiNet9PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Core" Version="$(MauiNet9PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Essentials" Version="$(MauiNet9PackageVersion)" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.StartsWith('net10')) or '$(TargetFramework)' == ''">
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(Net10PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiNet10PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Core" Version="$(MauiNet10PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Essentials" Version="$(MauiNet10PackageVersion)" />
</ItemGroup>

<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0')) == 'true'">
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(Net11PreviewPackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiNet11PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Core" Version="$(MauiNet11PackageVersion)" />
<PackageVersion Include="Microsoft.Maui.Essentials" Version="$(MauiNet11PackageVersion)" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion build/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
//// FetchDepth = 0,
//// ImportSecrets = new[] { nameof(NuGetApiKey) },
//// InvokedTargets = new[] { nameof(Compile), nameof(Deploy) })]
partial class Build : NukeBuild
sealed partial class Build : NukeBuild
{
public static int Main() => Execute<Build>(x => x.Pack);

Expand Down
3 changes: 3 additions & 0 deletions build/Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ public class Configuration : Enumeration

public static implicit operator string(Configuration configuration) =>
configuration?.Value;

public static string FromConfiguration(Configuration configuration) =>
configuration?.Value;
}
10 changes: 5 additions & 5 deletions build/_build.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
Expand All @@ -12,13 +12,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CP.Nuke.BuildTools" Version="3.0.2" />
<PackageReference Include="Nerdbank.GitVersioning" Version="3.10.85" />
<PackageReference Include="Nuke.Common" Version="10.1.0" />
<PackageReference Include="CP.Nuke.BuildTools" />
<PackageReference Include="Nerdbank.GitVersioning" />
<PackageReference Include="Nuke.Common" />
</ItemGroup>

<ItemGroup>
<PackageDownload Include="nbgv" Version="[3.9.50]" />
<PackageDownload Include="nbgv" Version="[3.10.85]" />
</ItemGroup>

</Project>
26 changes: 13 additions & 13 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<Nullable>enable</Nullable>
<PackageIcon>logo.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageReleaseNotes>Compatability with Net 8 / 9 / 10 and net462 / net472 / net481</PackageReleaseNotes>
<PackageReleaseNotes>Compatability with Net 8 / 9 / 10 / 11 and net462 / net472 / net481</PackageReleaseNotes>
<PackageTags>Microsoft;Extensions;Hosting;Rx;ReactiveUI;net;netframework</PackageTags>
<EnableNETAnalyzers>True</EnableNETAnalyzers>
<AnalysisLevel>latest</AnalysisLevel>
Expand All @@ -30,8 +30,10 @@
<!-- Include PDB in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<IncludePackageReferencesDuringMarkupCompilation>true</IncludePackageReferencesDuringMarkupCompilation>
<CoreVersion>10.0.7</CoreVersion>
<AvaloniaVersion>12.0.2</AvaloniaVersion>
</PropertyGroup>

<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
Expand All @@ -47,11 +49,11 @@
</PropertyGroup>

<ItemGroup Condition="$(IsTestProject)">
<PackageReference Include="TUnit" Version="1.56.35"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.7.0"/>
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.8.0"/>
<PackageReference Include="PublicApiGenerator" Version="11.5.4"/>
<PackageReference Include="Verify.TUnit" Version="31.20.0"/>
<PackageReference Include="TUnit"/>
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage"/>
<PackageReference Include="PublicApiGenerator"/>
<PackageReference Include="Verify.TUnit"/>

<None Include="$(MSBuildThisFileDirectory)testconfig.json">
<Link>$(AssemblyName).testconfig.json</Link>
Expand All @@ -60,7 +62,7 @@
</ItemGroup>

<ItemGroup Condition="'$(IsTestProject)' != 'true'">
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.300" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
Expand All @@ -70,9 +72,7 @@
</ItemGroup>

<ItemGroup>
<!--<Compile Update="**\*.cs" DependentUpon="I%(Filename).cs" />-->
<PackageReference Include="stylecop.analyzers" Version="1.2.0-beta.556" PrivateAssets="all" />
<PackageReference Include="Roslynator.Analyzers" Version="4.15.0" PrivateAssets="All" />
<AdditionalFiles Include="$(MSBuildThisFileDirectory)..\stylecop.json" Link="stylecop.json" />
<PackageReference Include="StyleSharp.Analyzers" PrivateAssets="all" />
<PackageReference Include="Roslynator.Analyzers" PrivateAssets="All" />
</ItemGroup>
</Project>
Loading
Loading