Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Ant向NSIS传递参数_Ant_Nsis - Fatal编程技术网

从Ant向NSIS传递参数

从Ant向NSIS传递参数,ant,nsis,Ant,Nsis,我有一个现有的Ant脚本,它调用MakeNSIS并成功地创建了一个安装程序文件。我希望在Ant中更改输出路径,然后将其传递给NSIS。目前,我已尝试通过以下方式致电NSIS: <exec executable="${nsis_exe.dir}/makensis.exe"> <arg value="${installer.dir}/installer.nsi" /> <arg value="/DTEST=myvalue"/>

我有一个现有的Ant脚本,它调用MakeNSIS并成功地创建了一个安装程序文件。我希望在Ant中更改输出路径,然后将其传递给NSIS。目前,我已尝试通过以下方式致电NSIS:

    <exec executable="${nsis_exe.dir}/makensis.exe">
        <arg value="${installer.dir}/installer.nsi" />
        <arg value="/DTEST=myvalue"/>
        <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
    </exec>
我收到的错误是:

[exec] warning: unknown variable/constant "{TEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:184)
[exec] DetailPrint: "${TEST}"
[exec] warning: unknown variable/constant "{DTEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:185)
[exec] DetailPrint: "${DTEST}"
[exec] warning: unknown variable/constant "{BUILD_VERSION_LABEL}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:186)
[exec] DetailPrint: "${BUILD_VERSION_LABEL}"
[exec] File: Returning to: "C:\DTU\Build\${BUILD_VERSION_LABEL}"
[exec] File: "C:\DTU\Build\${BUILD_VERSION_LABEL}\*" -> no files found.

你知道我可以使用什么或者我做错了什么吗?

Ant属性在
build.xml
文件之外不起作用。如果希望在
nsi
文件中包含这些值,可以创建一个模板文件,然后使用
实体将该模板文件复制到
nsi
。这将用指定的值替换参数:

nsi模板文件 然后像这样复制您的
nsi
模板:

<copy file="${NSI.TEMPLATE.DIR}/${NSI.TEMPLATE.FILE}"
     tofile="${NSI.DIR}/${NSI.FILE}">
     <filterset>
         <filter token="TEST"                 value="${TEST}"/>
         <filter token="DTEST"                value="${DTEST}"/>
         <filter token="BUILD_VERSION_LABEL"  value="${BUILD_VERSION_LABEL}"/>
     </filterset>
</copy>

我的问题是我争论的顺序。我的ANT脚本中包含以下内容:

<exec executable="${nsis_exe.dir}/makensis.exe">
        <arg value="${installer.dir}/installer.nsi" />
        <arg value="/DTEST=myvalue"/>
        <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
</exec>

这是一个很好的解决方案,但我希望有更干净的东西。NSI文件中的命令行参数是否不可访问?命令行参数将传递给Ant执行,如果参数以
-D
开头,则被视为Ant属性,在Ant的Java执行之外不可用。您可以按原样将它们作为参数传递,也可以使用
替换文件中的令牌。您还可以使用
从头开始构建文件。这样,您就不必拥有模板文件。请参阅上面的附录。实际上,我指的是传递给makensis.exe的命令行参数。如果我将-D参数传递给makensis,如何访问NSI文件中的这些参数?除非像您一样构建
makensis.exx
命令并将它们作为
/D
参数传递给该命令,否则无法访问。你的OP中有这个。然后,由NSI使用该
NSI
文件中的
/D
参数。
<copy file="${NSI.TEMPLATE.DIR}/${NSI.TEMPLATE.FILE}"
     tofile="${NSI.DIR}/${NSI.FILE}">
     <filterset>
         <filter token="TEST"                 value="${TEST}"/>
         <filter token="DTEST"                value="${DTEST}"/>
         <filter token="BUILD_VERSION_LABEL"  value="${BUILD_VERSION_LABEL}"/>
     </filterset>
</copy>
<target name="build.nsi.file">
    <concat destfile="${NSI.file}">DetailPrint ${TEST}
DetailPrint ${DTEST}
DetailPrint ${BUILD_VERSION_LABEL}
File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"
</concat>
</target>
<exec executable="${nsis_exe.dir}/makensis.exe">
        <arg value="${installer.dir}/installer.nsi" />
        <arg value="/DTEST=myvalue"/>
        <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
</exec>
<exec executable="${nsis_exe.dir}/makensis.exe">
        <arg value="/DTEST=myvalue"/>
        <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
        <arg value="${installer.dir}/installer.nsi" />
</exec>
DetailPrint ${TEST}
DetailPrint ${BUILD_VERSION_LABEL}
File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"