2010-11-23 52 views
38

Souvent, j'ai besoin de publier un projet Web en conservant une arborescence de répertoires même si les répertoires sont vides, par exemple, des répertoires pour contenir les fichiers téléchargés. Si je publie mon application à l'aide de la commande de publication VS2010, les répertoires vides ne sont pas créés sur le système de fichiers distant, sur le serveur Web.Publier des répertoires vides dans une application Web dans le projet Web VS2010

Existe-t-il un moyen de forcer VS à créer certains dossiers, bien que vides, sur le répertoire cible? merci!

Répondre

40

Non, ce n'est pas possible Je crains que nous ayons eu le même problème. Vous devez créer un fichier placeholder.txt dans chaque répertoire vide si vous souhaitez que l'outil de précompilation génère ces dossiers vides. Si vous ne le faites pas, vous pouvez créer une application de ligne de commande qui créera les dossiers dans vos événements de post-construction (mais uniquement si vous utilisez un projet d'application Web et non un projet de site Web).

Espérons que cela aide.

+3

merci - un bug frustrant .. – Adam

+0

très frustrant ... – Baxter

+0

cela fonctionne pour moi ... problème tout à fait bizarre .. :) merci encore –

3

Il y avait un rapport de bogue à Microsoft à ce sujet et ils ont dit qu'ils ne le répareraient pas. http://connect.microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders

Dommage. Parce qu'il travaillait dans Visual Studio 2008.

Notez qu'il n'est pas nécessaire de déployer réellement le fichier factice. Il doit seulement exister dans le cadre du projet dans l'environnement de construction.

+1

On dirait que la note sur cette réponse est fausse. La définition de l'action de génération sur Aucun empêche la création du dossier sur le serveur IIS. – GoClimbColorado

+0

Quel bug ennuyeux! Ni 'None' ni 'Compile' n'aide ... Alors maintenant mon fichier s'appelle "ReadMe.txt" et son contenu est "C'est un dossier qui bla bla bla" (avec le mode de compilation 'Content'). –

+0

La note est correcte. Définissez l'action de construction sur "Contenu" et la copie sur le répertoire de sortie comme "Ne pas copier" –

8

Je sais que cette question mentionne Visual Studio 2010 mais je suis ici pour trouver le même problème ...

J'utilise Visual Studio 2012 et a trouvé un bon moyen/élégant pour surmonter cette situation ennuyeux. Je pense que cela fonctionnera également dans VS 2010 et est mieux que d'ajouter des fichiers vides factices dans les dossiers vides.

Lorsque vous créez un profil de publication avec VS 2012 il va générer un fichier MyPublishProfile.pubxml dans le dossier Properties\PublishProfiles (My Project\PublishProfiles pour VB). Ce sont des fichiers MSBuild et on peut les éditer pour personnaliser le processus de publication. Dans notre cas, nous pouvons injecter une cible dans la publication processus, avant la publication se produit en fait comme ceci:

<?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 propriété AfterAddIisSettingAndFileContentsToSourceManifest détient les noms des cibles qui seront invoquées après le contenu du package de déploiement a été préparé . C'est le moment idéal pour ajouter des fichiers ou des dossiers supplémentaires au package.


Code et texte mélangés de:

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

Web Deploy : Customizing a deployment package

+1

Cela fonctionne aussi sur VS2013. – philw

+1

Hmm, ça n'a pas marché pour moi. J'ai le sentiment d'avoir manqué quelque chose. J'ai collé votre code dans le bas d'un profil de publication existant et rien. – jpierson

0

dans le dossier vide Ajouter un fichier Default.aspx. Vous pouvez le laisser vide, il va ensuite créer le dossier dans la version PreCompiled.

2

Celui-ci a fonctionné pour moi:

Modifier votre publier fichier pubxml que Visual Studio génère, comme Leniel Macaferi mentionné, puis ajouter ceci: Visual Studio déjà généré une propriété comme

<publishUrl>f:\publish_web</publishUrl> 

dans le section

<PropertyGroup>  

, donc je l'ai utilisé comme ceci: Ajouté à la section:

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

Et aussi ajouté:

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

A travaillé pour moi dans VS 2013. Pour clarifier: ajouter '' au même '' que '' et ajouter '' après que ''. – Keith