вызов msbuild exec - PullRequest
       32

вызов msbuild exec

2 голосов
/ 29 июня 2011

Мне нужно вызвать exec и собрать проект установки wix.

В настоящее время у меня есть следующее в моем TFSbuild.proj

 <PropertyGroup>
      <WebRoot>$(DropLocation)\Latest\x86\Release\_PublishedWebsites\Web</WebRoot> 
      <DBRoot>$(DropLocation)\Latest\x86\Release\Database</DBRoot> 
    </PropertyGroup>

 <PropertyGroup>
      <Msbuildexe>&quot;msbuild&quot;</Msbuildexe>
      <Configuration>&quot;/p:Configuration:&quot;Release&quot;&quot;</Configuration>
      <DefineConstants>&quot; /p:DefineConstants:&quot;WebRoot=$(WebRoot);DBRoot=$(DBRoot)&quot;&quot;</DefineConstants>
      <WixSolution>&quot;$(MSBuildProjectDirectory)\Setup\Setup.sln&quot;</WixSolution>
    </PropertyGroup>

    <Message Text="Bulding setup solution" />
    <Message Text="$(Msbuildexe) $(Configuration) $(DefineConstants) $(WixSolution)" />
    <Exec Command="$(Msbuildexe) $(Configuration) $(DefineConstants) $(WixSolution)" />

Я пытался сделать как можно больше, чтобы не запутаться в том, где "должно быть". Когда я запускаю это, отладочное сообщение (2-я последняя команда) выдает

"MSBuild" "/ p: Конфигурация:" Выпуск "" " / p: Определить константы: "WebRoot = \ server \ drop \ app \ Build of Installer \ Latest \ x86 \ Release_PublishedWebsites \ Web; DBRoot = \ server \ drop \ app \ Build of Installer \ Latest \ x86 \ Release \ Database" " "f: \ builds \ app \ Installer Build \ BuildType \ Setup \ Setup.sln"

И я получаю следующую ошибку в журнале

«msbuild» не распознается как внутренняя или внешняя команда,
работоспособная программа или командный файл. F: \ строит \ App \ Installer Построить \ BuildType \ TFSBuild.proj (538,5): ошибка MSB3073: команда "msbuild" "/ p: Конфигурация:" Выпуск "" " / p: Определить константы: "WebRoot = \ server \ drop \ app \ Build of Installer \ Latest \ x86 \ Release_PublishedWebsites \ Web; DBRoot = \ server \ drop \ app \ Build of Installer \ Latest \ x86 \ Release \ Database" " «F: \ строит \ приложение \ Installer Построить \ BuildType \ Setup \ Setup.sln "" выход с кодом 9009.

Я не уверен, что это вызвано тем, что я не могу вызвать команду msbuild из командной строки или "проблема. Если это потому, что я не могу вызвать msbuild из командной строки, как это, как бы я перейти на ссылку, есть ли свойство, которое указывает на это?

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Для начала вам не нужно большинство кавычек, особенно если используемые вами пути не содержат пробелов, но я бы сократил их до этого, учитывая пробелы в путях за $ (WebRoot ), $ (DbRoot) и $ (MSBuildProjectDirectory):

<PropertyGroup>
   <WebRoot>$(DropLocation)\Latest\x86\Release\_PublishedWebsites\Web</WebRoot>
   <DBRoot>$(DropLocation)\Latest\x86\Release\Database</DBRoot>
</PropertyGroup>
<PropertyGroup>
   <MsbuildExe>{still-needs-a-path-to}\msbuild</MsbuildExe>
   <Configuration>/p:Configuration:Release</Configuration>
   <DefineConstants>/p:DefineConstants:&quot;WebRoot=$(WebRoot);DBRoot=$(DBRoot)&quot;</DefineConstants>
   <WixSolution>&quot;$(MSBuildProjectDirectory)\Setup\Setup.sln&quot;</WixSolution>
</PropertyGroup>
<Message
   Text="Bulding setup solution"
   />
<Message
   Text="$(MsbuildExe) $(Configuration) $(DefineConstants) $(WixSolution)"
   />
<Exec
   Command="$(MsbuildExe) $(Configuration) $(DefineConstants) $(WixSolution)"
   />

Однако вы все равно не сможете выполнить MSBuild с этим, поскольку путь к MSBuild не указан. Обычно он находится в папке $ (WINDIR) \ Framework \ Microsoft.Net \ v4.0.30319. Есть несколько способов получить это: либо напрямую кодировать, либо использовать переменную окружения (которую нужно каким-то образом настроить), использовать предопределенный $ (MSBuildBinPath) или извлечь его из реестра, используя синтаксис реестра MSBuild, который будет выглядеть так:

$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath)

Однако неясно, почему вы используете MSBuild, используя Exec, а не просто задачу MSBuild. Измените строку с Exec на это:

<MSBuild
   Project="$(WixSolution)"
   Properties="$(DefineConstants)"
   />

удаление вашей декларации для и изменение на это:

   <DefineConstants>Configuration=$(Configuration);WebRoot=$(WebRoot);DBRoot=$(DBRoot)</DefineConstants>
0 голосов
/ 29 июня 2011

В продолжение моего комментария я бы предложил вам попробовать использовать задачу MSBuild вместо Exec:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="BuildWiXSolution">
    <!-- Include the custom build targets installed with WiX -->
    <Import Project="$(MSBuildExtensionsPath)\Wix\Wix.targets"/>

    <PropertyGroup>
        <WebRoot>$(DropLocation)\Latest\x86\Release\_PublishedWebsites\Web</WebRoot> 
        <DBRoot>$(DropLocation)\Latest\x86\Release\Database</DBRoot> 
    </PropertyGroup>

    <ItemGroup>
        <WiXSolution Include="$(MSBuildProjectDirectory)\Setup\Setup.sln">
            <Properties>Configuration=Release</Properties>
            <AdditionalProperties>WebRoot=$(WebRoot);DBRoot=$(DBRoot)</AdditionalProperties>
        </WiXSolution>
    </ItemGroup>

    <Target Name="BuildWiXSolution">
        <MSBuild Projects="@(WiXSolution)" />
    </Target>  
</Project>

. Она позволяет вам сохранять свойства конфигурации и дополнительные свойства вместе с вашим решением Wix..

...