2010-11-23 13 views
38

A menudo necesito publicar un proyecto web conservando un árbol de directorios incluso si los directorios están vacíos, por ejemplo, directorios para mantener archivos cargados. Si publico mi aplicación utilizando el comando de publicación VS2010, los directorios vacíos no se crean en el sistema de archivos remoto, en el servidor web.publicar directorios vacíos en una aplicación web en el proyecto web VS2010

¿Hay alguna manera de obligar a VS a crear ciertas carpetas, aunque vacías, en el directorio de destino? gracias!

Respuesta

40

No, esto no es posible Me temo que tuvimos el mismo problema. Debe crear un archivo placeholder.txt en cada directorio vacío si desea que la herramienta de precompilación genere estas carpetas vacías. Si eso falla, puede crear una aplicación de línea de comandos que creará las carpetas en sus eventos de compilación posteriores (pero solo si está utilizando un proyecto de aplicación web, no un proyecto de sitio web).

Espero que esto ayude.

+3

Gracias - un insecto tales frustrante .. – Adam

+0

muy frustrante ... – Baxter

+0

esto funciona para mí ... tema bastante raro .. gracias :) todavía –

3

Hubo un informe de error a Microsoft sobre esto y dijeron que no lo arreglarían. http://connect.microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders

Muy malo. Porque solía funcionar en Visual Studio 2008.

Tenga en cuenta que no es necesario implementar realmente el archivo ficticio. Solo necesita existir como parte del proyecto en el entorno de compilación.

+1

Parece que la nota de esta respuesta es incorrecta. Establecer la acción de compilación en Ninguno impide que la carpeta se cree en el Servidor IIS. – GoClimbColorado

+0

¡Qué error tan molesto! Ni 'None' ni 'Compile' ayudan ... Así que ahora mi archivo se llama "ReadMe.txt" y su contenido es "Esta es una carpeta que bla bla bla" (con el modo de compilación 'Content'). –

+0

La nota es correcta. Establezca la acción de compilación en "Contenido" y el directorio Copiar a salida como "No copiar" –

8

Sé que esta pregunta menciona Visual Studio 2010 pero me aquí buscando el mismo problema ...

estoy usando Visual Studio 2012 y ha encontrado una manera agradable/elegante para superar esta situación molesta. Creo que también funcionará en VS 2010 y es mejor que agregar archivos ficticios vacíos dentro de las carpetas vacías.

Cuando se crea un perfil de publicación con VS 2012 se generará un archivo en la carpeta MyPublishProfile.pubxmlProperties\PublishProfiles (My Project\PublishProfiles para VB). Estos son archivos MSBuild y se pueden editar para personalizar el proceso de publicación. En nuestro caso podemos inyectar un objetivo en el proceso de publicación, antes de la publicación de hecho ocurre así:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <AfterAddIisSettingAndFileContentsToSourceManifest>CreateEmptyFolders 
    </AfterAddIisSettingAndFileContentsToSourceManifest> 
    </PropertyGroup> 
    <Target Name="CreateEmptyFolders"> 
    <Message Text="Adding empty folder to hold Files" /> 
    <MakeDir Directories="$(_MSDeployDirPath_FullPath)\Files\MyEmptyFolder"/> 
    </Target> 
</Project> 

La propiedad AfterAddIisSettingAndFileContentsToSourceManifest contiene los nombres de los objetivos que se invoca después de los contenidos para el paquete de implementación se ha preparado . Este es el momento perfecto para agregar archivos o carpetas adicionales al paquete.


Código y el texto mezclan a partir de:

How to execute a PowerShell script only before a web deploy Publish task in VS 2012?

Web Deploy : Customizing a deployment package

+1

Eso también funciona en VS2013. – philw

+1

Hmm, no funcionó para mí. Sin embargo, tengo la sensación de que me he perdido algo. He pegado tu código en la parte inferior de un perfil de publicación existente y nada. – jpierson

0

dentro de la carpeta vacía añadir un archivo Default.aspx. Puede dejarlo vacío, luego creará la carpeta en la versión Precompilada.

2

Ésta funcionó para mí:

Editar tu Publicar archivo pubxml que genera Visual Studio, como Leniel Macaferi mencionó, a continuación, añadir lo siguiente: Visual Studio ya se generó una propiedad como

<publishUrl>f:\publish_web</publishUrl> 

en el sección

<PropertyGroup>  

, por lo que lo he usado como esto: al artículo:

<PipelineDependsOn> 
     CustomBeforePublish; 
     $(PipelineDependsOn); 
    </PipelineDependsOn> 

Y también añade:

<Target Name="CustomBeforePublish"> 
    <Message Text="CustomBeforePublish task:"/> 
    <MakeDir Directories="$(publishUrl)\MyFolder\MyFolder2"/> 
    </Target> 
+0

Funcionó para mí en VS 2013. Para aclarar: agregue '' al mismo '' como '' y agregue '' después de ese ''. – Keith

Cuestiones relacionadas