¿Cómo se comparte el código entre proyectos / soluciones en Visual Studio?

Tengo dos soluciones que tienen un código común, por lo que me gustaría extraerlo y compartirlo entre ellos. Además, me gustaría poder lanzar esa biblioteca de forma independiente porque podría ser útil para otros.

  • ¿Cuál es la mejor manera de hacerlo con Visual Studio 2008?
  • ¿Hay un proyecto presente en más de una solución?
  • ¿Tengo una solución separada para la pieza de código por separado?
  • ¿Puede una solución depender de otra?

Un proyecto puede ser referenciado por múltiples soluciones.

Coloque su biblioteca o código central en un proyecto, luego haga referencia a ese proyecto en ambas soluciones.

Puede “vincular” un archivo de código entre dos proyectos. Haga clic con el botón derecho en su proyecto, elija Add -> Existing item y luego haga clic en la flecha hacia abajo junto al botón Add :

Captura de pantalla

En mi experiencia, vincular es más simple que crear una biblioteca. El código vinculado da como resultado un único ejecutable con una sola versión.

File > Add > Existing Project... le permitirá agregar proyectos a su solución actual. Solo agregue esto ya que ninguna de las publicaciones anteriores lo señala. Esto le permite incluir el mismo proyecto en múltiples soluciones.

Puede incluir un proyecto en más de una solución. No creo que un proyecto tenga un concepto de qué solución es parte. Sin embargo, otra alternativa es hacer que la primera solución se construya en un lugar conocido y hacer referencia a los binarios comstackdos. Esto tiene la desventaja de que necesitará hacer un poco de trabajo si desea hacer referencia a diferentes versiones según si está construyendo configuraciones de liberación o depuración.

No creo que pueda hacer que una solución dependa realmente de otra, pero puede realizar sus comstackciones automáticas en un orden apropiado a través de secuencias de comandos personalizadas. Básicamente trate su biblioteca común como si fuera otra dependencia de terceros como NUnit, etc.

Puedes usar wild-card en línea usando la siguiente técnica (que es la forma en que se guarda la solución de @ Andomar en .csproj)

  _Inlined\MySisterProject\%(RecursiveDir)%(Filename)%(Extension)  

Meter en:

  false 

Si desea ocultar los archivos y / o evitar que la tarjeta comodín se expanda, agregue o elimine un elemento de la carpeta ‘elemento existente virtual’ como MySisterProject anterior.

Simplemente crearía un proyecto separado de la Biblioteca de clases para contener el código común. No necesita ser parte de ninguna solución que lo use. Haga referencia a la biblioteca de clases de cualquier proyecto que lo necesite.

El único truco es que deberá usar una referencia de archivo para hacer referencia al proyecto, ya que no formará parte de las soluciones que se refieren a él. Esto significa que el conjunto de salida real tendrá que colocarse en una ubicación a la que pueda acceder cualquiera que esté construyendo un proyecto que haga referencia a él. Esto se puede hacer colocando el conjunto en un recurso compartido, por ejemplo.

Extraiga el código común en un proyecto de biblioteca de clase y agregue ese proyecto de biblioteca de clase a sus soluciones. Luego puede agregar una referencia al código común de otros proyectos agregando una referencia de proyecto a esa biblioteca de clase. La ventaja de tener una referencia de proyecto en lugar de una referencia binaria / de ensamblaje es que si cambia la configuración de comstackción a depuración, versión, personalizada, etc., el proyecto de biblioteca de clase común se comstackrá también en función de esa configuración.

Puede incluir el mismo proyecto en más de una solución, pero está garantizado que se encontrará con problemas en el futuro (las rutas relativas pueden perder su validez cuando mueve directorios, por ejemplo).

Después de años de luchar con esto, finalmente se me ocurrió una solución factible, pero requiere el uso de Subversion para el control de código fuente (lo cual no es malo)

