2009-05-04 7 views
12

Je veux créer un projet Visual Studio (j'utilise VSTS 2008) qui ne fait que copier des fichiers, en plus de détails, j'ajouterai des fichiers à ce projet et ce projet copiera des fichiers (inclus dans ce projet) vers une destination emplacement lorsque je construis le projet.en utilisant Visual Studio pour copier des fichiers?

Des idées pour ce faire dans VSTS? BTW: J'ai entendu en utilisant le fichier proj pourrait faire ce genre de tâches, mais je n'ai pas trouvé de bons échantillons simples pour apprendre pour débutant. :-)

merci à l'avance, George

+0

Pourquoi n'avez-vous pas pu créer un fichier batch ou un fichier de commandes pour effectuer la copie? –

+0

@JB King, je veux intégrer/envelopper tout dans msbuild. Des idées ou des échantillons recommandés? – George2

+0

Voir ma réponse ci-dessous. –

Répondre

0

C#/VB.NET fichiers de projet sont MSBuild scripts. MSBuild peut faire tout ce dont vous avez besoin ...

+0

C'est vrai, mais la question est de savoir comment l'exigence dans la question est-elle réalisée? – AnthonyWJones

+0

Je connais MSBuild. Je veux trouver un échantillon prêt à utiliser/référence pour faire une copie de fichier. Des recommandations? – George2

+0

Jetez un oeil à ce fichier (MSI, mais installe des échantillons uniquement) avec des exemples MSBuild et la documentation Word pour eux: http://download.microsoft.com/download/d/4/0/d401e5cd-04c7-4b72-b644- a00ae3fd5681/msbuildqs.msi – Lucero

13

Vous pouvez ajouter une étape de post de construction dans Visual Studio:

  • Ouvrir les propriétés du projet (cela fonctionne dans les projets C#, je suppose que pour VB.NET cela vaut bien).
  • Sélectionnez les événements Construire onglet
  • Il vous pouvez ajouter les commandes d'événements post-construction, par exemple

    copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*

Le $ (ProjectDir) est une macro, il y a un peu plus disponibles, ils seront affichés lorsque vous éditerez une commande.

Ensuite, si vous avez un regard sur le fichier de projet selon (XYZ.csproj ou XYZ.vbproj), vous pouvez voir un groupe immobilier ajouté au bas du fichier, tels que:

<PropertyGroup> 
     <PostBuildEvent>copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*</PostBuildEvent> 
    </PropertyGroup> 

C'est comme cela que vous le feriez lors de la modification directe d'un fichier MSBuild. Notez que vous n'avez pas besoin de lancer Visual Studio pour compiler et copier vos fichiers, vous pouvez simplement passer le fichier projet à msbuild.exe.

+1

J'utiliserais xcopy qui est un peu plus sûr. – KJAWolf

+1

PostBuildEvent n'est pas une "bonne" solution car elle ne vérifie pas les dépendances, c'est-à-dire que si un des fichiers en cours de copie a été modifié, la publication ne le détectera pas et ne sera pas réexécutée. – okigan

+2

utilisez 'Copy/Y source destination' si vous avez besoin de copier les fichiers, même s'ils seront écrasés – northben

4

Comme mentionné précédemment, Visual Studio. xx Les fichiers proj sont en fait des fichiers MSBuild. Donc, vous pouvez faire en eux ce que MSBuild leur permet de faire. Je les ai utilisés pour personnaliser mon processus de construction un peu. Dans votre cas, ce que vous cherchez est le Copy Task. Vous pouvez l'ajouter à la cible AfterBuild.

+0

C'était aussi ma première pensée, mais il m'a demandé de le faire en VS (TS). –

+1

Oui, alors? Cela ne fait-il pas ce qu'il voulait? Lorsque le projet est construit, les fichiers qu'il contient sont copiés dans un emplacement donné. Il y a même beaucoup de variables avec lesquelles il peut jouer. –

0

Dans Visual Studio 2010, vous utilisez Custom Build tools

Par exemple, cette copie règle "Faq.txt" dans le répertoire de sortie.

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
    <Message>Copying readme...</Message> 
    <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
    <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
</ItemGroup> 
0

Les autres réponses à cette question ont tendance à supposer que vous n'utilisez pas VisualStudio mais MSBuild directement ou un projet existant pour lequel vous pouvez ajouter un type étape de génération personnalisée ou un événement de construction (j'ai trouvé l'événement de construction de les erreurs de solutions sont sujettes parce qu'elles ne copient pas toujours les fichiers quand vous en avez besoin copiés).

Si vous voulez un projet VisualStudio qui ne fait qu'une copie, vous pouvez le faire avec VisualStudio en stock avec un projet Makefile.

Le projet légèrement mal nommé Makefile peut faire tout ce que vous pouvez faire depuis la ligne de commande. Évidemment, cela signifie que vous pouvez créer un projet Makefile qui ne fait que copier des fichiers. Dans un du projet Makefile PropriétésConfiguration   Propriétés de la sectionNMake sont des champs pour construire, reconstruire, et les actions propres. Ceux-ci peuvent être remplis avec les anciennes commandes de fichiers batch. VisualStudio créera un fichier batch temporaire à partir de chaque champ et l'exécutera avec cmd. Avertissement Vous obtiendrez l'interpréteur cmd 32 bits sur les machines 64 bits. Vous devrez donc utiliser le répertoire magique sysnatif si vous voulez accéder aux commandes Windows 64 bits ou aux DLL (je ne suis pas sûr que est documenté n'importe où donc ce n'est peut-être pas toujours le cas - vos scripts batch doivent être robustes par rapport au bit-ness de cmd change

Exemple de code batch nécessitant des fichiers système 64 bits sans savoir au préalable quel cmd ou OS (32- bit ou 64-bit) exécutera le code:

if /i "%programfiles%"=="%programfiles(x86)%" if /i not "%programfiles%"=="%programw6432%" (
    REM 32 bit cmd on 64-bit computer 
    REM Use the 'sysnative' fake directory to get to 64-bit system32 files 
) else (
    if /i not "%programfiles%"=="%programfiles(x86)%" if /i "%programfiles%"=="%programw6432%" (
     REM 64 bit cmd on 64-bit computer 
     REM Use the 'system32' directory to get to 64-bit system32 files 
    ) else (
     echo "Cannot do 64-bit on 32-bit computer" 
     copy foobar 
    ) 
) 

(la ligne "copy foobar" abo ve échouera provoquant l'echec de)

Note, VisualStudio (et MSBuild) sera toujours exécuter un projet Makefile -. il ne vérifie pas l'horodatage sur le fichier de sortie, mais punts au lieu que le travail à ce qu'il attend être un autre outil de construction (nmake, cmake, make, ant, maven, etc.). Puisque, dans ce cas, il n'y a qu'une simple commande de copie et non un programme vérifiant si la copie doit être effectuée ou non, la copie se produit sur chaque génération.

VisualStudio toujours en cours d'exécution Projets de makefile signifie également que chaque fois que vous appuyez sur F5 pour déboguer votre projet, VisualStudio vous embêter avec un pop mal rédigé une boîte de dialogue (si vous ne l'avez pas dit que ce pas) vous dire que votre projet est obsolète et que vous devez le reconstruire. Si vous demandez à VisualStudio de ne pas afficher la boîte de dialogue, il effectuera la copie sans demander avant d'exécuter l'exécutable.

Questions connexes