Siendo nuevo en VS, ¿cómo puedo pensar en estos dos conceptos, cuál es la diferencia?
103
Siendo nuevo en VS, ¿cómo puedo pensar en estos dos conceptos, cuál es la diferencia?
Una solución es un contenedor para proyectos y realiza un seguimiento de las dependencias entre proyectos.
Encuentro información que falta en las otras respuestas (al menos para las personas que provienen de otros IDE como, por ejemplo, Eclipse). Decir que una solución es un contenedor de proyectos es solo una parte del asunto. La característica conceptual de un proyecto VS (lo que determina su 'granularidad') es que un proyecto produce una salida : típicamente un ejecutable o una biblioteca (dll). Entonces, si va a codificar tres ejecutables que usan código relacionado, creará una solución y al menos tres proyectos, probablemente más.
Solo para pensar en una metáfora.
Una solución es como una casa, un proyecto como una habitación. Cada habitación proporciona una pieza de funcionalidad, mientras que la casa, un contenedor de habitaciones, proporciona los medios para unir las habitaciones y organizarlas adecuadamente.
Un poco cursi, pero lo inventé sobre la marcha, así que tengan paciencia conmigo :)
fuente
No ayuda que Visual Studio parezca hacer las cosas más confusas. "Nuevo proyecto" en realidad crea una nueva SOLUCIÓN que contiene un proyecto. "Abrir proyecto" realmente abre una solución que contiene uno (o varios) proyectos. (El menú de archivo dice "Abrir proyecto / solución" pero en realidad abre soluciones. No hay "Cerrar proyecto", solo "Cerrar solución", lo cual es correcto.
Entonces, en VS siempre estás trabajando dentro de una solución. Muchas soluciones contienen solo un proyecto y es probable que los desarrolladores más nuevos piensen en ellos como lo mismo. Sin embargo, puede agregar otros proyectos a una solución.
fuente
En caso de que alguien decida desplazarse hasta aquí ... pensé que los documentos de MS hicieron un buen trabajo al describir las diferencias. He copiado pegado (y reformulado) los bits relevantes aquí:
Una solución tiene un
.suo
archivo asociado que almacena ajustes, preferencias e información de configuración para cada usuario que ha trabajado en el proyecto.fuente
Una solución puede tener muchos proyectos.
La Solución también puede manejar la gestión de las dependencias entre sus diferentes Proyectos ... asegurándose de que cada Proyecto se Construya en el orden apropiado para que funcione la Solución final.
fuente
Un proyecto contiene archivos ejecutables y de biblioteca que forman una aplicación o componente de una aplicación.
Una solución es un marcador de posición para proyectos relacionados lógicamente que componen una aplicación. Por ejemplo, podría tener proyectos separados para la GUI de su aplicación, la capa de acceso a la base de datos, etc. Los proyectos serían divisiones específicas para la funcionalidad de su programa, y la solución sería el paraguas que los unificaría a todos en una sola aplicación.
fuente
Las soluciones son contenedores para proyectos; también puede usarlos para organizar elementos que se usan en diferentes proyectos relacionados (dll compartidos y similares).
fuente
Una solución es un archivo de texto legible cuya extensión es
.sln
y que tiene un contenido estructurado que describe los proyectos que contiene. Un proyecto es un archivo de texto con formato XML legible cuya extensión es.vcxproj
y tiene un contenido estructurado de acuerdo con su esquema XML, y cuyo propósito principal es contener la lista de nombres de archivo de códigos fuente y sus dependencias o referencias a códigos fuente de otros proyectos.fuente
Para obtener más detalles, consulte: https://docs.microsoft.com/en-us/visualstudio/ide/quickstart-projects-solutions
Si tiene antecedentes de Eclipse, probablemente iría a construir la ruta de un proyecto y agregaría una dependencia en otro proyecto o agregaría un jar externo. En VS, puede hacer eso en un solo contenedor llamado solución donde todos los proyectos relacionados se agrupan.
P.ej. Digamos que está compilando una aplicación para Android e iOS en xamrin, habría algunos códigos y recursos comunes que podrían ir en un proyecto separado y luego sus proyectos de Android e iOS pueden depender de este proyecto de código común. También podría tener proyectos para probar estos proyectos, etc.
fuente