2011-05-12 14 views
8

Si tiene un tipo de proyecto de sitio web ASP.NET (el que no tiene un archivo de proyecto .csproj o .vpproj adecuado y eso es solo una carpeta de archivos sueltos), luego cuando agrega un paquete con NuGet, crea un archivo * .dll.refresh en el directorio Bin para hacer referencia al dll del paquete en la carpeta de paquetes principales.Uso de NuGet con archivos * .dll.refresh en proyectos de "Sitio web" de ASP.NET con Proyectos de implementación web

Por ejemplo, si ejecuta "install-package elmah" desde la consola del Administrador de paquetes, entonces Elmah se coloca en la carpeta de paquetes en el directorio de soluciones del proyecto, y el archivo Elmah.dll.refresh se coloca en el contenedor del proyecto carpeta.

Cuando construyo el proyecto localmente, Visual Studio extrae automáticamente la DLL a la que hace referencia el archivo de actualización. El sitio y Elmah se ejecutan correctamente. No tengo el archivo Elmah.dll que se encuentra en el directorio Bin del proyecto registrado en el control de origen (solo el archivo de actualización y la carpeta de paquetes están registrados).

Sin embargo, estoy usando Proyectos de implementación web para precompilar el sitio y hacer sustituciones de implementaciones web.config. Cuando la solución se genera de esta manera, Elmah.dll no se inserta automáticamente en el directorio Bin del proyecto del sitio web y el sitio no se ejecuta correctamente debido a la falta de DLL.

¿Cómo se va a utilizar NuGet en este tipo de situaciones? ¿Debo verificar Elmah.dll en el directorio Bin?

Respuesta

8

Esto se basa en la solución de GC. Anterior. Agregue una biblioteca de clases (csproj) y haga referencia a esa biblioteca de clases en el proyecto del sitio web. Agregue los paquetes nuget a la biblioteca de clases. En la biblioteca de clases, realmente hace referencia a los paquetes nuget en algún archivo de clase. Tal vez crear una instancia desechable o algo así. Puedes usar cualquier clase que esté contenida en el paquete. Esto fuerza al .dll a copiarse al directorio Bin en el proyecto del sitio web.

+0

Esto se prueba y funciona tanto en Visual Studio como ejecutando MSBuild directamente en una máquina de compilación. –

0

Supongo que la compilación previa no actualiza los archivos DLL utilizando el archivo .refresh, tal vez eso sea hecho por Visual Studio.

Si no puede encontrar una manera de hacerlo, puede crear un paso de compilación que copie las DLL en la carpeta bin manualmente, o si está tratando de evitar dos copias de las DLL, quizás pueda verificar en la carpeta bin y no en los paquetes uno. Puede usar NuGet.exe para volver a buscar los paquetes, completando la carpeta de paquetes (consulte here y here)

4

- EDITAR - Consulte la versión actualizada de esta solución anterior.

Simplemente agregue un proyecto de biblioteca de clase a la solución y agregue una referencia al proyecto de la biblioteca de clase en su sitio web.

A continuación, agregue el nuget en la biblioteca de la clase, no en el proyecto del sitio web.

Cuando se crea su sitio web, atrae todas las dependencias de las bibliotecas de clases sucesivamente.

Cuestiones relacionadas