microsoft / microsoft/OpenAPI.NET.OData

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

Đang mở
#833 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
C#
Star
240
Fork
70
Merge trung bình
7 giờ 59 phút
Pull request đã merge (30 ngày)
13

Mô tả

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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với repro của model.ConvertToOpenApi và kiểm tra ODataPathProvider.RetrieveBoundOperationPaths, EdmOperationExtensions, OperationHandler.AppendSystemQueryOptions và EdmModelHelper.VisitOperation. Truy vết tám vị trí gọi GetReturn đã được báo cáo và xem xét các tác động về khả năng tương thích với Edm 9.x. Được xem là hoàn tất khi có kế hoạch di chuyển sang 4.x hoặc triển khai sử dụng IEdmOperation.Return, đồng thời đã xác nhận hành vi tương thích và các thay đổi về phiên bản dependency.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
csharp
Lĩnh vực
api, backend-api-design
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.