2009-03-16 24 views
67

¿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.Excluir archivos del sitio web publicar en Visual Studio

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

+3

Aquí puede encontrar una solución muy simple: http://stackoverflow.com/questions/1288858/how-to-exclude-web-config-when-publishing-with-visual-web-developer-express –

Respuesta

29

Si puede identificar los archivos basados ​​en la extensión, puede configurar esto usando el buildproviders tag in the web.config. Agregue la extensión y asóciela al ForceCopyBuildProvider. Por ejemplo, para configurar los archivos .xml para ser copiado con una acción de publicar, tendría que hacer lo siguiente:

<configuration>... 
    <system.web>... 
     <compilation>... 
      <buildProviders> 
       <remove extension=".xml" /> 
       <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" /> 
      </buildProviders> 

Para mantener un archivo dado la copia, que haría lo mismo, pero utilizar System.Web .Compilation.IgnoreFileBuildProvider como el tipo.

+0

Super cool . No estaba teniendo suerte con el ExcludeFromPackageFiles recomendado en el archivo wpp.targets.Este último es bastante inútil ya que no parece admitir comodines con carpetas de más de un nivel de profundidad. Gracias – DvS

1

La función que está buscando existe si su proyecto se crea como una "Aplicación web". Web Sitio "proyectos" 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ódigo fuente desnudos en el servidor web y compilarlos según sea necesario.

5

creo que sólo tiene dos opciones:

  • utilizar el 'Proyecto de excluir de la' característica . Esto no es ideal porque el elemento de proyecto se excluirá de cualquier operación integrada de control de fuente IDE. Usted tendría que hacer clic en la opción 'Mostrar todos archivos' botón en la ventana Solución si es necesario para ver los archivos en el Explorador de soluciones , sino que también muestra los archivos y carpetas que no está interesado en .
  • Utilice un script de evento posterior a la construcción para eliminar los elementos del proyecto que no desea publicar (suponiendo que está publicando en una carpeta local y luego cargando en el servidor).

He pasado por esto antes y no he podido encontrar nada realmente elegante.

10

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: Convierta su "sitio web" en una "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 establecer cualquier archivo de la propiedad "Crear acción".

Espero que esto ayude.

98

Puede excluir carpetas y archivos agregando elementos ExcludeFilesFromDeployment y ExcludeFoldersFromDeployment a su archivo de proyecto (.csproj, .vbproj, etc.). Añadirlos dentro del PropertyGroup apropiada 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> 

comodines son compatibles.

En el ejemplo anterior:

  • La primera ExcludeFilesFromDeployment excluye File1.aspx (en la raíz del proyecto) y Carpeta2 \ File2.aspx (Carpeta2 se encuentra en la raíz del proyecto)
  • El segundo ExcludeFilesFromDeployment excluye todos los archivos dentro de cualquier carpeta con el nombre svn y cualquiera de sus subcarpetas
  • el ExcludeFoldersFromDeployment excluye carpetas con el nombre Carpeta1 (en la raíz del proyecto) y Carpeta2 \ Folder2a (Carpeta2 se encuentra en la raíz del proyecto)

Para más información ver Web Deployment: Excluding Files and Folders via the Web Application’s Project File

+1

¿Hay alguna manera de usar comodines con esto? – roydukkey

+0

@roydukkey Sí, se admiten comodines. – Keith

+3

Esto es mucho mejor que la respuesta aceptada para mí, ya que quiero excluir el archivo Web.config durante la publicación. –

22

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

  • La respuesta con la marca 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 el 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 de editar el archivo .pubxml!

Puedes seguir mi respuesta o tratar de 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í, se puede hacer esto, no sólo para página web del proyecto, pero también los 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 [mypublishwebsitename] .pubxml archivo, que se encuentra en ~/Propiedades/PublishProfiles para proyectos de aplicación web y ~/App_Data/PublishProfiles para los sitios web, sólo tiene que añadir:

<ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
<ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 

como los niños 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 ESPERE !!!

Si va a extraer los archivos de su servidor de destino/objetivo con los siguientes ajustes en la configuración de publicación:

enter image description here

A continuación, la Web Publicar proceso eliminará en su nada servidor de origen/destino excluidos, como un elemento que ha delineado en su <ExcludeFoldersFromDeployment> y <ExcludeFilesFromDeployment>!

MSDeploy Reglas Saltar al rescate:

En primer lugar, Web Publicar usa algo que no sea MSBuild para publicar (llamada Task IO o algo por el estilo), pero tiene un error y no reconocerá saltarse las reglas, por lo debe agregar a su .pubxml:

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

me gustaría mantener <WebPublishMethod> en su propia <PropertyGroup>, se podría pensar que sólo podría tener uno <PropertyGroup> elemento en su .pubxml pero mi Reglas Omitir no estaban siendo llamada hasta que me mudé <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 SkipRules reales, ExcludeFolders y ExcludeFiles declaraciones 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 salto (<Target> es un hijo de <Project> en su .pubxml): (Usted puede será capaz de salir <SkipAction> vacío a Salta para todas las acciones, pero no he probado eso 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 olvides escapar del . en una regla FilePath Skip con una barra diagonal inversa.

+0

Te perdiste la nota de OP de VS2015 ... el propósito y la intención de las preguntas y respuestas es para [etiqueta: visual-studio-2015] y no [etiqueta: visual-studio-2012] – GoldBishop

+0

@GoldBishop la OP se refiere a Visual Studio 2005 y etiqueta su pregunta como Visual Studio 2005, entonces ¿de qué estás hablando? Esta pregunta SO viene al principio de los resultados de Google para "Excluir archivos del sitio web publicar en Visual Studio" como resultados por cierto. –

+0

'Sorprendentemente, la respuesta para Visual Studio 2012 no está aquí:', aunque similar no tiene una relevancia real para [tag: visual-studio-2005], por lo tanto, no agrega valor a la Pregunta OP. Tal vez cree una publicación de respuesta para [tag: visual-studio-2012], que vincule todas las versiones de VS en un solo artículo. – GoldBishop

5

En Visual Studio 2013 me encontré con la respuesta de Keith, añadiendo el elemento ExcludeFoldersFromDeployment al archivo del proyecto, no funcionaba (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 con sólo estableciendo las siguientes propiedades en el archivo de texto en sí:

1) Construir Acción: Ninguna

2) Guardar en agenda de salida: Do no copiar

Inicialmente traté de 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 con el botón derecho en el archivo que desea excluir y seleccione Propiedades en el menú contextual.

+0

Esto funciona en Visual Studio 2015 publicando en Azure. – Chris

+2

El problema es cuando necesita archivos excluidos solo para ciertos entornos de destino (configuraciones de compilación). Esto es doloroso – benmccallum

Cuestiones relacionadas