web-dev-qa-db-ja.com

MSB3073 'コマンド'はコード9009で終了しました

このコマンドを実行するたびに、コード9009でエラーMSB3073がスローされます

$(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

私はどうしたらいいですか?

13
Highace2

Cmdからの終了コード9009は、基本的に「コマンドが見つかりません」という意味です。言い換えると、$(WixPath)heatは実行可能なものを指していません。これは、表示されているコードのどこにもWixPathプロパティが表示されない可能性があります。これを簡単にデバッグするには、Messageと同じ引数を持つExecタスクを使用して、実行しようとしているものを正確に確認します。

<Message Text='$(WixPath)heat dir $(Publish) -dr INSTALLFOLDER ....'/>

出力をコマンドラインに貼り付けて実行し、実行されるかどうかを確認します。

18
stijn

Wix 3.8でVS2010を使用するときにコマンドを次のように変更し、機能しました。

Command='"$(WiX)bin\heat.exe" dir $(Publish) -dr INSTALLFOLDER -ke -srd -cg DatoCheckerWebComponents -var var.publishDir -gg -out $(WebSiteContentCode)'

私にとっての問題は、heat.exeが次のディレクトリで見つからないことです。

7

おそらくWixPathにスペースがありますか?引用を追加してみてください:

<Exec Command='&quot;$(WixPath)heat&quot; ...'
    ContinueOnError="false"
    WorkingDirectory="." />
3
l33t

_/v:diag /fl_で実行して詳細度を上げ、_msbuild.log_ファイルにログを記録し、Execトレースを見つけて、コマンドを手動で実行して評価されたすべてのパラメーターでコマンドが正常に完了することを確認します。蓄積されたすべての値(システムおよびユーザーenv変数、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.
_
0