Excluir archivos del sitio web publicar en Visual Studio


¿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 alternativos para varios entornos, pero realmente no quiero publicarlos en el servidor. ¿Hay alguna manera de excluirlos? Cuando se utilizan otros tipos de proyectos, como a .dll assembly, puedo establecer la propiedad de Acción de compilación de un archivo en " None "y su propiedad Copiar al directorio de salida en"Do not copy". No puedo encuentra cualquier configuración similar para archivos en un sitio web.

Si el IDE no ofrece esta característica, ¿alguien tiene una buena técnica para manejar dichos archivos?

Author: Keith, 2009-03-16

8 answers

Si puede identificar los archivos basados en la extensión, puede configurar esto usando la etiqueta buildproviders en la web.config . Agregar la extensión y el mapa a la ForceCopyBuildProvider. Por ejemplo, para configurar .para copiar archivos xml con una acción de publicación, debe hacer 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 usaría System.Web.Recopilacion.IgnoreFileBuildProvider como el tipo.

 28
Author: Chris Hynes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-21 18:01:53

Puede excluir carpetas y archivos agregando elementos ExcludeFilesFromDeployment y ExcludeFoldersFromDeployment a su archivo de proyecto (.csproj, .vbproj, etc.). Agrégalos 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>

Se admiten comodines.

En el ejemplo anterior:

  • 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 nombrado .svn y cualquiera de sus subcarpetas
  • El ExcludeFoldersFromDeployment excluye las 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: Excluyendo Archivos y carpetas a través del Archivo de Proyecto de la Aplicación Web

 107
Author: Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-07 18:26:05

Sorprendentemente, la respuesta para Visual Studio 2012 no está aquí:

  • La respuesta con marca de verificación verde no es la respuesta.

  • La respuesta "aumentada" más alta 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 ExcludeFoldersFromDeployment XML a mi archivo csproj de Visual Studio 2012 y no hizo nada, el elemento se consideró inválido, esto es porque ExcludeFoldersFromDeployment tiene se ha trasladado a la .parece un archivo pubxml.

Para Aplicaciones Web y Sitios Web se edita el .¡archivo pubxml!

Puede 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í, puede hacer esto no solo para Proyectos de Sitios Web, sino también para sitios web. Me pasó mucho tiempo en Internet buscando esta habilidad de exclusión esquiva con un sitio web de Visual Studio (NO proyecto de sitio web) y había concluido previamente que no era posible, pero parece que lo es:

En su [mypublishwebsitename].el archivo 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 hijos del elemento principal <PropertyGroup> en su .pubxml archivo. No hay necesidad de añadir un nuevo elemento no a menos que esté tecleando un tipo de compilación específico, como release o debug.

¡PERO ESPERA!!!

Si está eliminando archivos de su servidor de destino / destino con la siguiente configuración en su configuración de publicación:

introduzca la descripción de la imagen aquí

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 Saltar Reglas al rescate:

Primero, Web Publish utiliza algo que no sea MSBuild para publicar (llamado Task IO o algo así) pero tiene un error y no reconocerá las reglas de salto, por lo que debe agregar a su .pubxml:

<PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>

Yo mantendría <WebPublishMethod> en su propio <PropertyGroup>, usted pensaría que solo podría tener un elemento <PropertyGroup> en su .pubxml pero mis Reglas de Salto no fueron llamadas hasta que moví <WebPublishMethod> a su propio elemento <PropertyGroup>. Sí, loco, pero el hecho de que necesita hacer todo esto para publicar en la web para excluir y también no eliminar un carpeta / archivo en su servidor es una locura.

Ahora mis declaraciones actuales de SkipRules, ExcludeFolders y ExcludeFiles en my .pubxml:

<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
 <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>

Y ahora a las Reglas de Salto (<Target> es un hijo de <Project> en su .pubxml): ( Es posible que pueda dejar <SkipAction> vacío para Omitir todas las acciones, pero no lo probé 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 se olvide de escapar de la . en una regla de Salto de ruta de archivo con una barra invertida.

 27
Author: Brian Ogden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-26 14:09:22

Luché con el mismo problema y finalmente apreté el gatillo en la conversión del sitio web a una aplicación web. Una vez que hice esto, obtuve todos los beneficios del IDE, como la acción de compilación, y se compiló más rápido para arrancar (no más validación del sitio web...).

Paso 1: Convierte tu 'sitio web' en una 'aplicación web'. Para convertirlo, acabo de crear una nueva "aplicación web", eliminé todos los archivos que creó automáticamente, y copié y pegué mi sitio web. Esto funcionó bien. Tenga en cuenta que el informe los archivos tendrán que tener su Acción de compilación establecida en " Contenido "en lugar de"ninguno".

Paso 2: Ahora puede establecer cualquier propiedad "Build Action" de archivos.

Espero que esto ayude.

 11
Author: BlackjacketMack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-12 14:13:54

En Visual Studio 2013 encontré que 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 propio archivo de texto:

1) Construir Acción: Ninguno

2) Copiar al directorio de salida: No copiar

Inicialmente traté de configurar la copia a la propiedad Directorio de salida por sí mismo, pero que no funcionó cuando la acción de compilación se estableció en el valor predeterminado, Contenido. Cuando luego establezco la 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 interfaz gráfica de Visual Studio, en el Explorador de soluciones haga clic con el botón derecho en el archivo que desea excluir y seleccione Propiedades en el menú contextual.

 6
Author: Simon Tewsi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-28 21:51:46

Creo que aquí solo tienes dos opciones:

  • Utilice la opción 'Excluir del Proyecto' función. Esto no es ideal porque el artículo del proyecto será excluido de cualquier operación integrada de control de fuentes IDE. Usted tendría que hacer clic en el ' Mostrar todo Botón de archivos en la ventana de la solución si necesita ver los archivos en Explorador de soluciones, pero que también muestra archivos y carpetas que no eres interesar.
  • Use un script de evento posterior a la compilación para eliminar cualquier elemento del proyecto que no quiero ser publicado (asumiendo que eres publicando en una carpeta local subir al servidor).

He pasado por esto antes y no se me ocurrió nada realmente elegante.

 5
Author: Kev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-16 21:30:12

La característica que está buscando existe si su proyecto se crea como una "Aplicación Web". Web Site Los "proyectos" son solo una colección de archivos que se consideran 1:1 con lo que se implementa en un servidor web.

En términos de funcionalidad, ambos son los mismos, sin embargo, una aplicación web compila todo el código fuente en una DLL, en lugar de copiar los archivos de código fuente desnudos al servidor web y compilarlos según sea necesario.

 1
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-16 15:28:45

Para Visual Studio 2017, WebApp Publish, primero cree un perfil de publicación del sistema de archivos estándar. Vaya a la carpeta App_Data\PublishProfiles \ y edite el [nombre del perfil].pubxml archivo.

Añadir

<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>

Bajo la etiqueta<PropertyGroup> Solo puede especificar esta etiqueta una vez, de lo contrario solo tomará los valores de la última.

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é establecida en False

 0
Author: Nico Dreyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-09 17:19:45