Title: Creating a Python class extending a C# interface with generic return type causes a `System.TypeLoadException: VTable setup of type` · Issue #2511 · pythonnet/pythonnet · GitHub
Open Graph Title: Creating a Python class extending a C# interface with generic return type causes a `System.TypeLoadException: VTable setup of type` · Issue #2511 · pythonnet/pythonnet
X Title: Creating a Python class extending a C# interface with generic return type causes a `System.TypeLoadException: VTable setup of type` · Issue #2511 · pythonnet/pythonnet
Description: Environment Pythonnet version: 3.0.4 Python version: 3.10.12 Operating System: Ubuntu 22.04 LTS .NET Runtime: Mono 6.12.0.200 (tarball) Details Describe what you were trying to get done. I've stumbled upon an exception when creating a Ty...
Open Graph Description: Environment Pythonnet version: 3.0.4 Python version: 3.10.12 Operating System: Ubuntu 22.04 LTS .NET Runtime: Mono 6.12.0.200 (tarball) Details Describe what you were trying to get done. I've stumb...
X Description: Environment Pythonnet version: 3.0.4 Python version: 3.10.12 Operating System: Ubuntu 22.04 LTS .NET Runtime: Mono 6.12.0.200 (tarball) Details Describe what you were trying to get done. I've s...
Opengraph URL: https://github.com/pythonnet/pythonnet/issues/2511
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Creating a Python class extending a C# interface with generic return type causes a `System.TypeLoadException: VTable setup of type`","articleBody":"### Environment\r\n\r\n- Pythonnet version: 3.0.4\r\n- Python version: 3.10.12\r\n- Operating System: Ubuntu 22.04 LTS\r\n- .NET Runtime: Mono 6.12.0.200 (tarball)\r\n\r\n### Details\r\n\r\n- Describe what you were trying to get done.\r\n\r\nI've stumbled upon an exception when creating a Type in Python from a C# interface that includes a generic return type (example code below)\r\n\r\n- What commands did you run to trigger this issue? If you can provide a\r\n [Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve)\r\n this will help us understand the issue.\r\n\r\n\r\n```c#\r\nnamespace Robin\r\n{\r\n public interface IRobin\r\n {\r\n T? Find\u003cT\u003e() where T : IRobin;\r\n }\r\n}\r\n```\r\n\r\nConverted to a DLL using: `csc /t:library IRobin.cs`\r\n\r\nThen bug validated with:\r\n\r\n```python\r\nimport sys\r\nimport os\r\nimport pythonnet\r\n\r\nprint(__file__)\r\nsys.path.append(os.path.dirname(os.path.realpath(__file__)))\r\n\r\nimport clr\r\n\r\nclr.AddReference(\"IRobin\")\r\nfrom Robin import IRobin\r\n\r\nprint(pythonnet.get_runtime_info())\r\n\r\nclass A(IRobin):\r\n __namespace__ = \"mock\"\r\n```\r\n\r\n- If there was a crash, please include the traceback here.\r\n\r\n```python\r\nTypeError: Failed to create Python type for mock.A\r\n```\r\n\r\nI modified the Pythonnet.dll to console error the C# exception and I get:\r\n\r\n```c#\r\nPython.Runtime.InternalPythonnetException: Failed to create Python type for mock.A ---\u003e System.TypeLoadException: VTable setup of type mock.A failed\r\n at (wrapper managed-to-native) System.RuntimeType.GetMethodsByName_native(System.RuntimeType,intptr,System.Reflection.BindingFlags,System.RuntimeType/MemberListType)\r\n at System.RuntimeType.GetMethodsByName (System.String name, System.Reflection.BindingFlags bindingAttr, System.RuntimeType+MemberListType listType, System.RuntimeType reflectedType) [0x0001b] in \u003cd636f104d58046fd9b195699bcb1a744\u003e:0 \r\n at System.RuntimeType.GetMethodCandidates (System.String name, System.Reflection.BindingFlags bindingAttr, System.Reflection.CallingConventions callConv, System.Type[] types, System.Int32 genericParamCount, System.Boolean allowPrefixLookup) [0x00010] in \u003cd636f104d58046fd9b195699bcb1a744\u003e:0 \r\n at System.RuntimeType.GetMembers (System.Reflection.BindingFlags bindingAttr) [0x00000] in \u003cd636f104d58046fd9b195699bcb1a744\u003e:0 \r\n at Python.Runtime.ClassManager.GetClassInfo (System.Type type, Python.Runtime.ClassBase impl) [0x00028] in \u003c2aa3218182dd47ff892dddbce801f07b\u003e:0 \r\n at Python.Runtime.ClassManager.InitClassBase (System.Type type, Python.Runtime.ClassBase impl, Python.Runtime.ReflectedClrType pyType) [0x00001] in \u003c2aa3218182dd47ff892dddbce801f07b\u003e:0 \r\n at Python.Runtime.ReflectedClrType.GetOrCreate (System.Type type) [0x00047] in \u003c2aa3218182dd47ff892dddbce801f07b\u003e:0 \r\n --- End of inner exception stack trace ---\r\n at Python.Runtime.ReflectedClrType.GetOrCreate (System.Type type) [0x00076] in \u003c2aa3218182dd47ff892dddbce801f07b\u003e:0 \r\n at Python.Runtime.ReflectedClrType.CreateSubclass (Python.Runtime.ClassBase baseClass, System.Collections.Generic.IList`1[T] interfaces, System.String name, System.String assembly, System.String ns, Python.Runtime.BorrowedReference dict) [0x0001f] in \u003c2aa3218182dd47ff892dddbce801f07b\u003e:0 Traceback (most recent call last):\r\n```\r\n\r\nWith a bit more console out I found the issue is when we try to get the members of the Python class: https://github.com/pythonnet/pythonnet/blob/v3.0.4/src/runtime/ClassManager.cs#L344\r\n","author":{"url":"https://github.com/robin-moss","@type":"Person","name":"robin-moss"},"datePublished":"2024-11-15T15:30:08.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/2511/pythonnet/issues/2511"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:81d46b62-a741-14bc-a3a8-438e103b0001 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A9DA:66A35:CA601C:107D639:69717486 |
| html-safe-nonce | c5eb11009073f80385151ac7fd1aa9e146a9865f94cbcc14479a540c0c8d7a2d |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBOURBOjY2QTM1OkNBNjAxQzoxMDdENjM5OjY5NzE3NDg2IiwidmlzaXRvcl9pZCI6IjEzNzQyMDAxOTI4NTU3OTg5MTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | c0abc46ad021391fc7e34b7554a390d11407abd23c23461cb813885a475f6e75 |
| hovercard-subject-tag | issue:2662312650 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/pythonnet/pythonnet/2511/issue_layout |
| twitter:image | https://opengraph.githubassets.com/6b8ea94bbc47e2f6da3becd847ead78e57b91393b5f1bbf3f1b9b4f68be70108/pythonnet/pythonnet/issues/2511 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/6b8ea94bbc47e2f6da3becd847ead78e57b91393b5f1bbf3f1b9b4f68be70108/pythonnet/pythonnet/issues/2511 |
| og:image:alt | Environment Pythonnet version: 3.0.4 Python version: 3.10.12 Operating System: Ubuntu 22.04 LTS .NET Runtime: Mono 6.12.0.200 (tarball) Details Describe what you were trying to get done. I've stumb... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | robin-moss |
| hostname | github.com |
| expected-hostname | github.com |
| None | 102ab681b33bed6a87d35dc54dd8200470d7e01648f08979e84415ab67d611aa |
| turbo-cache-control | no-preview |
| go-import | github.com/pythonnet/pythonnet git https://github.com/pythonnet/pythonnet.git |
| octolytics-dimension-user_id | 6050430 |
| octolytics-dimension-user_login | pythonnet |
| octolytics-dimension-repository_id | 14748123 |
| octolytics-dimension-repository_nwo | pythonnet/pythonnet |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 14748123 |
| octolytics-dimension-repository_network_root_nwo | pythonnet/pythonnet |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 6a660b76f271bda19afb9f5242b473bfee637a5a |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width