2009-04-23 6 views
6

In Visual Studio 2008
È possibile creare un metodo di estensione per lavorare in un progetto .NET Framework 2.0?Utilizzo dei metodi di estensione con .NET Framework 2.0

+0

Vedere la voce [il mio blog] (http://colins-corner.blogspot.com/2009/01/extension-methods-in-net-20.html) per i dettagli. –

risposta

10

C'è uno ugly hack che utilizza i metodi di estensione in .Net 2.0; ma sarebbe meglio solo aggiornare il tuo framework a 3.5.

Fonti alternative: 1, 2.

In breve (dal collegamento n. 2): I metodi di estensione sono solo normali metodi statici contrassegnati con l'attributo [Estensione]. Questo attributo è in realtà appena aggiunto dal compilatore dietro le quinte. In .NET 3.5, vive in System.Core, quindi basta definire il proprio attributo in questo modo:

namespace System.Runtime.CompilerServices 
{ 
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
    public class ExtensionAttribute : Attribute 
    { 
    } 
} 
+0

Il collegamento è interrotto Penso che – deostroll

+0

@ defoll: risolto. –

2

Assolutamente. Esistono alcuni metodi hacky, ma quello che sto utilizzando è prendere System.Core dal Mono project, aggiungere tutto il suo codice a una nuova libreria di classi .NET 2.0 denominata System.Core nella mia soluzione e ricompilarla. Ci sono alcune cose da sistemare, come cambiare i loro attributi MonoTODO in commenti TODO e correggere AssemblyInfo.cs, ma funziona benissimo. Ora sto usando sia LINQ e metodi di estensione in un progetto 2.0 compilato in VS 2008.

Supponendo che si ottiene la versione 2.4 della sorgente Mono, si dovrebbe trovare il codice sotto:

<extracted directory>/mono-2.4/mcs/class/System.Core 

Se Sei bloccato in VS 2005, puoi scaricare SharpDevelop, compilare la tua DLL System.Core con quella destinata a 2.0, aggiungere un riferimento all'assembly compilato, e potrebbe funzionare, ma non so se VS 2005 avrà un problema con la sintassi dell'estensione o meno. Immagino che ti darà un po 'di labbra.

+0

La chiave è stata compilata in VS 2008. Sono ancora bloccato con VS 2005 :( –

+0

Ho visto il tag VS2008 e assunto il 2008. Se sei nel 2005, potresti essere in grado di trovare un binario precompilato o utilizzare SharpDevelop (aggiornerò con un link) .Se stai compilando in Win2K, sfortunatamente, sei sfortunato, dal momento che non supporta il framework 3.5. –