2010-09-16 66 views
0

這是我第一次進入MSBuild,所以我感覺很迷茫。使用MSBuild生成輸出內容並且沒有VS項目

最終目標是運行一個可執行文件,它將輸出一個文件,並且我們希望構建的輸出成爲該文件。在這個版本中,沒有任何VS項目如此。

構建由TFS構建服務運行。

在這一點上,我想要做的就是生成一個文件,並將其複製到投遞文件夾。

這裏是我的.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> 

寫目錄的網絡路徑的第一個命令成功的內容,但是它不顯示的$(OUTDIR)的存在。所以我想我會嘗試使用MakeDir來創建它。當第二個dir命令執行錯誤時,因爲該路徑不存在。

TFS與下面的命令

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;" 

唯一的輸出是寫在網絡上的文件中運行的MSBuild:

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 

這裏是生成日誌:

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 

我是否完全錯誤?

回答

1

您的代碼在我的電腦中正常工作。 但是:您應該通過將其在命令行invokation實例OUTDIR屬性:

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

或與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> 

看到\在dir命令添加。

編輯:我明白了:你的輸出路徑中有一個空格。命令dir/s>我的路徑\ Dir2.txt是不會工作,除非你用引號封裝路徑。嘗試在DOS外殼下面的命令:

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

你會發現其中的差別(第一行創建兩個目錄一個C:\構建\ 1 \劃痕\測試和一個\建立\二進制文件)。我編輯了上面的代碼以添加引號。

+0

使用命令行更新了問題 – Boarder2 2010-09-17 15:30:48

+0

您可以發佈您的目標輸出嗎? – 2010-09-18 16:05:33

+0

已隨輸出更新。請注意,這是使用調用MSBuild的TFS Build。不僅僅是命令行中的MSBuild。 – Boarder2 2010-09-20 14:00:41

0

這也行得通。

<?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> 
相關問題