2010-04-07 19 views
16

Soy nuevo en Visual Studio, proveniente de Delphi.Visual Studio: Agregar elemento/Agregar como enlace en lugar de solo Agregar

Tengo un árbol de directorios lleno de archivos .cs (la raíz es \ Común).
También tengo un árbol de directorios completo de aplicaciones (raíz es \ Applications)
Por último, tengo un árbol lleno de asambleas (raíz es \ Assemblies)

Me gustaría mantener mis archivos .cs en el árbol común y todo el entorno vudú (soluciones, proyectos, configuraciones, metadatos, datos de depuración, bin, etc.) en el árbol de Assmblies. Entonces, para un ejemplo simple, tengo un ensamblado llamado PdMagic.Common.Math.dll. La solución y el proyecto se encuentran en \ Assemblies \ Common \ Math. Todos sus archivos de origen (.cs) están en \ Common \ Math. (matrix.cs, trig.cs, mathtypes.cs, mathfuncs.cs, stats.cs, etc.)

Cuando uso Agregar elemento existente para añadir matrix.cs a mi proyecto, un copy de ella es agregado a la carpeta \ Assemblies \ Common \ Math. Solo quiero referenciarlo. No quiero copias múltiples por ahí. Intenté Agregar artículo existente y utilicé el menú desplegable para "Agregar enlace" en lugar de solo "Agregar", y eso parece hacer lo que quiero.

Pregunta: ¿Cuál es la "mejor práctica" para este tipo de cosas? ¿La mayoría de la gente simplemente pone esos archivos .cs en la misma carpeta que el proyecto? ¿Por qué no es "Agregar enlace" el valor predeterminado?

Gracias!

+0

Para responder a su otra pregunta, el equipo de Prism ha trabajado mucho para que esto funcione. Echa un vistazo a esta publicación: http://msdn.microsoft.com/en-us/magazine/ee321573.aspx – NerdFury

+0

Prism "linker del proyecto" es perfecto. Exactamente lo que tenía en mente. Ahora tengo que averiguar si puedo usarlo. Gracias. –

Respuesta

11

La "mejor práctica" en este caso es no pelear con la herramienta. Le permite hacer lo que quiera, pero obtendrá más trabajo y podrá centrarse en el código si deja que el IDE organice su proyecto por usted.

Crearía un proyecto de solución vacío llamado PdMagic.Común

Esto le dará una estructura de archivos como

PdMagic.Common\ 
PdMagic.Common\PdMagic.Common.sln 

entonces generalmente añadir una carpeta src y libs (a través del sistema de archivos, no VS)

dentro de la carpeta libs, yo colocaría todos mis dependencias de terceros, y la carpeta src llevaría a cabo todos mis proyectos

PdMagic.Common\ 
PdMagic.Common\PdMagic.Common.sln 
PdMagic.Common\libs 
PdMagic.Common\libs\nunit 
PdMagic.Common\src 

a continuación, en Visual Studio, me gustaría hacer clic derecho sobre la solución que acabo de crear y haga clic en " Add -> Nuevo proyecto", me gustaría especificar que quería que crea en la carpeta \ src y llamarlo PdMagic.Common.Math

Ahora mi estructura de carpetas se vería así

PdMagic.Common\ 
PdMagic.Common\PdMagic.Common.sln 
PdMagic.Common\libs 
PdMagic.Common\libs\nunit 
PdMagic.Common\src 
PdMagic.Common\src\PdMagic.Common.Math 
PdMagic.Common\src\PdMagic.Common.Math\PdMagic.Common.Math.csproj 
PdMagic.Common\src\PdMagic.Common.Math\Class1.cs 

Entonces, como agrega clases a su proyecto PdMagic.Common.Math, irán a la carpeta con el archivo del proyecto. Así es como el IDE tiene la opinión de que deberíamos trabajar, y creo que la mayoría de los desarrolladores lo hacen porque tratar de obtener cualquier otro diseño en el sistema de archivos requeriría demasiadas peleas con el IDE. Sé que puede ser difícil provenir de una convención diferente, e instintivamente quieres las mismas convenciones en el nuevo entorno. Sin embargo, si se atiene a las convenciones (correcto o incorrecto en su opinión) obtendrá más logros porque no intentará obligar al IDE a hacer las cosas de la manera que cree que deberían hacerse.

