2011-03-18 61 views
1

我在Windows 7 Professional上使用NAnt 0.90。NAnt exec任务与cabwiz.exe失败

我想用NAnt建立一个CAB文件。 NAnt正在使用执行任务让CabWiz使用inf文件构建CAB文件。构建失败,但如果我从命令行而不是NAnt使用CabWiz,则可以构建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 

UPDATE:

我可以使用下面的命令再现从该命令行错误:

"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传递完整路径而没有在构建脚本中明确地拥有完整路径?一些只需要构建文件的目录就可以工作。

回答

1

我通过使用NAnt函数目录:: 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>