Pregunta

A menudo necesito publicar un proyecto web que preserve un árbol de directorio, incluso si los directorios están vacíos, por ejemplo, directorios para contener archivos cargados. Si publico mi aplicación usando el comando VS2010 Publish, los directorios vacíos no se crean en el sistema de archivos remoto, en el servidor web.

¿Hay alguna forma de forzar VS para crear ciertas carpetas, aunque vacías, en el directorio de destino? ¡Gracias!

¿Fue útil?

Solución

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

Espero que esto ayude.

Otros consejos

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

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

Cuando crea un perfil de publicación con VS 2012 generará un MyPublishProfile.pubxml archivo en el Properties\PublishProfiles carpeta (My Project\PublishProfiles para vb). Estos son MSBuild Los archivos y uno pueden editarlos para personalizar el proceso de publicación. En nuestro caso, podemos inyectar un objetivo en el proceso de publicación, antes de que la publicación realmente ocurra 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 Sostiene los nombres de los objetivos que se invocarán después de que se haya preparado el contenido del paquete de implementación. Este es el momento perfecto para agregar archivos o carpetas adicionales al paquete.


Código y texto mezclado desde:

¿Cómo ejecutar un script de PowerShell solo antes de una tarea de publicación de implementación web en VS 2012?

Implementación web: personalización de un paquete de implementación

Hubo un informe de errores 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

Demasiado. 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.

This one worked for me:

Edit your publish pubxml file that visual studio generates, like Leniel Macaferi mentioned, then add this: Visual studio already generated a property like

<publishUrl>f:\publish_web</publishUrl>

in the

<PropertyGroup>    

section, so I've used it like this: Added to section:

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

And also added:

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

Inside the Empty Folder Add a Default.aspx file. You can leave it empty, It will then create the folder in the PreCompiled version.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top