+0

Ese es exactamente el tipo de respuesta que estaba buscando. Mientras lo escribías, estaba experimentando yo mismo y se me ocurrió un caso (común) que no estoy seguro de que pueda manejar. Me estoy orientando tanto a Silverlight como a WPF. La mayor parte de la fuente (.cs) es la misma, pero se deben construir diferentes conjuntos para cada uno. Entonces, necesito tener PdMagic.Common.Math para SL y PdMagic.Common.Math para WPF. Creo que esto requiere dos proyectos que usan el mismo Class1.cs. ¿Podría molestarlo para dar un paso más? Gracias de nuevo por su respuesta. –

1

Creo que la "mejor práctica" es tener esas rutinas "comunes" en un conjunto al que pueda hacer referencia en lugar de llevar los archivos fuente a un grupo de proyectos diferentes. Podría agregarlo como un ensamblaje preconstruido con "Agregar referencia ..." o incluir un proyecto para ese ensamblaje y agregar una referencia al proyecto (también hecho en el cuadro de diálogo "Agregar referencia ...").

Esta es una de esas cosas que parece un poco de trabajo para configurar inicialmente (y puede ser), pero generalmente vale la pena en el largo plazo.

+0

@MichaelBurr: ¡me ganaste! Teclado más rápido, supongo. – Cyberherbalist

+0

Creo que quiere organizar su proyecto y sus archivos de forma diferente de como VS cree que debería hacerlo, y por eso está luchando contra el IDE para hacer las cosas como él quiere, en lugar de cómo MS dice que debería querer. No creo que intente reutilizar el código que ya está disponible en un ensamblaje diferente. – NerdFury

+0

@NerdFury: entiendo que los archivos .cs no están actualmente en un ensamblado; sin embargo, creo que podría ser una buena idea empaquetarlos en un conjunto (o varios) para que los utilicen múltiples proyectos.Eso bien podría estar siendo forzado en la forma de hacer las cosas del IDE, pero creo que es la respuesta a la pregunta planteada. –

1

Si desea "hacer referencia" a matrix.cs en su proyecto, no use Agregar elemento existente, cree una referencia ("Agregar referencia") a la biblioteca de clases u objeto del que matrix.cs es parte. Si no quieres (o no puedes usar) la biblioteca u objeto de la que matrix.cs forma parte, entonces Add Link es cómo llegarías a él, pero en serio, nunca he usado esa característica en particular.

Ninguno de los desarrolladores con los que he trabajado en .NET aísla sus archivos .cs en carpetas separadas. El único tipo de segregación como ese que he visto como práctica es en MVC, donde los modelos, vistas y controladores están en sus propias carpetas.

+0

Gracias por eso. Mi intención era que matrix.cs y el otro código .cs se pusieran en una biblioteca PdMagic.Common.Math para que otros proyectos pudieran hacer referencia a ellos. Si no te importa, echa un vistazo a mi comentario en mi publicación original. ¿Cómo manejan los vendedores de herramientas el caso de los .cs comunes para el código SL y WPF? Estos a menudo pueden ser idénticos .cs, pero requieren diferentes ensambles para ser construidos para cada uno. –

1

Debido a que desea hacer referencia matrix.cs en el proyecto, no te solo use AddExistigItem, cree un nuevo referene para la clase.

66

sólo puede utilizar Agregar Como Enlace haciendo clic en la flecha pequeña a la derecha del botón de adición de Agregar -> elemento existente comando ...

(Thanks Peter)

Mientras Me doy cuenta de que esto no es una respuesta a la pregunta original (que se refiere a las mejores prácticas), presento esta respuesta para ahorrar el tiempo de otros que han sido dirigidos aquí por el título engañoso de esta pregunta.

+2

La mejor respuesta hasta el momento, así que aquí está su representante de +10. –

+5

¡No es la mejor respuesta a la pregunta anterior, sino la respuesta a lo que estaba buscando! –

+0

He estado trabajando en Visual Studio desde antes de que tuviera números de versión, ¡y nunca me di cuenta de esta característica! ¡Gracias! (nota al margen @GrantWinney, confirmo su teoría; esta pregunta está altamente clasificada para "cómo agregar archivos como enlaces", y así es como llegué aquí). –

Cuestiones relacionadas