visual vista tutorial temas studio previa para mejores las iconos extensiones español configurar code visual-studio-2010 web-deployment-project

visual studio 2010 - vista - El archivo DLL de referencia no se copia a la papelera con el proyecto de implementación que causa el error



visual studio code español (13)

Algo extraño le había sucedido a mi proyecto de implementación. Cuando vi que no tenía dependencias detectadas, eliminé la salida primaria y la volví a agregar.

Las dependencias ahora aparecen y se colocan en la carpeta bin cuando están instaladas.

Tenemos varios archivos DLL externos a los que se hace referencia en nuestro Proyecto de aplicación web. Tenemos un proyecto de implementación para instalar en los servidores de alojamiento. Cuando usábamos .NET 3.5 y Visual Studio 2008, el archivo DLL se copiaba en la carpeta bin. Desde que nos hemos actualizado a .NET 4 y Visual Studio 2010 esto ya no ocurre, y estamos recibiendo errores en los servidores ya que las referencias no se pueden encontrar.

CopyLocal está establecido en verdadero, y no puedo encontrar nada dentro de la web.config que sugiera que se está configurando en otro lugar.


Compruebe el marco del proyecto en el que se ha hecho referencia al archivo DLL. El marco debe ser .NET 4.0. Corrígela si el marco es Client Profile.


Estaba obteniendo el mismo problema y en lugar de agregar un paso "BeforeBuild", creé una prueba que simplemente hizo esto.

[TestMethod] public void ReferenceAssemblyThatDoesNotCopyToBuildFolder() { Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler referenceThisButDoNotUseIt = null; }

Y eso corrigió el error. El tipo ''Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler ...'' no se puede resolver


Hay un error en Visual Studio 2010. De manera predeterminada, el XML en el archivo de solución se ve así:

<Reference Include="DevExpress.SpellChecker.v11.1.Core, Version=11.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL"> <HintPath>../References/DevExpress.SpellChecker.v11.1.Core.dll</HintPath> </Reference>

Mientras que MSBuild espera esto a continuación, para que el archivo DLL se incluya en la implementación:

<Reference Include="DevExpress.SpellChecker.v11.1.Core, Version=11.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL"> <HintPath>../References/DevExpress.SpellChecker.v11.1.Core.dll</HintPath> <Private>True</Private> </Reference>

El truco es configurar Copy Local en False , guardar el proyecto y luego restablecerlo en True - guardar de nuevo . Esto incluye el nodo Privado correctamente, que MSBuild respeta.

Parece que el valor predeterminado para ningún nodo privado incluido ( Copy Local ) en Visual Studio 2010 es True , mientras que MSBuild lee ese nodo que falta como False .


No encontré el mismo problema pero similar. Tenía un proyecto principal de WPF y un proyecto de referencia donde no se copiaba la referencia. Encontré que en mi caso el proyecto principal se estableció para NET 4.0 Client Profile y se hizo referencia para NET 3.5. Cuando configuré el proyecto principal en 3.5, el dll compilado del proyecto al que se hace referencia comenzó a copiar. (No sé por qué porque lo resolví con la práctica)


No estoy seguro de cómo se configuró en Visual Studio 2008, pero estoy casi seguro de que podría haber estado utilizando la línea de comandos del evento Post-Build. Allí puede decirle copiar los archivos DLL que necesita para la implementación. Un ejemplo se da a continuación:

mkdir $(SolutionDir)/Deployment copy "$(SolutionDir)Your_Library_Name/Your_Dll_ForDeployement.dll" $(SolutionDir)/Deployment/


Obtuve exactamente el mismo problema. Tenemos un proyecto de Visual Studio 2008 que hace referencia a EnterpriseLibrary. Cuando ejecutamos nuestra compilación integrada utilizando TFS y nuestro proyecto de implementación web, todos los archivos DLL se copian. Cuando actualizamos a Visual Studio 2010, TFS 2010 y WDP 2010, faltaban algunos de los archivos DLL. Extrañamente, esto solo ocurre en algunos archivos DLL y no en otros.

Por ejemplo, obtenemos el Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll copiado en ambos casos, pero no en Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll.

Como solución, copié los archivos usando el paso "BeforeBuild".

Ahora parece construir bien.


