diff --git a/CHANGELOG.md b/CHANGELOG.md index 0256603..7cae5fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,12 +53,24 @@ public API only — no breaking change. ### Changed -- Built against `Wolfgang.Etl.Abstractions` 0.17.0 → **0.18.0**. +- Built against `Wolfgang.Etl.Abstractions` 0.17.0 → **0.18.1**. +- The doubles build their progress `Report` via the new + `Report(int, DateTimeOffset?, TimeSpan, int?)` constructor (Abstractions 0.18.1) instead of + the object-initializer form, so setting the timing/total values is safe cross-assembly on + every target framework (see Fixed). - The doubles' `CreateProgressReport()` now surfaces the base's `StartedAt`/`Elapsed` timing (Abstractions 0.14.0) in the `Report`, so `ItemsPerSecond` is computed for reported progress; the extractor doubles also set `TotalItemCount` from a materialized collection source so `PercentComplete`/`EstimatedRemaining` compute. +### Fixed + +- Surfacing `Report` timing from the doubles no longer throws `MissingMethodException` on + **.NET 6 / .NET 7**. The doubles' `netstandard2.0` assembly (which those runtimes load) set the + `Report` timing via the object-initializer (`init`) form, whose `IsExternalInit` modreq did not + match the modern Abstractions assembly resolved at runtime. The doubles now use the plain + `Report` timing constructor added in Abstractions 0.18.1, which is safe across every framework. + ## [0.10.1] - 2026-07-24 Maintenance release: the deferred "thorough-review" hardening tier plus the diff --git a/src/Wolfgang.Etl.TestKit.Xunit/Wolfgang.Etl.TestKit.Xunit.csproj b/src/Wolfgang.Etl.TestKit.Xunit/Wolfgang.Etl.TestKit.Xunit.csproj index 2d926dd..32a3d37 100644 --- a/src/Wolfgang.Etl.TestKit.Xunit/Wolfgang.Etl.TestKit.Xunit.csproj +++ b/src/Wolfgang.Etl.TestKit.Xunit/Wolfgang.Etl.TestKit.Xunit.csproj @@ -79,7 +79,7 @@ - + diff --git a/src/Wolfgang.Etl.TestKit/FaultyExtractor.cs b/src/Wolfgang.Etl.TestKit/FaultyExtractor.cs index b07fc55..904bcbe 100644 --- a/src/Wolfgang.Etl.TestKit/FaultyExtractor.cs +++ b/src/Wolfgang.Etl.TestKit/FaultyExtractor.cs @@ -353,15 +353,11 @@ protected override void Dispose(bool disposing) /// protected override Report CreateProgressReport() => - new(CurrentItemCount) - { - StartedAt = StartedAt, - Elapsed = Elapsed, - - // When the source is a materialized collection its size is a cheap, known - // total, so PercentComplete / EstimatedRemaining can be computed. - TotalItemCount = (_items as ICollection)?.Count, - }; + // When the source is a materialized collection its size is a cheap, known total, so + // PercentComplete / EstimatedRemaining can be computed. The timing constructor + // (Abstractions 0.18.1) sets these via plain parameters, avoiding the init-setter + // cross-assembly modreq mismatch that broke netstandard2.0 consumers on .NET 6/7. + new(CurrentItemCount, StartedAt, Elapsed, (_items as ICollection)?.Count); diff --git a/src/Wolfgang.Etl.TestKit/FaultyLoader.cs b/src/Wolfgang.Etl.TestKit/FaultyLoader.cs index 5f3f77e..c047699 100644 --- a/src/Wolfgang.Etl.TestKit/FaultyLoader.cs +++ b/src/Wolfgang.Etl.TestKit/FaultyLoader.cs @@ -364,7 +364,7 @@ protected override void Dispose(bool disposing) /// protected override Report CreateProgressReport() => - new(CurrentItemCount) { StartedAt = StartedAt, Elapsed = Elapsed }; + new(CurrentItemCount, StartedAt, Elapsed); diff --git a/src/Wolfgang.Etl.TestKit/FaultyTransformer.cs b/src/Wolfgang.Etl.TestKit/FaultyTransformer.cs index a7a9bae..c38b45d 100644 --- a/src/Wolfgang.Etl.TestKit/FaultyTransformer.cs +++ b/src/Wolfgang.Etl.TestKit/FaultyTransformer.cs @@ -328,7 +328,7 @@ protected override void Dispose(bool disposing) /// protected override Report CreateProgressReport() => - new(CurrentItemCount) { StartedAt = StartedAt, Elapsed = Elapsed }; + new(CurrentItemCount, StartedAt, Elapsed); diff --git a/src/Wolfgang.Etl.TestKit/TestExtractor.cs b/src/Wolfgang.Etl.TestKit/TestExtractor.cs index d36a166..50a2328 100644 --- a/src/Wolfgang.Etl.TestKit/TestExtractor.cs +++ b/src/Wolfgang.Etl.TestKit/TestExtractor.cs @@ -515,16 +515,12 @@ protected override void Dispose(bool disposing) /// protected override Report CreateProgressReport() => - new(CurrentItemCount) - { - StartedAt = StartedAt, - Elapsed = Elapsed, - - // When the source is a materialized collection its size is a cheap, known - // total, so PercentComplete / EstimatedRemaining can be computed. An - // enumerator- or factory-backed source has no known total (stays null). - TotalItemCount = (_enumerable as ICollection)?.Count, - }; + // When the source is a materialized collection its size is a cheap, known total, so + // PercentComplete / EstimatedRemaining can be computed. An enumerator- or factory-backed + // source has no known total (stays null). The timing constructor (Abstractions 0.18.1) + // sets these via plain parameters, avoiding the init-setter cross-assembly modreq + // mismatch that broke netstandard2.0 consumers running on .NET 6/7. + new(CurrentItemCount, StartedAt, Elapsed, (_enumerable as ICollection)?.Count); diff --git a/src/Wolfgang.Etl.TestKit/TestLoader.cs b/src/Wolfgang.Etl.TestKit/TestLoader.cs index 5dd6e51..737f85d 100644 --- a/src/Wolfgang.Etl.TestKit/TestLoader.cs +++ b/src/Wolfgang.Etl.TestKit/TestLoader.cs @@ -192,7 +192,7 @@ protected override void Dispose(bool disposing) /// protected override Report CreateProgressReport() => - new(CurrentItemCount) { StartedAt = StartedAt, Elapsed = Elapsed }; + new(CurrentItemCount, StartedAt, Elapsed); diff --git a/src/Wolfgang.Etl.TestKit/TestTransformer.cs b/src/Wolfgang.Etl.TestKit/TestTransformer.cs index 11aa065..8971196 100644 --- a/src/Wolfgang.Etl.TestKit/TestTransformer.cs +++ b/src/Wolfgang.Etl.TestKit/TestTransformer.cs @@ -123,7 +123,7 @@ protected override void Dispose(bool disposing) /// protected override Report CreateProgressReport() => - new(CurrentItemCount) { StartedAt = StartedAt, Elapsed = Elapsed }; + new(CurrentItemCount, StartedAt, Elapsed); diff --git a/src/Wolfgang.Etl.TestKit/Wolfgang.Etl.TestKit.csproj b/src/Wolfgang.Etl.TestKit/Wolfgang.Etl.TestKit.csproj index 5d84aa7..95ac153 100644 --- a/src/Wolfgang.Etl.TestKit/Wolfgang.Etl.TestKit.csproj +++ b/src/Wolfgang.Etl.TestKit/Wolfgang.Etl.TestKit.csproj @@ -74,7 +74,7 @@ - +