microsoft / microsoft/OpenAPI.NET.OData
Microsoft.OData.Edm 9.0.0-rc compat: MissingMethodException on ExtensionMethods.GetReturn(IEdmOperation)
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
- Confirm 3.x will pick up the next Edm 9.x release (post-9.0.0-rc) once it ships with
GetReturnrestored. - Plan a 4.x preview of
Microsoft.OpenApi.ODatathat migrates theGetReturn(...)callsites to the newIEdmOperation.Returnmember, so consumers can target Edm 9.x without depending on the back-compat shim. Bumping theMicrosoft.OData.Edmdependency from>= 8.4.3to>= 9.xwould 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
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- 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