2008-10-02 14 views
6

Tengo algunos métodos de extensión de estilo 'auxiliar' que utilizo con bastante regularidad ahora (en su mayoría son bastante simples, intuitivos y funcionan para bien y no para mal, así que no lo hagan esto desciende a una discusión sobre si debo usarlos o no). Están ampliando en gran medida las clases .NET CLR básicas.Defina un método de extensión .NET con ámbito de solución

Actualmente, tengo que copiar el archivo 'ExtensionMethods.cs' que contiene mis métodos de extensión para cada nuevo proyecto dentro de una solución para poder usarlos en múltiples proyectos.

¿Es posible definir una extensión para trabajar en múltiples proyectos dentro de una solución, o envolverlos en un dll 'extensiones', o están limitados al alcance del proyecto?

EDIT Si bien las respuestas del 'proyecto dedicado' son perfectamente válidas, elegí la de marxidad porque prefiero el enfoque que da. Gracias por todas las respuestas hasta ahora, y las he modificado todas, ya que todas fueron buenas respuestas

Respuesta

9

Si no desea crear un proyecto entero sólo para los métodos de extensión, puede vincular el mismo archivo en proyectos separados sin copiar el archivo:

  1. En el Explorador de soluciones, seleccione el proyecto de destino.
  2. Seleccione el menú Proyecto.
  3. Seleccionar Agregar elemento existente.
  4. En el cuadro de diálogo Agregar elemento existente, seleccione el elemento que desea vincular.
  5. En la lista desplegable del botón Abrir, seleccione Agregar como enlace.
+0

He estado haciendo eso también durante años, ahorrándome un montón de problemas en comparación con el uso de un conjunto compartido – faulty

5

El mejor enfoque es ponerlas todas en un solo proyecto y crear una DLL. A continuación, puede incluir ese proyecto como referencia de proyecto o incluir el archivo DLL como referencia binaria (probablemente la mejor opción).

+0

Si desea utilizar las funciones de extensión de varios proyectos dentro de ** la misma solución **, entonces _¿por qué _ recomienda la referencia binaria? En ese caso, debe usar la referencia del proyecto. Y ese es el tema que abre el caso de uso de la persona también: "cada nuevo proyecto dentro de una solución". –

2

Puede poner sus extensiones en un proyecto separado e incluir ese proyecto en cada nueva solución que esté haciendo.

Solo tenga cuidado con el control de versiones, por ejemplo, cuando otras aplicaciones intenten realizar cambios en su proyecto de extensión, entonces todos los proyectos que usen ese método deben volverse a probar.

Scott Dorman is correct in his post too: si no las quiere cambiar, puede compilarlas como una biblioteca DLL que incluirá en sus nuevos proyectos (en lugar de incluir un proyecto no compilado).

1

Cree un proyecto para sus extensiones a la plataforma .NET, y haga referencia a ese proyecto en cada uno de sus proyectos de aplicaciones. No hace falta decir que todas y cada una de las cosas de la plataforma, y ​​solo de la plataforma, se incluyen en ese único proyecto; aplicación de cosas va en sus proyectos de aplicación.

También puede consultar varias bibliotecas de plataforma, como Umbrella, que ofrecen conjuntos de extensiones para la plataforma base.

0

Varias respuestas sugieren que alguien ponga las funciones de extensión en un conjunto común. Cual es la respuesta correcta Pero hay algo extraño para los principiantes: el IntelliSense no pudo ayudar bastante. Digamos que amplié el ObservableCollection con una función/método ReplaceRange. Después de un movimiento la clase de las funciones de extensión, al principio el compilador dirá error CS1061: 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' does not contain a definition for 'ReplaceRange' and no extension method 'ReplaceRange' accepting a first argument of type 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' could be found (are you missing a using directive or an assembly reference?) Si pasa el mouse sobre la problemática llamada ReplaceRange, no recibirá la oferta para incluir automáticamente la declaración de uso correcta. Alguien podría pensar en ese punto que él/ella hizo algo mal. Sin embargo, no hay nada, solo tiene que saber dónde está su método de extensión, y debe escribir manualmente la instrucción using para el espacio de nombres de los métodos. Después de obtener ese derecho, su fuente compilará.

Cuestiones relacionadas