2010-09-16 1 views
0

Ceci est ma première plongée dans MSBuild, je me sens donc perdu.Génération de contenu de sortie avec MSBuild et aucun projet VS

L'objectif final est d'exécuter un exécutable qui produira un fichier, et nous voulons que la sortie de la construction soit ce fichier. Dans cette construction il n'y a pas de projet VS quoi que ce soit.

La génération est exécutée par les services de génération TFS.

À ce stade, tout ce que j'essaie de faire est de générer un fichier et de le copier dans le dossier de dépôt.

Voici le contenu de mon fichier .proj

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

<Target Name="Build"> 
    <Message Text="Output Dir: $(OutDir)" /> 
    <MakeDir Directories="$(OutDir)" /> 
    <Exec Command='dir /s > \\ANetworkPath\dir.txt 
    dir /s > $(OutDir)Dir2.txt'/> 
</Target> 
</Project> 

La première commande d'écriture dir sur le chemin du réseau réussit, mais il ne montre pas l'existence de (OutDir) $. Donc j'ai pensé que j'essaierais de le créer avec MakeDir. Lorsque la commande second dir exécute des erreurs car le chemin n'existe pas.

TFS est en cours d'exécution MSBuild avec la commande suivante

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe /nologo /noconsolelogger "C:\Builds\1\Scratch\Test Build\Sources\user\Test\Build.proj" /m:1 /fl /p:SkipInvalidConfigurations=true /p:OutDir="C:\Builds\1\Scratch\Test Build\Binaries\\" /p:VCBuildOverride="C:\Builds\1\Scratch\Test Build\Sources\user\Test\Build.proj.vsprops" /dl:WorkflowCentralLogger,"C:\Program Files\Microsoft Team Foundation Server 2010\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;BuildUri=vstfs:///Build/Build/111;InformationNodeId=6570;TargetsNotLogged=GetNativeManifest,GetCopyToOutputDirectoryItems,GetTargetPath;TFSUrl=http://tfshost:8080/tfs/Test%20Collection;"*WorkflowForwardingLogger,"C:\Program Files\Microsoft Team Foundation Server 2010\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;" 

La sortie est uniquement dans le fichier écrit sur le réseau:

Directory of C:\Builds\1\Scratch\Test Build\Sources\user\Test 

09/17/2010 10:53 AM <DIR>   . 
09/17/2010 10:53 AM <DIR>   .. 
09/17/2010 10:53 AM <DIR>   A Directory 
09/17/2010 10:53 AM     0 Test.log 
09/17/2010 10:53 AM    453 Test.proj 
09/17/2010 10:53 AM    201 Test.proj.vsprops 
       3 File(s)   654 bytes 

Directory of C:\Builds\1\Scratch\Test Build\Sources\user\Test\A Directory 

09/17/2010 10:53 AM <DIR>   . 
09/17/2010 10:53 AM <DIR>   .. 
09/17/2010 10:53 AM     9 A File.txt 
09/17/2010 10:53 AM    15 Another File.txt 
       2 File(s)    24 bytes 

    Total Files Listed: 
       5 File(s)   678 bytes 
       5 Dir(s) 40,243,372,032 bytes free 

Voici le journal de construction:

Build started 9/17/2010 12:05:29 PM. 
Project "C:\Builds\1\Scratch\Test Build\Sources\user\Test\Test.proj" on node 1 (default targets). 
Build: 
    Output Dir: C:\Builds\1\Scratch\Test Build\Binaries\ 
    dir /s > C:\Builds\1\Scratch\Test Build\Binaries\Dir2.txt 
    The system cannot find the path specified. 
C:\Builds\1\Scratch\Test Build\Sources\user\Test\Test.proj(24,3): error MSB3073: The command "dir /s > C:\Builds\1\Scratch\Test Build\Binaries\Dir2.txt" exited with code 1. 
Done Building Project "C:\Builds\1\Scratch\Test Build\Sources\user\Test\Test.proj" (default targets) -- FAILED. 

Build FAILED. 

"C:\Builds\1\Scratch\Test Build\Sources\user\Test\Test.proj" (default target) (1) -> 
(Build target) -> 
    C:\Builds\1\Scratch\Test Build\Sources\user\Test\Test.proj(24,3): error MSB3073: The command "dir /s > C:\Builds\1\Scratch\Test Build\Binaries\Dir2.txt" exited with code 1. 

    0 Warning(s) 
    1 Error(s) 

Time Elapsed 00:00:01.14 

Est-ce que je vais à ce sujet complètement faux?

Répondre

1

Votre code fonctionne correctement sur mon ordinateur. Cependant : vous devez instancier propriété OutDir soit par passage dans invokation ligne de commande:

c:\WINDOWS\Microsoft.NET\Framework\v4.0\MSBuild.exe test.proj /p:OutDir=MyNewDir 

ou avec un élément PropertyGroup:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <PropertyGroup> 
    <OutDir>MyNewDir</OutDir> 
    </PropertyGroup> 

<Target Name="Build"> 
    <Message Text="Output Dir: $(OutDir)" /> 
    <MakeDir Directories="$(OutDir)" /> 
    <Exec Command='dir /s > \\ANetworkPath\dir.txt 
    dir /s > "$(OutDir)\Dir2.txt"'/> 
</Target> 
</Project> 

Notez que le \ ajouté dans la commande dir.

EDIT: Je comprends: vous avez un espace dans votre chemin de sortie. La commande dir/s> mon chemin \ Dir2.txt ne marchera pas à moins d'encapsuler le chemin avec des guillemets. Essayez les commandes suivantes dans le shell dos:

mkdir C:\Builds\1\Scratch\Test Build\Binaries\ 
mkdir "C:\Builds\1\Scratch\Test Build\Binaries\" 

Vous remarquerez la différence (la première ligne crée deux répertoires un C:. \ Builds \ 1 \ Scratch \ Test et un \ build \ Binaires). J'ai édité mon code ci-dessus pour ajouter des citations.

+0

Mis à jour la question avec la ligne de commande – Boarder2

+0

Pourriez-vous s'il vous plaît poster la sortie de votre cible? –

+0

Mis à jour avec la sortie. Notez que cela utilise TFS Build qui appelle MSBuild. Pas seulement MSBuild depuis la ligne de commande. – Boarder2

0

Cela fonctionnera également.

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Build"> 
     <Exec Command='dir /s > Dir2.txt'/> 
     <Copy SourceFiles='Dir2.txt' DestinationFolder='$(OutDir)' /> 
    </Target> 
</Project> 
Questions connexes