Pergunta

Muitas vezes, preciso publicar um projeto da web preservando uma árvore de diretório, mesmo que os diretórios estejam vazios, por exemplo, diretórios para manter arquivos enviados. Se eu publicar meu aplicativo usando o comando Publish VS2010, os diretórios vazios não serão criados no sistema de arquivos remoto, no servidor da Web.

Existe uma maneira de forçar vs a criar certas pastas, embora vazias, no diretório de destino? obrigado!

Foi útil?

Solução

Não, isso não é possível, receio que tivéssemos o mesmo problema. Você precisa criar um arquivo de espaço reservado.txt em cada diretório vazio, se desejar que a ferramenta de pré -compilação gere essas pastas vazias. Falhando que você pode criar um aplicativo de linha de comando que criará as pastas em seus eventos de construção de postagem (mas somente se você estiver usando o projeto do Web Application Project, não o projeto do site).

Espero que isto ajude.

Outras dicas

Eu sei que essa pergunta menciona Visual Studio 2010 Mas cheguei aqui procurando o mesmo problema ...

estou a usar Visual Studio 2012 e encontrou uma maneira agradável/elegante de superar essa situação irritante. Eu acho que também vai funcionar em VS 2010 e é melhor do que adicionar arquivos vazios dummy dentro das pastas vazias.

Quando você cria um perfil de publicação com VS 2012 vai gerar um MyPublishProfile.pubxml arquivo no Properties\PublishProfiles pasta (My Project\PublishProfiles para VB). Estes são MSBuild arquivos e pode -se editá -los para personalizar o processo de publicação. No nosso caso, podemos injetar um alvo no processo de publicação, antes que a publicação ocorra assim:

<?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>

A propriedade AfterAddIisSettingAndFileContentsToSourceManifest Contém os nomes dos alvos que serão invocados após a preparação do conteúdo do pacote de implantação. Este é o momento perfeito para adicionar arquivos ou pastas adicionais ao pacote.


Código e texto misturados de:

Como executar um script PowerShell apenas antes de uma tarefa de publicação de implantação na web no VS 2012?

Web Implement: Personalizando um pacote de implantação

Havia um relatório de bug para a Microsoft sobre isso e eles disseram que não o consertariam.http://connect.microsoft.com/visualstudio/feedback/details/546356/publish-deploy-does-not-deploy-epty-folders

Que pena. Porque costumava funcionar no Visual Studio 2008.

Observe que não é necessário implantar o arquivo fictício. Ele só precisa existir como parte do projeto no ambiente de construção.

Este funcionou para mim:

Edite seu arquivo PUBXML PUBLISTO que o Visual Studio gera, como Leniel Macaferi mencionado e adicione o seguinte: o Visual Studio já gerou uma propriedade como

<publishUrl>f:\publish_web</publishUrl>

no

<PropertyGroup>    

Seção, então eu usei assim: adicionado à seção:

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

E também adicionado:

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

Dentro da pasta vazia, adicione um arquivo padrão.aspx. Você pode deixá -lo vazio, ele criará a pasta na versão pré -compilada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top