MSB3073 "команда" вышла с кодом 9009
Всякий раз, когда я выполняю эту команду, он выдает ошибку MSB3073 с кодом 9009
$(WixPath)heat dir $(Publish) -dr INSTALLFOLDER -ke -srd -cg DatoCheckerWebComponents -var var.publishDir -gg -out $(WebSiteContentCode)
Весь файл сборки находится здесь:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebSiteSource>..\DatoCheckerMvc\</WebSiteSource>
<SetupF>..\Setup\</SetupF>
<PublishF>publish\</PublishF>
<Publish>$(SetupF)$(PublishF)</Publish>
<WebSiteContentCode>WebSiteContent.wxs</WebSiteContentCode>
</PropertyGroup>
<!-- Defining group of temporary files which is the content of the web site. -->
<ItemGroup>
<WebSiteContent Include="$(WebSiteContentCode)" />
</ItemGroup>
<!-- The list of WIX input files -->
<ItemGroup>
<WixCode Include="Product.wxs" />
<WixCode Include="$(WebSiteContentCode)" />
</ItemGroup>
<Target Name="Build">
<!-- Compile whole solution in release mode -->
<MSBuild
Projects="..\DatoCheckerMvc.sln"
Targets="ReBuild"
Properties="Configuration=Release" />
</Target>
<Target Name="PublishWebsite">
<!-- Remove complete publish folder in order to be sure that evrything will be newly compiled -->
<Message Text="Removing publish directory: $(SetupF)"/>
<RemoveDir Directories="$(SetupF)" ContinueOnError="false" />
<Message Text="Start to publish website" Importance="high" />
<MSBuild
Projects="..\\DatoCheckerMvc\DatoCheckerMvc.csproj"
Targets="ResolveReferences;_CopyWebApplication"
Properties="OutDir=$(Publish)bin\;WebProjectOutputDir= $(Publish);Configuration=Release" />
</Target>
<Target Name="Harvest">
<!-- Harvest all content of published result -->
<Exec Command='$(WixPath)heat dir $(Publish) -dr INSTALLFOLDER -ke -srd -cg DatoCheckerWebComponents -var var.publishDir -gg -out $(WebSiteContentCode)'
ContinueOnError="false"
WorkingDirectory="." />
</Target>
</Project>
Команда, которую я использую для вызова этой сборки:
msbuild /t:Build;PublisWebsite;Harvest setup.build
Что я должен делать?
Ответы
Ответ 1
Код выхода 9009 из cmd в основном означает "команда не найдена". Другими словами, $(WixPath)heat
не указывает на что-то исполняемое, что возможно, потому что я не вижу свойства WixPath в любом месте показанного кода. Быстрый способ отладки это использовать задачу Message
с тем же аргументом, что и для Exec
, чтобы вы могли точно увидеть, что именно пытается выполнить.
<Message Text='$(WixPath)heat dir $(Publish) -dr INSTALLFOLDER ....'/>
Вставьте вывод в командной строке, запустите его и проверьте, выполняется ли он.
Ответ 2
Я изменил команду, как показано ниже, поскольку я использую VS2010 с Wix 3.8, и это сработало.
Command='"$(WiX)bin\heat.exe" dir $(Publish) -dr INSTALLFOLDER -ke -srd -cg DatoCheckerWebComponents -var var.publishDir -gg -out $(WebSiteContentCode)'
Проблема для меня в том, что heat.exe не может быть найден со следующим каталогом.
Ответ 3
Возможно, у вас есть пробелы в WixPath
? Попробуйте добавить цитаты:
<Exec Command='"$(WixPath)heat" ...'
ContinueOnError="false"
WorkingDirectory="." />
Ответ 4
Запустите с помощью /v:diag /fl
, чтобы увеличить объем текста и войти в файл msbuild.log
, найдите трассировку Exec
и подтвердите, что эта команда успешно завершена со всеми параметрами, оцененными путем ее запуска вручную. Все накопленные значения (системные и пользовательские env vars, переопределения cli, группы параметров и т.д.) Будут прослеживаться в начале дампа (но не записываются в файл), конец будет выглядеть примерно так.
<Exec Command="$(SystemRoot)\foo bar" />
Using "Exec" task from assembly "Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Exec"
Task Parameter:Command=C:\Windows\foo bar
C:\Windows\foo bar
'C:\Windows\foo' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\Ilya.Kozhevnikov\Dropbox\foo.build(3,3): error MSB3073: The command "C:\Windows\foo bar" exited with code 9009.