Генерация выходного контента с MSBuild и без проектов VS - PullRequest
0 голосов
/ 16 сентября 2010

Это мое первое погружение в MSBuild, поэтому я чувствую себя довольно растерянным.

Конечная цель - запустить исполняемый файл, который выведет файл, и мы хотим, чтобы вывод сборки был этим файлом. В этой сборке нет ни одного 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>

Первая команда записи dir в сетевой путь выполнена успешно, однако она не показывает существование $ (OutDir). Поэтому я подумал, что попытаюсь создать его с помощью MakeDir. Когда вторая команда dir выполняет свои ошибки, путь не существует.

TFS работает MSBuild с помощью следующей команды

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

Единственный вывод в файле, записанном в сети:

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

Я совершенно не прав?

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Ваш код отлично работает на моем компьютере.Однако: вам следует создать экземпляр свойства 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> my path \ Dir2.txt не будет работать, если вы не заключите путь в кавычки.Попробуйте выполнить следующие команды в оболочке dos:

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

Вы заметите разницу (в первой строке создаются две директории: C: \ Builds \ 1 \ Scratch \ Test и одна. \ Build \ Binaries).Я изменил свой код выше, чтобы добавить кавычки.

0 голосов
/ 20 сентября 2010

Это также будет работать.

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...