microsoft / microsoft/OpenAPI.NET.OData

Microsoft.OData.Edm 9.0.0-rc compat: MissingMethodException on ExtensionMethods.GetReturn(IEdmOperation)

Abierto
#833 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
C#
Estrellas
240
Forks
70
Merge medio
7 h 59 min
PR fusionados (30 d)
13

Descripción

Summary

Microsoft.OpenApi.OData.Reader 3.2.1 throws System.MissingMethodException at runtime when used with Microsoft.OData.Edm 9.0.0-rc. The published 3.x assembly has IL that calls Microsoft.OData.Edm.ExtensionMethods.GetReturn(Microsoft.OData.Edm.IEdmOperation), but that extension method was removed in OData/odata.net@10c65053e and is therefore absent from the Microsoft.OData.Edm 9.0.0-rc NuGet package.

Affected versions
Package Version Status
Microsoft.OpenApi.OData 3.2.1 (latest 3.x) Calls GetReturn
Microsoft.OData.Edm 8.4.3 Has GetReturn — works
Microsoft.OData.Edm 9.0.0-preview.3 / preview.4 Missing GetReturn — breaks
Microsoft.OData.Edm 9.0.0-rc Missing GetReturn — breaks
Microsoft.OData.Edm main (post-9.0.0-rc) GetReturn restored in OData/odata.net@e375dd74e
Repro

Any model that produces at least one IEdmOperation path (entity sets are enough to make ODataPathProvider.RetrieveBoundOperationPaths walk the operation paths it accumulated and evaluate the _allOperationPaths.Where(...) lambda that calls GetReturn).

var model = builder.GetEdmModel();
var doc = model.ConvertToOpenApi(new OpenApiConvertSettings());
Exception
System.MissingMethodException: Method not found: 'Microsoft.OData.Edm.IEdmOperationReturn Microsoft.OData.Edm.ExtensionMethods.GetReturn(Microsoft.OData.Edm.IEdmOperation)'.
   at Microsoft.OpenApi.OData.Edm.ODataPathProvider.RetrieveBoundOperationPaths(OpenApiConvertSettings convertSettings)
   at Microsoft.OpenApi.OData.Edm.ODataPathProvider.GetPaths(IEdmModel model, OpenApiConvertSettings settings)
   at Microsoft.OpenApi.OData.Edm.ODataContext.LoadAllODataPaths()
   ...
   at Microsoft.OpenApi.OData.EdmModelOpenApiExtensions.ConvertToOpenApi(IEdmModel model, OpenApiConvertSettings settings)
Root cause

OData/odata.net PR 10c65053e ("Add 'ReturnType' default interface property into IEdmOperation, remove 'GetReturn' extension method", Nov 6, 2025) removed the static extension and added a ReturnType default interface member on IEdmOperation instead. The replacement is operation.Return (returns IEdmOperationReturn) — semantically equivalent, but a binary break for callers compiled against 8.x.

That removal shipped in 9.0.0-rc (May 5, 2026). The following day, OData/odata.net@e375dd74e brought GetReturn back as a back-compat extension on top of IEdmOperation.Return, so the next Edm 9.x release after 9.0.0-rc should restore source/binary compatibility with the existing OpenApi.OData 3.x release.

Disassembled callsites in Microsoft.OpenApi.OData.Reader.dll 3.2.1 (8 occurrences in total):

  • ODataPathProvider.RetrieveBoundOperationPaths (lambda over _allOperationPaths + body)
  • EdmOperationExtensions (operation-import path enumeration)
  • OperationHandler.AppendSystemQueryOptions(IEdmFunction)
  • EdmModelHelper.VisitOperation
  • … and a few more in schema-generation paths.
Ask
  1. Confirm 3.x will pick up the next Edm 9.x release (post-9.0.0-rc) once it ships with GetReturn restored.
  2. Plan a 4.x preview of Microsoft.OpenApi.OData that migrates the GetReturn(...) callsites to the new IEdmOperation.Return member, so consumers can target Edm 9.x without depending on the back-compat shim. Bumping the Microsoft.OData.Edm dependency from >= 8.4.3 to >= 9.x would also unblock consumers from forcibly overriding the floor (which is what surfaces this bug today).
Workaround

For consumers wedged against Edm 9.0.0-rc, the only options are (a) pin Microsoft.OData.Edm back to 8.x, or (b) wait for the next Edm 9.x release where GetReturn is restored.

Happy to PR step 2 if useful — let me know if there's an existing branch or design preference.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el repro de model.ConvertToOpenApi e inspecciona ODataPathProvider.RetrieveBoundOperationPaths, EdmOperationExtensions, OperationHandler.AppendSystemQueryOptions y EdmModelHelper.VisitOperation. Rastrea los ocho sitios de llamada de GetReturn notificados y revisa las implicaciones de compatibilidad con Edm 9.x. Se considera terminado cuando exista un plan de migración a 4.x o una implementación que use IEdmOperation.Return, con el comportamiento de compatibilidad y los cambios de versión de las dependencias confirmados.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
csharp
Área
api, backend-api-design
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.