2010-01-13 4 views
42

J'ai un projet dans Visual Studio. J'ai besoin de déployer des fichiers tiers avec mon code. En règle générale, je place ces fichiers dans un répertoire "Resources" et définissez l'action de construction de chaque fichier sur "Content" et le répertoire Copy To Output sur "Copy if newer".Dans Visual Studio, comment puis-je définir l'action de construction pour un dossier entier?

Y at-il de toute façon que je peux définir ces directives au niveau du dossier. Le projet en cours avec lequel je travaille a des dizaines de ces fichiers et quelques sous-dossiers. Je voudrais être en mesure de faire l'ensemble du répertoire comme "Contenu" et "Copier si plus récent".

Répondre

45

Créez le projet. Ajouter un fichier en tant que contenu. Déchargez le projet et modifiez le fichier * proj manuellement.

<ItemGroup> 
    <Content Include="myfolder**\*.dll**"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 

Et puis je dans le contenu ItemGroup remplacer ce fichier avec une expression roussir générique MsBuild, * .dll, ou autre chose.

+2

J'ai trouvé cela utile pour construire mes expressions génériques: http://msdn.microsoft.com/en-us/library/ms171454%28VS.80%29.aspx – brendan

+1

J'ai essayé ceci. Cela fonctionne mais lorsque j'ai ajouté un élément à l'aide de Visual Studio, il a supprimé le caractère générique et a ramené tous les éléments individuels à . J'ai également essayé la suggestion à http://stackoverflow.com/questions/3320190/visual-studio-how-to-override-the-default-build-action-for-certain-extension-t. mais ça n'a pas marché du tout. – Colin

+2

Ces instructions génériques travaillent pour moi de copier tous les fichiers et sous-répertoires: <= "Contenu' Inclure myfolder \\ ** \ * '."> PreserveNewest

7

Si vous arrive d'avoir la nécessité de définir le Build Action pour un dossier entier la meilleure option est de simplement ouvrir le fichier .csproj et utiliser un regex pour remplacer toutes les occurences de

<Content .... 

à

<None ... 

Cela a fonctionné à merveille pour me.

+0

Il s'agit en effet une meilleure solution –

+3

Je pense que ce que vous avez résolu est un problème différent. –

+0

Hmmm mais ne serait-il pas plus logique si vous pouviez simplement définir cela en utilisant des outils> options quelque part?Il est assez ennuyeux que chaque nouvel élément que vous ajoutez à un projet soit exclu par défaut. (pourquoi ajouterais-je un actif si je ne voulais pas l'inclure dans ma construction finale?) – Kokodoko

1

Modifier votre * .csproj ou .vbproj fichier

Ajouter cette balise

<ItemGroup> 
    <Folder Include="YOUR_FOLDER_NAME_HERE/"> 
    </ItemGroup 

le fichier final doit ressembler à ceci:

<Project> 
<---some more tags---> 
     <ItemGroup> 
     <Folder Include="YOUR_FOLDER_NAME_HERE\" /> 
     </ItemGroup 
<---some more tags---> 
</Project> 
+0

Essayé cela et cela n'a pas fonctionné. Je veux ajouter un dossier vide au projet lorsqu'il est déployé. Cela ne l'a pas fait. – sr28

4

-je utiliser Visual Studio 2012 et vous pouvez Maj + clic pour sélectionner plusieurs éléments dans l'Explorateur de solutions, puis modifier la propriété Copier vers le répertoire de sortie de chaque élément en une seule fois dans la fenêtre Propriétés.

Accordé cela n'est pas équivalent à la solution que vous recherchez fonctionnellement, mais sémantiquement c'est. Et j'espère que la prochaine personne à trébucher à travers ce poste avec un dossier énorme pour remédier (comme c'est avec moi) n'aura pas à plonger dans le fichier .csproj.

Espérons que cela aide!

Questions connexes