2008-12-02 6 views
7

lorsque j'applique l'étiquette ci-dessus mes méthodes que j'obtiens l'erreurVB.NET Extension Méthodes

type System.Runtime.CompilerServices.Extension n'est pas défini.

Voici mon exemple

<System.Runtime.CompilerServices.Extension()> _ 
    Public Sub test() 

End Sub 

Où vais-je tort?

Modifier ~ droite de l'article MSDN here, la même erreur

 
Imports System.Runtime.CompilerServices 

Module StringExtensions 
    _ 
    Public Sub Print(ByVal aString As String) 
     Console.WriteLine(aString) 
    End Sub 

End Module 

J'utilise Visual Studio 2008 et Framework 3.5 dans mon projet.

Solution ~ Le projet était sur le 2.0 Framework. Changé à 3.5 et cela fonctionne.

Répondre

8

Quelle version du framework .net l'IDE pointe-t-il?

De même, à première vue, la syntaxe de la méthode d'extension semble incorrecte.

Le code est incomplet. Veuillez mettre les instructions using dans l'exemple pour que quiconque utilise le code et le compile - pour reproduire l'erreur.

+0

Il était 2,0. J'ai dû changer en 3.5 et ça marche. –

+0

Les extensions ont été introduites dans .NET 3, elles ne sont donc pas supportées dans un projet .NET 2.X. – awe

+0

Avec un peu de travail supplémentaire 2.0 prendra en charge les méthodes d'extension. J'ai un DLL 2010 de VS compilant au Framework .Net 2.0. J'ai suivi les deux liens suivants pour plus d'informations: http://www.codeproject.com/Articles/31260/Extension-Methods-in-VB-NET Check vers la fin de l'article dans le magazine MSDN -http: //msdn.microsoft .com/fr-fr/magazine/cc163317.aspx # S7 – JohnL

0

Utilisez cette ...

System.Runtime.CompilerServices.ExtensionAttribute

n'a été trouvé en extension appelée dans l'espace de noms que vous avez mentionné.

3

Vous ne devriez obtenir cette erreur si l'une des conditions suivantes sont vraies

  1. Vous n'utilisez pas VS 2008 - Support Méthode d'extension a été ajouté dans VS2008
  2. Votre code ne dispose pas d'une référence au système .Core.dll - Également ajouté dans VS2008

Pouvez-vous vérifier ces deux? Mon problème est que vous essayez d'utiliser VS2005 pour créer une méthode d'extension. Si tel est le cas, il n'est malheureusement pas pris en charge.

+0

J'utilise VS 2008. Quand j'ai essayé d'ajouter la référence à System.Core, elle est grisée (c'est-à-dire qu'elle est ajoutée). –

0

Je voudrais ajouter l'espace de noms aux importations afin que vous ne devez pas taper à chaque fois:

Imports System.Runtime.CompilerServices 

<Extension()> _ 
Public Sub Test(ByVal Value As String) 

End Sub 

Une fois que vous avez dans vos importations, vous pouvez simplement ajouter l'extension au-dessus de chaque méthode à la place de toute la chose. Comme shahkalpesh a dit que votre méthode d'extension est incomplète, vous devrez ajouter le type que vous voulez étendre (voir code premier parm). Je viens d'avoir un jeu et j'ai trouvé que si vous ne fournissez pas un type à étendre en paramètre, le compilateur va lancer une erreur.

+0

Je l'ai fait, voir mon edit ... ne fonctionne toujours pas. –

+0

pouvez-vous faire un clic droit sur le bit et aller à la définition? –