remote - Excluir archivos del sitio web publicados en Visual Studio
web deploy agent service (8)
Creo que solo tienes dos opciones aquí:
- Use la función ''Excluir del proyecto''. Esto no es ideal porque el elemento del proyecto se excluirá de cualquier operación integrada de control de fuente IDE. Debería hacer clic en el botón "Mostrar todos los archivos" en la ventana de la Solución si necesita ver los archivos en el Explorador de soluciones, pero eso también muestra los archivos y las carpetas que no le interesan.
- Utilice un script de evento posterior a la creación para eliminar los elementos del proyecto que no desee que se publiquen (suponiendo que esté publicando en una carpeta local y luego lo cargue en el servidor).
He pasado por esto antes y no he podido encontrar nada realmente elegante.
¿Puedo excluir una carpeta o archivos cuando publico un sitio web en Visual Studio 2005? Tengo varios recursos que quiero tener a mano en el Explorador de soluciones, como archivos de configuración alternativa para varios entornos, pero realmente no quiero publicarlos en el servidor. ¿Hay alguna forma de excluirlos? Al utilizar otros tipos de proyectos, como un ensamblado .dll, puedo establecer la propiedad Acción de compilación de un archivo en "Ninguno" y su propiedad Copiar en directorio de salida en "No copiar". No puedo encontrar configuraciones similares para archivos en un sitio web.
Si el IDE no ofrece esta característica, ¿alguien tiene una buena técnica para manejar dichos archivos?
En Visual Studio 2013 encontré la respuesta de Keith, agregando el elemento ExcludeFoldersFromDeployment
al archivo del proyecto, no funcionó (no había leído la respuesta de Brian Ogden que dice esto). Sin embargo, descubrí que podía excluir un archivo de texto al publicar en Visual Studio 2013 simplemente estableciendo las siguientes propiedades en el archivo de texto en sí:
1) Acción de compilación: ninguna
2) Copiar al directorio de salida: no copiar
Inicialmente intenté configurar la propiedad Copiar al directorio de salida por sí mismo, pero eso no funcionó cuando la Acción de compilación se configuró en el valor predeterminado, Contenido. Cuando configuré Acción de compilación en Ninguno, el archivo de texto ya no se copió en la carpeta de destino cuando publiqué.
Para ver estas propiedades en la GUI de Visual Studio, en el Explorador de soluciones, haga clic derecho en el archivo que desea excluir y seleccione Propiedades en el menú contextual.
La característica que está buscando existe si su proyecto se crea como una "Aplicación web". Los "proyectos" del sitio web son solo una colección de archivos que se piensa que son 1: 1 con lo que se despliega en un servidor web.
En términos de funcionalidad, ambos son iguales, sin embargo, una aplicación web compila todo el código fuente de una DLL, en lugar de copiar los archivos de códigos fuente desnudos en el servidor web y compilarlos según sea necesario.
Luché con el mismo problema y finalmente apreté el gatillo al convertir el sitio web a una aplicación web. Una vez que hice esto, obtuve todos los beneficios de IDE, como la acción de compilación, y compilé más rápido para arrancar (no más sitios web de validación ...).
Paso 1: Convierte tu ''sitio web'' a ''aplicación web''. Para convertirlo, acabo de crear una nueva "aplicación web", destruí todos los archivos que creaba automáticamente y copié y pegué mi sitio web. Esto funcionó bien. Tenga en cuenta que los archivos de informe deberán tener su Acción de compilación establecida en "Contenido" en lugar de "ninguno".
Paso 2: Ahora puede configurar cualquier propiedad de "Crear acción" de archivos.
Espero que esto ayude.
Para Visual Studio 2017, WebApp Publish , primero cree un perfil de publicación de sistema de archivos estándar. Vaya a la carpeta App_Data / PublishProfiles / y edite el archivo [profilename] .pubxml.
Añadir
<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>
debajo de la etiqueta <PropertyGroup>
Solo puede especificar esta etiqueta una vez; de lo contrario, solo tomará los últimos valores.
Ejemplo:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>True</ExcludeApp_Data>
<publishUrl>C:/inetput/mysite</publishUrl>
<DeleteExistingFiles>False</DeleteExistingFiles>
<ExcludeFilesFromDeployment>web.config;mysite.sln;App_Code/DevClass.cs;</ExcludeFilesFromDeployment>
</PropertyGroup>
</Project>
Asegúrese de que la etiqueta DeleteExistingFiles esté configurada en False
Puede excluir carpetas y archivos agregando elementos ExcludeFilesFromDeployment
y ExcludeFoldersFromDeployment
a su archivo de proyecto (.csproj, .vbproj, etc.). Añádalos dentro del PropertyGroup
apropiado como se muestra a continuación:
<PropertyGroup Condition=" ''$(Configuration)|$(Platform)'' == ''Debug|AnyCPU'' ">
...
<ExcludeFilesFromDeployment>File1.aspx;Folder2/File2.aspx</ExcludeFilesFromDeployment>
<ExcludeFilesFromDeployment>**/.svn/**/*.*</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>Folder1;Folder2/Folder2a</ExcludeFoldersFromDeployment>
</PropertyGroup>
Los comodines son compatibles.
En el ejemplo de arriba:
- El 1st ExcludeFilesFromDeployment excluye File1.aspx (en la raíz del proyecto) y Folder2 / File2.aspx (Folder2 está en la raíz del proyecto)
- El 2do ExcludeFilesFromDeployment excluye todos los archivos dentro de cualquier carpeta llamada .svn y cualquiera de sus subcarpetas
- ExcludeFoldersFromDeployment excluye carpetas llamadas Folder1 (en la raíz del proyecto) y Folder2 / Folder2a (Folder2 está en la raíz del proyecto)
Para obtener más información, consulte Implementación web: excluir archivos y carpetas a través del archivo de proyecto de la aplicación web.
Si puede identificar los archivos basados en la extensión, puede configurar esto usando la etiqueta buildproviders en web.config . Agregue la extensión y asóciela al ForceCopyBuildProvider. Por ejemplo, para configurar archivos .xml para que se copien con una acción de publicación, haría lo siguiente:
<configuration>...
<system.web>...
<compilation>...
<buildProviders>
<remove extension=".xml" />
<add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" />
</buildProviders>
Para evitar que se copie un archivo dado, haría lo mismo pero use System.Web.Compilation.IgnoreFileBuildProvider como tipo.
Sorprendentemente, la respuesta para Visual Studio 2012 no está aquí:
La respuesta con una marca de verificación verde no es la respuesta.
La respuesta más alta "aumentada" hace referencia a un artículo de 2010 y dice que tiene que editar su archivo de proyecto csproj que ahora es incorrecto. Agregué el elemento XML ExcludeFoldersFromDeployment a mi archivo csproj de Visual Studio 2012 y no hizo nada, el elemento se consideró no válido, esto se debe a que se ha movido ExcludeFoldersFromDeployment al archivo .pubxml.
¡Para aplicaciones web y sitios web edita el archivo .pubxml!
Puedes seguir mi respuesta o probar esta guía que encontré más tarde: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure-on-iis-and-skip-deleting-it-with-msdeployskiprules.html#sthash.MSsQD8U1.dpbs
Sí, puedes hacer esto no solo para proyectos de sitios web sino también para sitios web. Pasé mucho tiempo en Internet buscando esta esquiva capacidad de exclusión con un sitio web de Visual Studio (proyecto NO de sitio web) y había llegado a la conclusión de que no era posible, pero parece que es:
En su archivo [mypublishwebsitename] .pubxml, que se encuentra en ~ / Properties / PublishProfiles para proyectos de aplicaciones web y ~ / App_Data / PublishProfiles para sitios web, simplemente agregue:
<ExcludeFilesFromDeployment>File1.aspx;Folder2/File2.aspx</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>Folder1;Folder2/Folder2a</ExcludeFoldersFromDeployment>
como secundarios al elemento principal <PropertyGroup>
en su archivo .pubxml. No es necesario agregar un nuevo elemento, a menos que esté manipulando un tipo de compilación específico, como la versión o la depuración.
¡¡¡PERO ESPERA!!!
Si está eliminando archivos de su servidor de destino / destino con la siguiente configuración en su configuración de publicación:
Entonces, el proceso de publicación web eliminará en su servidor de origen / destino cualquier cosa excluida, como un elemento que ha delineado en su <ExcludeFoldersFromDeployment>
y <ExcludeFilesFromDeployment>
!
MsDeploy Skip Rules al rescate:
Primero, Web Publish utiliza algo más que MSBuild para publicar (llamado Task IO o algo así) pero tiene un error y no reconocerá las reglas de omisión, por lo que debe agregar a su .pubxml:
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>
Mantendría <WebPublishMethod>
en su propio <PropertyGroup>
, usted pensaría que podría tener un solo elemento <PropertyGroup>
en su .pubxml pero mis Skip Rules no se estaban llamando hasta que moví <WebPublishMethod>
a su propio elemento <PropertyGroup>
. Sí, loco, pero el hecho de que necesites hacer todo esto para que Web Publish excluya y no elimine una carpeta / archivo en tu servidor es una locura.
Ahora mis declaraciones actuales de SkipRules, ExcludeFolders y ExcludeFiles en mi .pubxml:
<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
Y ahora a las Reglas de Skip ( <Target>
es un hijo de <Project>
en su .pubxml): ( Puede dejar <SkipAction>
vacío para Omitir todas las acciones, pero no lo he probado y no estoy seguro .
<Target Name="AddCustomSkipRules">
<Message Text="Adding Custom Skip Rules" />
<ItemGroup>
<MsDeploySkipRules Include="SkipConfigFolder">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)//Config</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipPhotosFolder">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)//Photos</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipWebConfig">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)//Web/.config</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipWebConfig">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)//Temp</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
Y por favor, no te olvides de escapar del .
en una regla FilePath Skip con una barra diagonal inversa.