Eternet.Mediator.EndpointManifest.Generator
3.1.0
Prefix Reserved
dotnet add package Eternet.Mediator.EndpointManifest.Generator --version 3.1.0
NuGet\Install-Package Eternet.Mediator.EndpointManifest.Generator -Version 3.1.0
<PackageReference Include="Eternet.Mediator.EndpointManifest.Generator" Version="3.1.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Eternet.Mediator.EndpointManifest.Generator" Version="3.1.0" />
<PackageReference Include="Eternet.Mediator.EndpointManifest.Generator"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Eternet.Mediator.EndpointManifest.Generator --version 3.1.0
#r "nuget: Eternet.Mediator.EndpointManifest.Generator, 3.1.0"
#:package Eternet.Mediator.EndpointManifest.Generator@3.1.0
#addin nuget:?package=Eternet.Mediator.EndpointManifest.Generator&version=3.1.0
#tool nuget:?package=Eternet.Mediator.EndpointManifest.Generator&version=3.1.0
Eternet.Mediator.EndpointManifest.Generator
Analyzer package that emits the public Eternet.Mediator.Generated.EndpointManifestProvider carrier for mediator
contract assemblies.
Use this package in *.Contracts projects together with:
Eternet.Mediator.EndpointModel<EternetGenerateEndpointManifest>true</EternetGenerateEndpointManifest>
This package is intentionally narrower than Eternet.Mediator.Generator. It only carries the manifest-emission
generator needed by contract packages, while runtime/controller generation remains in the broader mediator generator
package.
The generator emits a manifest for any assembly that contains endpoint descriptors. ApiGatewaySourceService can still
add source-service identity, but it is not required for manifest emission.
Services that can safely forward every gateway request to a fully isolated testing environment can add
[assembly: ApiGatewayTestingSupport]. Services with partial support can instead add
[ApiGatewayEndpointTestingSupport] to each supported endpoint contract or OData entity-set class. The generator records
the selected scope in the manifest and reports compile-time error EM9012 if an assembly combines the global and
endpoint-level modes.
Relative gateway routes are composed below their OperationNamespace. The generator reports warning EM9013 when a
relative route already starts with that namespace because it would publish a duplicated path such as
Networking/Networking/.... Remove the namespace segment from the route, or set IsRouteAbsolute = true when the
declared route intentionally owns the complete public path.
New public contracts should mark the abstract endpoint contract with EndpointGroup, not GenerateEndpoint.
GenerateEndpoint is server-only opt-in metadata.
EndpointManifestProvider.ManifestJson is intentionally public so source generators in consuming projects can read the
manifest from metadata references during compilation. The sidecar file remains the preferred runtime/build artifact when
the consuming tool is not a source generator.
Types marked with GenerateHttpClient, or nested inside a GenerateHttpClient container, are intentionally excluded
from the emitted manifest because the current assembly consumes them as outbound descriptors instead of serving them.
For the current contract authoring model that feeds this generator, see
../docs/contracts-and-transport-authoring.md and ../docs/endpoint-manifest-ecosystem.md.
OData capability publication
[ContractCapability(Publish = false)] on an OData entity-set declaration omits its agent capability while preserving
the OData model, HTTP descriptor, schema and generated client/server surface. Inherited publication decisions are
honored; an explicit entity-set declaration overrides its inherited decision, including Publish = true. An entity
set without a publication override retains the default publication behavior. This flag does not change endpoint
authentication or authorization.
Client export contract decisions
The client export (EternetGenerateClientExport=true) is documented in ../../../docs/typescript/contract-export-v1.md.
These decisions settle the review findings of issue #908:
When a whole-object standard [FromBody] request declares a JSON converter, the generated controller and HTTP client use that
converter. Client export cannot infer an arbitrary converter's input wire shape and reports EMCX001 instead of
publishing a schema based on CLR properties. The export is opt-in; the ordinary endpoint manifest remains available.
Contracts needing client export require a future explicit, validated input-wire schema associated with the converter.
That schema must distinguish secret-bearing transport input from any redacted serialization. Until that capability is
implemented, keep such contracts on a previously supported transport path and preserve their existing validation;
disabling or suppressing the diagnostic does not produce a reliable export.
- Enums are contracts of their declared members. Capability
input.jsonSchemaand the export keep the canonicalenumnames; neither describes the extra casings or integers thatJsonStringEnumConverteralso accepts. The export marks string enums whose converter allows integers withallowsIntegerValues: true, because such a converter also writes an undeclared value (for example(State)99) as a JSON integer. - No shared Eternet host setup installs a global
JsonStringEnumConverter; each service configures MVC JSON options itself, and some write enums as numbers. An enum serialized as JSON in an exported contract must therefore declareJsonStringEnumConverter<T>orJsonNumberEnumConverter<T>on the enum type, otherwise the export fails withEMCX010. Route, query, header and form bindings and dictionary keys do not need it. - A projected
DomainResultresponse whose type is also serialized as an ordinary DTO with a different wire shape is exported as<type id>@projection; types used only as responses keep their ids.EMCX007checks every projection. - FluentValidation rules come from the single public validator constructor, or from the rules common to all public constructors when there are several.
- Pause-capable pipelines describe their HTTP 202
PipelinePausedResponseoutcome inresponse.paused. - Item 13 (implicit requiredness of non-nullable query, header and form members) is not applicable yet: generated
controllers are emitted without
#nullable enable, so their reference parameters are nullable-oblivious, MVC infers no[Required], and the endpoint accepts the omission. Those bindings stay optional unless the member isrequired. It becomes applicable only if controller generation emits nullable annotations, which changes runtime validation of every generated endpoint and needs its own change. - The
PipelinePausedResponseprojection ({ reason }) is registered after every DTO is known, under<type id>@projectionwhen a[FromBody]PipelinePausedResponsemember makes the plain id an ordinary DTO. - A named type reached from a route, query, header or form binding is not treated as JSON; the host-dependent enum
check (
EMCX010) runs only for types a JSON use also reaches.
Sensitivity declarations
When the effective ContractCapability attribute explicitly supplies SensitiveInput or SensitiveOutput, the
generated capability metadata includes sensitiveInputDeclared or sensitiveOutputDeclared, respectively, with the
string value true. The corresponding safety property carries the declared value. Absence of the metadata key means
that the declaration is unknown; historical manifests also lack these keys. The keys report source declarations, not
an audit or authorization decision. The capability fingerprint includes each declared value so a declaration or
change invalidates the previous fingerprint. Existing fingerprints remain unchanged when neither field is declared.
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.1.0 | 123 | 11/7/2026 |
| 3.0.0 | 95 | 11/6/2026 |
| 2.8.0 | 192 | 11/2/2026 |
| 2.7.0 | 468 | 10/30/2026 |
| 2.6.0 | 312 | 10/30/2026 |
| 2.5.0 | 1,555 | 10/30/2026 |
| 2.4.1 | 182 | 10/29/2026 |
| 2.3.0 | 1,370 | 10/23/2026 |
| 2.2.0 | 214 | 10/23/2026 |
| 2.1.0 | 111 | 10/21/2026 |
| 2.0.0 | 230 | 10/15/2026 |
| 1.9.0 | 236 | 10/6/2026 |
| 1.8.0 | 616 | 10/1/2026 |
| 1.7.0 | 112 | 9/30/2026 |
| 1.6.0 | 104 | 9/30/2026 |
| 1.5.0 | 783 | 9/21/2026 |
| 1.4.1 | 219 | 9/15/2026 |
| 1.4.0 | 117 | 9/14/2026 |
| 1.3.1 | 225 | 9/11/2026 |
| 1.3.0 | 222 | 9/9/2026 |