Podemos utilizar <Private>False</Private> para no copiar los archivos DLL a los que se hace referencia en el directorio bin . Esto es útil cuando estamos construyendo aplicaciones en un servidor de compilación TFS por separado donde necesitamos construir la aplicación y no copiar los archivos DLL al directorio bin .


Si su proyecto no carga directamente la biblioteca, no siempre se desplegará, ¡incluso si se hace referencia explícitamente! Me confundí porque podía verlo en un directorio local de Bin pero no cuando estaba implementado. El dll en el directorio Bin era un archivo antiguo que no se eliminó durante la limpieza, razón por la cual estaba confundido.

Una limpieza completa y reconstrucción y tampoco estaba en mi carpeta local de Bin que me mostró el problema (solo lo uso en web.config). A continuación, hice referencia al archivo dll en sí en el proyecto y lo configuré para que se copiara a la salida para asegurarse de que se implemente.


Simplemente tuve el mismo problema y quería compartir lo que encontré, ya que podría ayudar a alguien:

La razón en mi caso fue que el ensamblado se instaló en el GAC durante la instalación de alguna aplicación de terceros.

Si el archivo DLL está en el GAC, el compilador no se molestará en copiarlo a la carpeta de destino, a menos que lo marque específicamente para "copiar local" usando el nodo "Privado" en el archivo del proyecto como lo menciona Junto.

El problema es que si no agrega ese nodo, y desarrolla en una máquina y construye en una diferente, y el archivo DLL está solo en el GAC de la máquina de compilación, el comportamiento predeterminado sin el nodo privado causará el archivo que debe copiarse correctamente en la máquina de desarrollo, pero no en la máquina de compilación.

El problema más grande es si el archivo DLL no se referencia directamente, sino que el proyecto hace referencia a un segundo proyecto que a su vez hace referencia al archivo DLL. En ese caso, no puede marcar el archivo DLL para que sea "copiar local" en el proyecto, ya que no se hace referencia a él. Entonces, si el archivo DLL existe en el GAC, no se copiará a su carpeta de salida.

Las posibles soluciones a este caso son:

  • Desinstale el archivo DLL del GAC
  • Agregue una referencia directa al archivo DLL en el (los) proyecto (s) final (es)
  • Vuelva a firmar el archivo DLL con un nuevo nombre seguro, que lo diferenciará del archivo DLL en el GAC.

También me encontré con un problema similar en el que los dlls a los que se hace referencia no se copiaron en el bin en la carpeta publicada. Estaba usando una copia de TFS que no incluía la carpeta bin en la aplicación. -> Así que acaba de incluir la carpeta bin. -> Construí las aplicaciones referenciadas -> Publiqué el proyecto del sitio web Ahora veo todas las dlls referenciadas en el contenedor en la carpeta publicada


Tuve un problema similar con VS 2012 Express. Utilicé bibliotecas de Tesseract en mi proyecto. Todo funcionó bien hasta que utilicé este proyecto en una solución donde había más de un proyecto. El problema fue que algunas DLL (liblept168.dll, libtesseract302.dll) que normalmente se colocan en las carpetas bin / debug / x86 o bin / debug / x64 se copiaron solo cuando reconstruí toda la solución. Cambiar una sola línea y construirla de nuevo provocó que los archivos DLL se eliminaran y no se volvieran a copiar.

Resolví este problema al agregar una referencia del proyecto que crea las DLL faltantes al proyecto de inicio.


rzen y otros, gracias. Sus comentarios nos llevaron a una solución.

Tenemos un proyecto que se dirige a la versión 10 de los ensamblados Microsoft.ReportViewer.Common.dll y Microsoft.ReportViewer.WebForms.dll (por separado, la carpeta "libs" que creamos en el nivel ''src''). Pero cuando hicimos una compilación, la salida incluía la versión 12, que se instaló recientemente en el servidor de compilación.

Al usar los comentarios aquí, nos aseguramos de que ''Copiar local'' se configuró en True y que el indicador se configuró en el archivo del proyecto. Sin embargo, todavía estaba implementando la versión 12. Entonces, lo que descubrimos que el truco fue asegurarse de que la propiedad ''Versión específica'' también se estableció en las dos referencias. ¡Voila, la versión 10 de cada archivo ahora se está implementando!

Hubo mucho regocijo.

J H