# Vendored MxGateway client DLLs This directory holds binary copies of `MxGateway.Client.dll` and `MxGateway.Contracts.dll` from the sibling `mxaccessgw` repo's last known-good build (May 2026). The DLLs are referenced from the driver's csproj as `` items rather than `ProjectReference`. ## Provenance Both DLLs are built from this team's own `mxaccessgw` source tree — they are not third-party binaries. The build commit + checksums below are recorded so future readers can verify the artefacts match the expected source without needing to ask the original author. | File | Source commit | SHA-256 | |---|---|---| | `MxGateway.Client.dll` | `dd7ca1634e2d2b8a866c81f0009bf87ee9427750` (mxaccessgw repo, pre-restructure) | `3507f770adc8c1b27b2fc4645079c6e4e02d5c65b9545c12d637cd2a080a00bd` | | `MxGateway.Contracts.dll` | `dd7ca1634e2d2b8a866c81f0009bf87ee9427750` (mxaccessgw repo, pre-restructure) | `437dc6cb6994c7c4d858c82f69af890732c7ffbfa0463fbd8a63ce7930d251b4` | The build commit is the same for both DLLs and is embedded as `AssemblyInformationalVersion` inside each binary — re-verify by running: `ilspycmd | grep AssemblyInformationalVersion`. To re-verify the checksums (e.g. after a clone): ```bash sha256sum libs/MxGateway.Client.dll libs/MxGateway.Contracts.dll ``` If either SHA-256 or the embedded source commit no longer matches what's listed above, the artefact has been replaced — verify before trusting. ## Why vendored The sibling `mxaccessgw` repo restructured: the `clients/dotnet/MxGateway.Client` project the driver previously referenced via path-based `ProjectReference` no longer exists, and the proto contracts moved from the `MxGateway.Contracts.Proto` namespace to `ZB.MOM.WW.MxGateway.Contracts.Proto`. The driver's source still expects the pre-restructure namespace, so re-pointing at the new contracts would require a global namespace rename across ~19 driver files PLUS reimplementing the `MxGatewayClient` / `MxGatewaySession` / `GalaxyRepositoryClient` types the old client library provided (the sibling repo dropped the client library entirely, keeping only the contracts). Vendoring the binaries unblocked the build in minutes instead of hours, freezes the gateway contract surface at a known-good version, and preserves the option to migrate properly later without an emergency rewrite. ## What's vendored | File | Built against | |---|---| | `MxGateway.Client.dll` | net10.0, references `MxGateway.Contracts.dll` | | `MxGateway.Contracts.dll` | net10.0, proto namespace `MxGateway.Contracts.Proto[.Galaxy]` | The NuGet packages the vendored DLLs reference (verified by reflecting `Assembly.GetReferencedAssemblies()` against `MxGateway.Client.dll`) are declared as direct `PackageReference` in the driver csproj — when the dropped `ProjectReference` was in place those packages were transitively provided; with binary references the consumer must declare them explicitly: | Package | Reason | |---|---| | `Google.Protobuf` 3.34.1 | Proto message types in `MxGateway.Contracts.dll` | | `Grpc.Core.Api` 2.76.0 | Base gRPC client types in `MxGateway.Client.dll` | | `Grpc.Net.Client` 2.76.0 | HTTP/2 transport used by `MxGatewayClient` | | `Microsoft.Extensions.Logging.Abstractions` 10.0.7 | `ILogger` used by the client | | `Polly.Core` 8.6.6 | Retry pipeline used by `MxGatewayClient` | Versions match the sibling mxaccessgw repo's current Server / Worker projects (`ZB.MOM.WW.MxGateway.Server.csproj`, `ZB.MOM.WW.MxGateway.Worker.csproj`) so the runtime versions stay close to what the gateway team uses. The pre-Driver.Galaxy-016 declarations were incorrect — most visibly `Polly 8.5.2` was declared where the DLL actually needs `Polly.Core` (a different package: `Polly` v7 is the older fluent API; `Polly.Core` v8 is the modern resilience-pipeline API the gateway client was built against). A `Polly` reference would have failed at runtime with `MissingMethodException` the first time a retry pipeline ran. ## Decompiled-source archive The vendored DLLs are byte-for-byte the build output. The full source can be recovered with `ilspycmd MxGateway.Client.dll > MxGateway.Client.cs` if a code review or audit needs it. ## How to unwind Either path closes the vendored-binary debt: 1. **Sibling repo restores `MxGateway.Client.csproj`** (or publishes a NuGet package). Switch the csproj back to a `ProjectReference` / `PackageReference`, delete this directory. 2. **Driver migrates to the new `ZB.MOM.WW.MxGateway.Contracts.Proto` namespace.** Global namespace rename across the ~19 consuming source files, plus re-implementing `MxGatewayClient` / `MxGatewaySession` / `GalaxyRepositoryClient` (≈2,200 LoC of behavioural client code) either inlined into this driver or as a fresh sibling library. Delete this directory. Either way: when unwinding, also drop the five `PackageReference` lines added to the csproj alongside the `` items — the new ProjectReference / PackageReference will provide them transitively again.