asp.net - studio - publicar sitio web en iis
¿Cómo obtener la funcionalidad ''Publicar'' de Visual Studio para incluir archivos desde el evento de compilación posterior? (5)
Encontré una solución al problema utilizando el elemento ExcludeFilesFromDeployment
dentro del archivo del proyecto. Obtuve la idea de Implementación web: excluir archivos y carpetas
Por lo tanto, si necesita empaquetar los archivos de proyecto tal como existen en su directorio de proyecto después de una compilación exitosa y los pasos de compilación posteriores asociados, haga lo siguiente.
- Edite la configuración del proyecto "Paquete / Publicar web" y
seleccione Elementos para implementar para que sean "Todos los archivos en esta carpeta de proyectos" - Descargar el proyecto
- Haga clic derecho en el proyecto descargado y seleccione para editar la configuración del proyecto
- Ubique el elemento
PropertyGroup
asociado a la configuración de configuración, por ejemplo, "Release" Dentro del elemento
PropertyGroup
agregue los siguientes elementos y excluya los archivos y las carpetas que no desea en el paquete<ExcludeFilesFromDeployment>*.cs;**/.svn/**/*.*;Web.*.config;*.csproj*</ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment>.svn;Controllers;BootstrapperTasks;Properties</ExcludeFoldersFromDeployment>
Guarde y vuelva a cargar su proyecto
Esto resuelve mi problema por el momento, pero si hay una solución mejor, háganmelo saber, ya que esto no es ideal debido a la piratería involucrada, pero de nuevo quizás este sea un escenario de implementación poco común.
Actualmente estoy intentando utilizar Visual Studio 2010 ''Publicar'' y la funcionalidad de MSDeploy para manejar mis necesidades de implementación web, pero me he topado con una barricada en lo que respecta a la personalización del paquete según mi configuración de compilación.
Desarrollo en un entorno de 32 bits pero necesito crear un paquete de lanzamiento para un entorno de 64 bits, por lo que en la configuración ''Release'' tengo un evento de compilación posterior que copia la versión de 64 bits de un dll de terceros en el directorio bin sobrescribiendo la versión de 32 bits . Cuando uso la funcionalidad ''Publicar'', aunque el dll de 64 bits correcto se esté copiando al directorio bin, no se incluye en el paquete.
¿Hay alguna manera de hacer que ''Publicar'' incluya los archivos que se han copiado en el directorio bin durante un evento de compilación posterior?
Respondí una pregunta similar pero diferente en ¿Cómo se incluyen archivos adicionales utilizando paquetes de despliegue web VS2010? .
En el caso de que esté utilizando un evento de compilación posterior, recomendaría descartar el evento de compilación posterior e implementar sus acciones utilizando sus propios objetivos de MSBuild en lugar de publicar el evento de compilación. A continuación encontrará el texto de la otra respuesta.
De: ¿Cómo se incluyen archivos adicionales con los paquetes de despliegue web VS2010?
Gran pregunta Acabo de publicar una entrada de blog muy detallada sobre esto en Web Deployment Tool (MSDeploy): Build Package, que incluye archivos extra o excluye archivos específicos .
Aquí está la sinopsis. Después de incluir archivos, también muestro cómo excluir archivos.
Incluyendo archivos extra
Incluir archivos extra en el paquete es un poco más difícil, pero aún no hay bigee si te sientes cómodo con MSBuild, y si no estás leyendo esto. Para hacer esto, necesitamos conectarnos a la parte del proceso que recopila los archivos para el empaquetado. El objetivo que necesitamos extender se llama CopyAllFilesToSingleFolder. Este objetivo tiene una propiedad de dependencia, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, que podemos aprovechar e inyectar nuestro propio objetivo. Así que crearemos un objetivo llamado CustomCollectFiles e inyectaremos eso en el proceso. Logramos esto con lo siguiente (recuerde después de la declaración de importación).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
Esto agregará nuestro objetivo al proceso, ahora tenemos que definir el objetivo en sí. Supongamos que tiene una carpeta llamada Extra Files que se encuentra 1 nivel por encima de su proyecto web. Desea incluir todos esos archivos. Aquí está el objetivo CustomCollectFiles y discutiremos después.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="../Extra Files/**/*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Aquí lo que hice fue crear el elemento _CustomFiles y en el atributo Include le dije que recogiera todos los archivos en esa carpeta y cualquier carpeta debajo de ella. Luego utilizo este elemento para completar el elemento FilesForPackagingFromProject. Este es el elemento que MSDeploy realmente usa para agregar archivos extra. También tenga en cuenta que he declarado el valor DestinationRelativePath de metadatos. Esto determinará la ruta relativa que se colocará en el paquete. Usé la declaración Extra Files% (RecursiveDir)% (Filename)% (Extension) aquí. Lo que está diciendo es colocarlo en la misma ubicación relativa en el paquete que en la carpeta Extra Files.
Excluyendo archivos
Si abre el archivo de proyecto de una aplicación web creada con VS 2010 hacia la parte inferior del mismo, encontrará una línea con.
<Import Project="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v10.0/WebApplications/Microsoft.WebApplication.targets" />
Por cierto, puede abrir el archivo de proyecto dentro de VS. Haga clic con el botón derecho en la selección del proyecto Descargar proyecto. A continuación, haga clic derecho en el proyecto descargado y seleccione Editar proyecto.
Esta declaración incluirá todos los objetivos y tareas que necesitamos. La mayoría de nuestras personalizaciones deben realizarse después de esa importación, si no está seguro, ¡si lo hizo después! Entonces, si tiene archivos para excluir, hay un nombre de elemento, ExcludeFromPackageFiles, que se puede usar para hacerlo. Por ejemplo, digamos que tiene un archivo llamado Sample.Debug.js que se incluye en su aplicación web, pero desea que ese archivo se excluya de los paquetes creados. Puede colocar el fragmento a continuación después de esa declaración de importación.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Al declarar poblar este elemento, los archivos se excluirán automáticamente. Tenga en cuenta el uso de los metadatos FromTarget aquí. No entraré en eso aquí, pero debes saber especificarlo siempre.
Sé que es una vieja pregunta, pero ninguno de estos funcionó para mí.
En 2017 VS, simplemente hice clic derecho en la carpeta adicional para publicar y seleccioné la publicación funcionó.
Seleccione sus archivos o carpetas y la acción Cambiar compilación como contenido de la ventana Propiedades.
Agregar la carpeta bin (y sus contenidos) al proyecto hizo que los archivos se copiaran en el directorio de salida de publicación.
Para mí, mi problema era que necesitaba colocar un archivo de licencia de software propietario en la carpeta / bin, pero no quería copiarlo manualmente en cada implementación.
Esto fue usando Visual Studio 2015 Professional