|
40 | 40 | ## Execution results |
41 | 41 |
|
42 | 42 | - Baseline: 300 core tests and 10 MessagePack tests passed; 18 existing tests were skipped. |
43 | | -- Final non-Windows suite: 324 core tests and 11 MessagePack tests passed; 0 failed; 18 tests were skipped. |
44 | | -- Focused DI coverage now includes singleton and transient compatibility, constructor injection, isolated containers, late replacement, `IServiceCollection` overrides, open generics, container disposal, external instance ownership, and host-provider disposal of the default client. |
45 | | -- Serializer coverage retains exact wire-format assertions and adds regressions for exclusions inside collections and settings, depth limits, reference loops in string and stream paths, public fields, the legacy ignore attribute, `DataDictionary` interface mutation, structured/raw values, settings coercion, and MessagePack round-trips. |
| 43 | +- Final non-Windows suite: 370 core tests and 12 MessagePack tests passed; 0 failed; 18 existing tests were skipped. |
| 44 | +- Focused DI coverage now includes singleton and transient compatibility, constructor injection, isolated containers, coherent provider snapshots after late replacement, `IServiceCollection` overrides and enumeration, open generics, exact disposal of every provider snapshot, external instance ownership, per-host client isolation, and host-versus-caller disposal ownership. |
| 45 | +- Serializer coverage retains exact wire-format assertions and adds regressions for exclusions inside collections and settings, named floating-point values, declared-type depth limits, cycles, malformed getters, predicates, converters, and iterators, STJ custom converters/number handling/extension data, stream/string parity, public fields, the legacy ignore attribute, every `DataDictionary` interface path, structured/raw values, settings and POST-data coercion, and MessagePack raw-object round-trips. |
| 46 | +- Linux CI now collects and uploads Cobertura coverage for both test assemblies. The final core report is 74% line / 50% branch overall and 88.1% of executable production lines changed by the PR are covered; the migration-critical components are substantially higher: `JsonValueWriter` 97% line / 93% branch, `DataDictionaryConverter` 93% / 81%, `JsonElementValueConverter` 96% / 96%, `SettingsDictionaryConverter` 89% / 83%, `DataDictionary` 99% / 92%, and the Microsoft DI resolver 84% / 61%. |
46 | 47 | - `net462` core and `net472` test assemblies build with 0 warnings and 0 errors when Windows targeting is forced on macOS. Runtime execution of the .NET Framework tests still belongs in Windows CI. |
47 | 48 | - The non-Windows solution packs successfully. A Windows-shaped core package containing both `net462` and `netstandard2.0` assets also packs successfully with explicit `SolutionDir`. |
48 | | -- `net8.0` and `net10.0` core builds pass with 0 AOT/trim/single-file warnings. Real NativeAOT executables now cover the packed NuGet assets, default Microsoft DI/default serialization, source-generated custom properties and fields, storage round-trips, queued submission, identifiable exception frames, and Generic Host startup/shutdown on both target frameworks. Linux CI publishes and executes the package and hosting smoke applications with linker warnings treated as errors. |
| 49 | +- `net8.0` and `net10.0` core builds pass with 0 AOT/trim/single-file warnings. Real NativeAOT executables now cover the packed NuGet assets, default Microsoft DI/default serialization, source-generated custom properties and fields, event-batch serialization, storage round-trips, queued submission, identifiable exception frames across rethrow boundaries, and Generic Host startup/shutdown on both target frameworks. The `net10.0` smoke found and fixed an offset-only runtime frame with no usable identity; those empty frames are now omitted. Linux CI publishes and executes the package and hosting smoke applications with linker warnings treated as errors. |
49 | 50 | - SDK ApiCompat is clean from the previous `netstandard2.0` asset to both the new `netstandard2.0` and `net8.0` assets. Compatibility shims retain the legacy ignore attribute, serializer delegates, and `AssemblyHelper.GetTypes` API. |
50 | 51 | - Release builds now actually treat warnings as errors; the previous `WarningsAsErrors=true` property was a warning-code list rather than the boolean build gate. |
51 | 52 |
|
|
54 | 55 | - The non-Windows core package grows from 596,508 bytes to 686,321 bytes (about 15%) because it contains `netstandard2.0`, `net8.0`, and `net10.0` assets instead of one asset. Its uncompressed contents shrink from 2,261,763 bytes to 1,792,690 bytes (about 21%), and the `netstandard2.0` assembly shrinks from 998,912 bytes to 348,160 bytes (about 65%). |
55 | 56 | - Every package inherits `Microsoft.Extensions.DependencyInjection` 8 through the core package. The `netstandard2.0`, `net462`, and `net8.0` dependency groups also carry System.Text.Json 10, which is the largest deployment and binding-risk change for .NET Framework applications. |
56 | 57 | - The existing `IDependencyResolver` and public setup APIs remain compatible. Microsoft DI backs the client-owned resolver and exposes an `IServiceCollection` customization seam; registrations from an application's root Generic Host provider are not automatically imported into the client's isolated provider. |
| 58 | +- Configuration-based hosting overloads now create one client owned by each host provider instead of mutating the process-wide `ExceptionlessClient.Default`. Explicit client overloads remain caller-owned. Configuration-based logging providers likewise own an isolated client, while providers given an existing client only flush it and do not dispose it. This removes cross-host configuration/disposal interference but changes code that intentionally depended on those overloads mutating the global default. |
57 | 59 | - Custom payloads now follow System.Text.Json contracts. Public fields and `ExceptionlessIgnoreAttribute` remain supported, but consumers relying on Newtonsoft-specific contracts such as `DataContract`/`DataMember` behavior should migrate to STJ attributes and source-generated metadata. |
| 60 | +- Filtered event serialization remains streaming for normal objects, dictionaries, and collections. Converter-backed leaf values are preflighted before their property name is written so a failing converter cannot corrupt the containing event; this adds a small per-leaf allocation only for custom converter-backed values. |
58 | 61 | - The `net8.0` and later core assets use normal runtime stack traces instead of the legacy IL/PDB demystifier. NativeAOT frames retain parsed method identity, but modern JIT consumers also lose enhanced demystification. |
59 | 62 | - Although ApiCompat is clean, the serializer behavior, transitive dependency graph, target assets, and modern-stack-trace change are substantial enough to recommend a 7.0 release rather than shipping the work as 6.2.1. |
60 | 63 |
|
61 | 64 | ## Remaining release gates |
62 | 65 |
|
63 | 66 | - Run the net462/net472 tests and package-load checks on a real Windows runner; macOS cross-compilation passes but cannot prove .NET Framework runtime binding behavior. |
64 | 67 | - Require the Linux, macOS, and Windows build jobs in branch protection. The repository currently requires only `license/cla`, so the new regression gates are not merge-enforced yet. |
65 | | -- Push/open the branch only with awareness that non-PR Windows pushes publish prerelease packages to GitHub Packages and Feedz. |
| 68 | +- Keep draft PR #368 open until the real Windows runtime checks are green. Be aware that additional non-PR Windows pushes publish prerelease packages to GitHub Packages and Feedz. |
66 | 69 |
|
67 | 70 | ## Historical NativeAOT comparison |
68 | 71 |
|
|
0 commit comments