Cause: - Preadjustment values were not available for persistent Results mapping. - Older Genesis item IDs could resolve to different result variables. - Meter-specific variables were difficult to find. Solution: 1. Added preadjustment result storage - Store common execution metadata and available phase-specific values per slot and test. - Expose temperature comparison and Completion values in Results. - Preserve existing measurement execution, timing, parallelism and STOP handling. 2. Improved result selection - Add Water meter type under the existing Category tab. - Group available items into Common, Genesis and iPerl. 3. Corrected saved mappings - Migrate recognized legacy Genesis mappings. - Store stable item identifiers while preserving existing numeric IDs. - Mark ambiguous mappings as Review mapping. - Preserve the one-based Genesis repetition number.
AppDiagnostic.Logging
Reusable NLog target for sending structured diagnostic events from multiple
.NET Framework processes to AppDiagnostic.exe through a local named pipe.
Producer integration
Reference this project from the producer application and add the extension and target to its NLog configuration:
<extensions>
<add assembly="AppDiagnostic.Logging" />
</extensions>
<targets>
<target name="appDiagnostic"
xsi:type="AppDiagnostic"
layout="${message}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="appDiagnostic" />
</rules>
The target writes to a bounded background queue. Producer threads are not blocked while the diagnostic viewer is unavailable. Queued messages are sent after the viewer becomes available; new messages are discarded when the queue limit is reached.
The receiver can read messages with:
DiagnosticLogEntry entry =
DiagnosticMessageSerializer.ReadFramed(namedPipeServerStream);