Tengo algunos archivos dll en la carpeta \ lib de mi carpeta de proyecto. En la página de propiedades de dll, he seleccionado "Acción de compilación" como "Contenido" y "Copiar al directorio de salida" como "Copiar siempre".
Después de la compilación, en realidad estoy copiando el dll, pero están dentro de \ bin \ Release \ lib y no en \ bin \ Release.
¿Hay alguna forma de copiar archivos dll en \ bin \ Release (y no en \ bin \ Release \ lib) sin escribir un script posterior a la compilación o recurrir a nant, etc.?
fuente
ContentWithTargetPath
rupturas de compilación incremental (probado en VS 2017 15.9.9)Guárdelos
$(ProjectDir)\Lib
, pero agregue esos archivos " Como un vínculo " a la raíz de su .csproj. Ahora se copiarán en bin \ Debug (o cualquier otra carpeta de salida) sin estar en lib.EDITAR: Esta respuesta se escribió hace mucho tiempo cuando ContentWithTargetPath no estaba disponible en las versiones de VS / MSBuild que estaba usando. Dejando esta respuesta aquí para las personas que podrían tener que usar una versión anterior de VS. Deje de comentar sobre esto, todos sabemos que ahora hay mejores formas.
fuente
Si su intención principal es incluir archivos DLL sin saturar el directorio raíz del proyecto, otra solución es mover los archivos DLL a un proyecto compartido separado y agregar esto como referencia en el proyecto original.
(Tenga en cuenta que esta publicación no responde directamente a esta pregunta ya que no conserva la estructura de la carpeta y el proyecto, pero encontré este enfoque útil porque pude reestructurar mi proyecto en mi caso y porque quería evitar algunos de los desventajas de los otros enfoques aquí).
Pasos
Solution -> Add -> New Project -> Shared Project
Build Action: Content
yCopy to Output Directory: Copy Always
)References -> Add Reference -> Shared Projects
La configuración se ve así:
fuente
Agregue los archivos dll como referencia al proyecto y en el conjunto de referencia "Copiar local" a verdadero.
fuente
Si necesita copiar archivos del directorio Libs a la carpeta raíz VS2017:
A cualquier otra carpeta, incluida la carpeta Libs (RecursiveDir)
fuente
En VisualStudio 2015 parece que si los dlls que está 'agregando con un enlace' están en una subcarpeta de ese mismo proyecto , se colocarán automáticamente en una carpeta y la salida también se colocará en una carpeta como la que vio.
Si las DLL están en otro proyecto o directorio en el disco que no está en una subcarpeta del proyecto , puede 'Agregar con un enlace', y se colocarán en el directorio raíz sin problemas.
fuente
Un método alternativo es simplemente dejar los elementos como tipo
None
. En el explorador de soluciones, haga clic en las que desea implementar y establezca laContent
propiedad enTrue
.Nota: Hice esto en VS2019 y las cosas pueden cambiar de una versión a otra.
Para que esto funcione, ahora haga clic derecho en su proyecto y seleccione "Descargar proyecto". Luego haga clic derecho en el proyecto descargado y seleccione "Editar nombre_proyecto.vcxproj".
En el editor, vaya hasta el final del archivo e inserte este destino justo antes de la
</Project>
etiqueta final :Ahora haga clic derecho en el proyecto descargado y seleccione "Recargar proyecto". Seleccione para guardar y cerrar si se le solicita.
También configuré el
OutputDirectory
para:$(SolutionDir)bin\$(Configuration)\$(Platform)\
y el
IntermediateDirectory
a:$(SolutionDir)obj\$(Configuration)\$(ProjectName)\$(Platform)\
en la página General de propiedades del proyecto. Esto coloca la salida en una carpeta "bin" y los intermedios en una carpeta "obj" en la raíz de su solución.
Nota:
$(SolutionDir)
no se define cuando ejecuta MSBuild desde la línea de comandos. Hay un truco que puede usar para definir eso en la carpeta donde vive el archivo .sln usando GetDirectoryNameOfFileAbove. (dejado como ejercicio para el lector). Además, parece que en 2019 lo están manejando correctamente en la línea de comandos de todos modos. Sí :) El$(SolutionDir)
contiene una barra diagonal inversa, por lo tanto, no después de ella. Los resultados de cada uno deben tener una barra invertida al final.Ahora, si posee Pro o superior, no haga esto cada vez que necesite crear un proyecto. Eso sería tonto. En cambio, una vez que haya configurado su proyecto de la manera que le gusta, seleccione
Project -> Export Template
. Le da un nombre y la próxima vez que desee crear un proyecto como ese, simplemente elija ese nombre en el cuadro de diálogo Nuevo proyecto. (En la versión anterior, creo que esto fue asíFiles -> Export Teamplate...
).fuente
Tuve el mismo problema con Visual Studio 2010 / C # Project.
Para ensamblajes (es decir, que tengan la interfaz .NET) use la carpeta "Referencias" debajo de su proyecto en el Explorador de soluciones. Haz clic derecho, elige "Agregar elemento existente" y localiza tu ensamblaje .dll.
Los archivos .dll comunes se pueden colocar en una subcarpeta (como se mencionó anteriormente "\ lib") y en las propiedades seleccione:
Esto funcionó para mí exactamente como lo deseaba: durante la compilación, los .DLL se copian en el directorio de salida sin la subcarpeta "\ lib".
fuente