2009-03-25 14 views
2

J'utilise la dernière version d'IKVM pour "compiler" un fichier .jar Java dans une DLL .NET. Tout a bien fonctionné, et maintenant j'essaie de référencer la DLL dans un projet .NET 3.5 C#.IKVM et System.Core System.Runtime.CompilerServices.ExtensionAttribute

Dans mon projet C#, j'ai créé une classe statique "StringExtensions" avec une méthode d'extension sur chaîne.

Pour une raison quelconque, cela semblait fonctionner hier, mais aujourd'hui, je reçois une erreur de construction sur ma classe d'extension (je ne sais pas comment cela a fonctionné hier ...).

Missing compiler required member System.Runtime.CompilerServices.ExtensionAttribute..ctor 

Et une accumulation d'avertissement ainsi:

The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\TEMP\IKVM.Runtime.dll' 

J'ai découvert que les deux IKVM.Runtime.dll et System.Core.dll (version 3.5) ont le même type: « System.Runtime. CompilerServices.ExtensionAttribute "

Étant donné que l'espace de noms est le même, comment puis-je compiler avec la version System.Core de ExtensionAttribute (ou comment puis-je résoudre ce problème)?

Merci

+0

Je suis autour de ce en se débarrassant de toutes mes méthodes d'extension, mais je suis toujours curieux. Il semble que la présence de IKVM.Runtime.dll dans n'importe quel projet causera des problèmes avec les méthodes d'extension. –

Répondre

1

Si vous ciblez .Net 2.0, vous ne pouvez créer des méthodes d'extension si vous définissez vous-même attribut. Cela fonctionne très bien jusqu'à ce que vous passiez à .Net 3.5.

Je ne connais pas "IKVM" mais la seule vraie solution est de leur demander de supprimer l'attribut et la cible 3.5.

2

La mise à jour vers IKVM 0.40.0.1 a résolu ce problème pour moi.

0

J'ai le même problème.

Dans mon cas, le problème était l'assemblage Mono.Cecil.

Migration de références locales à nuget, quand j'ajoute des références NHibernate le paquet ajoute automatiquement cette référence.

Cette référence a été supprimée et a de nouveau compilé mon projet.

Vous devez comprendre cette implémentation pour résoudre votre question. L'un des deux assemblages doit être supprimé.

Cette image a été prise de ILSpy (http://i.stack.imgur.com/Qyd5o.png)