1

我在 Windows 7 Professional 上使用 NAnt 0.90。

我正在尝试使用 NAnt 构建 CAB 文件。NAnt 正在使用执行任务让 CabWiz 使用 inf 文件构建 CAB 文件。构建失败,但如果我从命令行使用 CabWiz 而不是 NAnt,我可以构建 CAB 文件。

这是我的 NAnt 构建文件的相关部分:

<target name="build Cab Production">
        <exec program="C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe" commandline="ACSreader2\ACSreader2Setup\Production\ACSreader2_Setup.inf  /err cab_build_errors.err"/>
</target>

CabWiz 生成的 cab_build_errors.err 文件包含 2 个警告和一个非常一般的错误消息:

Warning: Section [RegKeys] has no data
Warning: Section [DefaultInstall] key "AddReg" - there are no section entries to process
Error: CAB file "ACSreader2\ACSreader2Setup\Production\ACSreader2_Setup.CAB" could not be created

当我从命令行构建 CAB 时,我收到相同的 2 个警告,但没有错误。这是我用来从命令行构建它的内容:

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe" "C:\programming\ACSreader2\ACSreader2\ACSreader2Setup\Production\ACSreader2_Setup.inf" /err cab_build_errors.err

更新:

我能够使用以下命令从命令行重现错误:

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe" "ACSreader2\ACSreader2Setup\Production\ACSreader2_Setup.inf" /err cab_build_errors.err

不同之处在于我没有指定 inf 文件的完整路径。是否有一个变量或其他东西可以用来让 NAnt 传递完整路径,而无需在构建脚本中明确包含完整路径?只有构建文件目录的东西可以工作。

4

1 回答 1

1

我通过使用 NAnt 函数 directory::get-current-directory() 从 NAnt 构建脚本中指定 inf 文件的完整路径来使其工作。最终结果是:

<target name="build Cab Production">
        <exec program="C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe" commandline="${directory::get-current-directory()}\ACSreader2\ACSreader2Setup\Production\ACSreader2_Setup.inf  /err cab_build_errors.err" />
</target>
于 2011-03-19T06:03:10.930 回答