¿Es posible crear un proyecto de Visual Studio con un tipo de salida de "ninguno"?
-
07-07-2019 - |
Pregunta
Estoy usando Visual Studio 2008 y me gustaría crear una especie de proyecto contenedor que contenga varias DLL que deben instalarse con una solución. Quiero que estén en un proyecto separado para que puedan adjuntarse fácilmente a una solución como grupo.
Creé un proyecto vacío llamado TEST, le agregué mis DLL con una acción de compilación de "Contenido" y los configuré en "Copiar siempre". Todo eso funciona exactamente como yo quiero. El problema es que si configuro el Tipo de salida del proyecto TEST en " Aplicación de consola " o "Aplicación de Windows" que no se construirá porque no hay punto de entrada. Si configuro el Tipo de salida en " Biblioteca de clases " ;, se construye pero termino con un archivo TEST.DLL adicional que realmente no quiero.
¿Hay alguna forma de establecer el Tipo de salida en " none " ;? Quiero que se realicen las acciones de compilación (para que se copien mis archivos DLL) pero no quiero que se cree el ensamblado de clase ficticio. ¿Alguna idea?
¡Gracias!
Solución
Suposiciones para la siguiente guía paso a paso:
Supongamos que tiene una solución con dos proyectos:
-
Main
: su proyecto principal (inicio). -
BundledDLLs
: un proyecto de biblioteca que contiene los.dll
s que deberían terminar en el directorio de salida del proyecto principal.
Guía paso a paso:
La forma más fácil de lograr su objetivo dentro de Visual Studio es probablemente la siguiente:
Agregue todos los
.dll
s aBundledDLLs
y configure su Copiar al directorio de salida a Copiar si más reciente .Esto se realiza en el Explorador de proyectos y las ventanas Propiedades .
Configure el directorio de salida de
BundledDLLs
para que sea idéntico al directorio de salida deMain
.Esto se puede hacer en la pestaña Build de la página
BundledDLL
Project Properties . Ingrese algo como lo siguiente en el cuadro de texto Ruta de salida :..\Main\bin\Debug
Configurar
BundledDLLs
como una dependencia deMain
.No agregue
BundledDLLs
como referencia de proyecto aMain
, como normalmente lo haría; en su lugar, use el cuadro de diálogo Dependencias del proyecto para. Esto le dirá a la herramienta de compilación que cada vez que se construyeMain
, primero debe crearseBundledDLLs
.Haga esto haciendo clic derecho en el nodo del proyecto
Main
para abrir el menú contextual; seleccione Dependencias del proyecto ... desde allí. En el cuadro de diálogo ahora abierto, primero seleccioneMain
de la lista desplegable; luego marqueBundledDLLs
en la lista de proyectos a continuación.BundledDLLs
ahora está registrado como una dependencia deMain
.P.S .: Una desventaja de no tener una referencia de ensamblaje explícita en
Main
es que algunas herramientas podrían no reconocer la dependencia. Por ejemplo, la implementación de ClickOnce podría no funcionar correctamente.Agregue un evento posterior a la compilación a
BundledDLLs
que elimina el superfluoBundledDLLs.dll
.Como dijiste, no quieres y no necesitas la salida ficticia generada cuando se construye
BundledDLLs
. Entonces, agregue un evento posterior a la compilación que simplemente elimine este.dll
una vez que se haya creado.Abra la pestaña Eventos de compilación en la página
BundledDLLs
Propiedades del proyecto e ingrese algo como lo siguiente en el cuadro de texto posterior a la compilación:DEL "$(TargetDir)\$(TargetName).*"
(En caso de que se haya preguntado: la razón por la que no agregó este proyecto como referencia de proyecto a
Main
anteriormente es porque si lo hubiera hecho,Main
busqueBundledDLLs.dll
, que no podrá encontrar, ya que en realidad no desea que se genere dicho archivo).P.S .: Una desventaja de agregar dicho paso posterior a la compilación es que podría interferir con las compilaciones incrementales. Si su proyecto sigue siendo recompilado desde cero después de esto, es mejor que elimine el paso posterior a la compilación y viva con el
BundledDLLs.dll
adicional en el directorio de salida de su solución.
Otros consejos
Otra opción es usar un proyecto de archivo MAKE, que no requiere que construyas / vincules nada.
En las propiedades de su proyecto (haga clic con el botón derecho en la propiedad en el explorador de soluciones y haga clic en "Propiedades"), en "Propiedades de configuración" y luego en "General", elija "Makefile" del " Tipo de configuración " Menú desplegable. El resultado de la compilación incluirá la advertencia " La propiedad 'NMakeBuildCommandLine' no existe ... Omitiendo " pero la compilación tendrá éxito sin construir ningún dll / exe / etc.
Si bien otras respuestas aquí pueden abordar mejor su necesidad específica, la especificación de un archivo MAKE responde más directamente al título de la pregunta "¿Es posible crear un proyecto de Visual Studio con un tipo de salida de ninguno?" Espero que esto sea útil para las personas que buscan algo en Google y aterrizan aquí.
El crédito va a Xeek en el canal #winapi freenode irc por compartir este consejo.
En lugar de ponerlos en un proyecto, puede colocar los archivos en un Carpeta de soluciones . Uno de sus proyectos puede tener una acción de compilación que haga la copia, pero como no estarán en un proyecto, no intentarán " compilar " ;.