IDisposable: typings say `dispose()`, dynamic binding exposes `Dispose()`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 82/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- csharp, javascript, typescript
Piste de recherche
Start with the cited generator code in src/NodeApi.Generator/TypeDefinitionsGenerator.cs around lines 1217-1221 and the dynamic exporter in src/NodeApi.DotNetHost/TypeExporter.cs around lines 790-797. Reproduce the issue with the provided net472 dynamic-binding example, then verify that generated typings and runtime method names agree for IDisposable; done means calling the typed method no longer fails.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
With dynamic binding (require("node-api-dotnet/net472") then dotnet.load("MyLib.dll")), a class that implements IDisposable gets dispose(): void in the generated .d.ts, but the object at runtime has Dispose and no dispose. Calling the typed name throws TypeError: x.dispose is not a function. TypeScript accepts the call, and a test mock written from the .d.ts passes, so the mismatch only surfaces in production.
Reproduced with node-api-dotnet 0.9.27 and a net472 host:
const t = dotnet.MyLib.Thing.Create();
Object.getOwnPropertyNames(Object.getPrototypeOf(t));
// [..., "Dispose", "Equals", "GetHashCode", "GetType", "ToString", ...]
typeof t.dispose; // "undefined"
The generator renames the method to match the JS convention: https://github.com/microsoft/node-api-dotnet/blob/958b8c3c04dff5414781a88f069062c6528f7427/src/NodeApi.Generator/TypeDefinitionsGenerator.cs#L1217-L1221
The dynamic exporter registers methods under the .NET name with no equivalent rename: https://github.com/microsoft/node-api-dotnet/blob/958b8c3c04dff5414781a88f069062c6528f7427/src/NodeApi.DotNetHost/TypeExporter.cs#L790-L797
Either name is fine, but the two paths should agree.
- Langage dominant
- C#
- Étoiles
- 787
- Forks
- 80
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/node-api-dotnet
-
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
microsoft/node-api-dotnet#484 ·
-
Embedding args occasionally get trailing garbage on .NET (missing null terminator on a pooled buffer)Peut-être pris @tolmachev-pravo l’a pris il y a 93 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
microsoft/node-api-dotnet#481 ·
-
JSError.ThrowError(Exception) aborts the process when a Worker terminates during a .NET callPeut-être pris @GalaxiasKyklos l’a pris il y a 1 jour. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
microsoft/node-api-dotnet#505 ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
microsoft/node-api-dotnet#504 ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
microsoft/node-api-dotnet#486 · 1 commentaire ·
Toutes les issues de microsoft/node-api-dotnet
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
ClickHouse/clickhouse-cs#689 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 7 jours
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 65/100
vchelaru/FlatRedBall2#1481 ·
Les mainteneurs répondent en général sous 1 jour
-
ai-chat bug trivial
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
area-signalr
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
dotnet/aspnetcore#69842 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour