2012-02-09 18 views
5

Tengo un archivo .cs lleno de código C# que sigo reutilizando en múltiples proyectos.Hacer referencia al código C# de múltiples proyectos

Ahora mismo lo incluyo en estos proyectos al copiar y pegar el código en un nuevo archivo en cada directorio de proyecto. Esta es la equivocada manera de hacerlo.

¿Cuál es el derecho manera de hacerlo?

La forma correcta debe:

  • mantener el código común en un solo lugar en mi equipo
  • y mantener el enlace fresca --- así que cuando los cambios de código comunes, cada proyecto es consciente de ello , la próxima vez que recompile ese proyecto.

azar adivinar, yo esperaría algún tipo de directiva como using mycode = C:\common\mycode.cs, pero estoy seguro de que no es la manera de hacer las cosas .NET.

(estoy usando C# 2010, .NET 4.0, y sólo compilar el código localmente en un ordenador.)

Respuesta

6

Cree una Biblioteca de clases, agregue el archivo, genere el proyecto y haga referencia al archivo DLL creado a partir de la compilación. Agregue la instrucción using a cada archivo que la referenciará. Además, si se produce un error y el archivo DLL se encuentra en el Proyecto, haga clic con el botón derecho en el objeto -> Resolver y se agregará el uso por usted.

+0

He hecho todo eso, pero ahora parece que no puedo hacer uso de las funciones en la Biblioteca de clases. ¿Necesito algún tipo de directiva 'using'? – Joe

+0

@Joe Sí, necesita agregar la referencia al proyecto y luego agregar el uso en cada archivo que haga referencia a una clase en la biblioteca. Entonces en la parte superior usando [Namespace]. También Visual Studio puede resolverlo haciendo clic con el botón derecho si la DLL está en el Proyecto. –

+0

Y también necesito hacer las clases en el .dll público ... * facepalm * – Joe

8

poner el código en un proyecto de biblioteca de clases independiente y de referencia que en sus otros proyectos.

6

O

haga clic derecho en el proyecto en el Explorador de soluciones Seleccione Agregar elemento existente Busque el archivo .cs en otro proyecto y, de un solo clic para seleccionar clic en el botón de flecha hacia abajo a la derecha de Agregar y seleccionar Agregar como enlace

Ahora tiene un archivo fuente referenciado por dos proyectos, pero tiene el espacio de nombres que le dio en el primer proyecto que podría no ser el ideal.

La mejor manera de organizar esto es que, como han sugerido las otras dos respuestas, coloque un código común en una biblioteca de clases para que tenga un espacio de nombre de MyClassLibrary en lugar de SomeOtherProject. Se guarda una copia de dll más grande que no importa mucho hasta que se desarrolla para algo pequeño como Windows Phone. O cambie el espacio de nombres del código común para que sea Me.Common en todas sus aplicaciones; en realidad no importa cuál es el original, puede editarlo desde cualquier proyecto que lo haga referencia.

Compruebe que el control de fuente no sea un problema.

+0

No tenía idea de que existía "Agregar como enlace", ¡gracias! Útil para pequeños proyectos de prueba en los que no podría importarme menos la correcta organización de mis 10 líneas de código en un proyecto de biblioteca de clases separado. – Dan

0

Escribí una aplicación que automatiza la adición de un código como enlace, útil para proyectos que reutilizan una gran cantidad de código y cambian un poco. Es en https://github.com/CADbloke/CodeLinker

o

No tenga miedo de editar XML .csproj archivos. Por ejemplo, esto funciona ...

<Compile Include="$(Codez)\z.Libraries\diff-match-patch\DiffMatchPatch\**\*.cs" 
Exclude="NotThisOne.cs;**\NotThisFolderWith\This*.cs"> 
<Link>Libs\%(RecursiveDir)%(Filename)%(Extension)</Link> 
</Compile> 

... y le dará todos los archivos de C# de la carpeta de origen, y subcarpetas, como archivos vinculados en el proyecto de destino.

  • $(Codez) es una variable de entorno de Windows que utilizo en mis PC.
  • También podría haber usado *.* al final en lugar de *.cs.
  • Esta es una de las cosas que Visual Studio podría interrumpirle, agregar un archivo a la carpeta llena de archivos vinculados con comodines puede separarlos en entradas separadas. O no. Depende del viento
Cuestiones relacionadas