使用MSBuild生成输出内容并且没有VS项目

问题描述:

这是我第一次进入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 

我是否完全错误?

您的代码在我的电脑中正常工作。 但是:您应该通过将其在命令行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

这也行得通。

<?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>