En el nivel de directorio de su solución, agregue una propiedad svn: externals que apunte a los proyectos que desea incluir en su solución. Subversion extraerá el proyecto del repository y lo almacenará en una subcarpeta de su archivo de solución. Su archivo de solución puede simplemente usar rutas relativas para referirse a su proyecto.

Si encuentro algo más de tiempo, explicaré esto en detalle.

Es una buena idea crear una biblioteca de clase dll que contenga todas las funcionalidades comunes. Cada solución puede hacer referencia a este dll de forma independiente, independientemente de otras soluciones.

De hecho, así es como nuestras fonts están organizadas en mi trabajo (y creo en muchos otros lugares).

Por cierto, Solution no puede depender explícitamente de otra solución.

Si está intentando compartir código entre dos tipos de proyectos diferentes (por ejemplo, un proyecto de escritorio y un proyecto móvil), puede buscar en la carpeta de soluciones compartidas. Tengo que hacer eso para mi proyecto actual ya que los proyectos móviles y de escritorio requieren clases idénticas que están solo en 1 archivo. Si realiza esta ruta, cualquiera de los proyectos que tengan el archivo vinculado puede realizar cambios en él y todos los proyectos se reconstruirán con esos cambios.

Hay un muy buen caso para usar “agregar enlaces de archivos existentes” cuando se reutiliza el código en los proyectos, y es cuando necesita hacer referencia y soportar diferentes versiones de bibliotecas dependientes.

Hacer múltiples ensambles con referencias a diferentes ensambles externos no es fácil de hacer sin duplicar el código o utilizar trucos con el control del código fuente.

Creo que es más fácil mantener un proyecto para el desarrollo y la prueba unitaria, y luego crear proyectos ‘comstackdos’ utilizando enlaces de archivos existentes cuando necesite crear ensamblajes que hagan referencia a versiones diferentes de dichos ensamblajes externos.

Una forma más sencilla de incluir un archivo de clase de un proyecto en otros proyectos es mediante Agregar el proyecto en la solución existente y luego Agregar la referencia de la DLL del nuevo proyecto en el proyecto existente. Finalmente, puede usar los métodos de la clase agregada calificando usando la directiva en la parte superior de cualquier clase.

Dos pasos principales involucrados son

1- Creando un dll C ++

En el estudio visual

 New->Project->Class Library in c++ template. Name of project here is first_dll in visual studio 2010. Now declare your function as public in first_dll.h file and write the code in first_dll.cpp file as shown below. 

Código de archivo de encabezado

 // first_dll.h using namespace System; namespace first_dll { public ref class Class1 { public: static double sum(int ,int ); // TODO: Add your methods for this class here. }; } 

Archivo Cpp

 //first_dll.cpp #include "stdafx.h" #include "first_dll.h" namespace first_dll { double Class1:: sum(int x,int y) { return x+y; } } 

Mira esto

 **Project-> Properties -> Configuration/General -> Configuration Type** 

esta opción debe ser Biblioteca dinámica (.dll) y comstackr la solución / proyecto ahora.

El archivo first_dll.dll se crea en la carpeta Debug

2- Vincularlo en el proyecto C #

Proyecto Open C #

 Rightclick on project name in solution explorer -> Add -> References -> Browse to path where first_dll.dll is created and add the file. 

Agregue esta línea en la parte superior del proyecto C #

 Using first_dll; 

Ahora se puede acceder a la función de dll utilizando la statement siguiente en alguna función

 double var = Class1.sum(4,5); 

Creé dll en proyecto de C ++ en VS2010 y lo usé en el proyecto VS2013 C #. Funciona bien.

Puede alojar un servidor NuGet interno y compartir las bibliotecas comunes que se compartirán en otros proyectos interna y externamente.

Más adelante en esta lectura

A partir de VisualStudio 2015, si mantiene todo su código en una solución, puede compartir el código agregando un proyecto compartido . A continuación, agregue una referencia a este proyecto compartido para cada proyecto en el que desee usar el código, así como las directivas de uso adecuadas.