我正在尝试设置一个安装文件,该文件(可选)安装 .NET 5(如果尚未安装)。
但是,我无法定义要安装在常量中的 .NET 版本。
我的脚本是这样设置的
#define DotNetVersion "5"
...
[Tasks]
Name: "dotnet"; Description: "{cm:DotNet}"; GroupDescription: "{cm:Prerequisites}"
...
[Files]
Source: "..\Dependencies\{#DotNetInstallFile}"; DestDir: {tmp}; \
Flags: deleteafterinstall; AfterInstall: InstallDotNet; \
Check: NetNotInstalled(ExpandConstant('{DotNetVersion}')); Tasks: "dotnet"
当我尝试运行生成的安装文件时,出现以下错误:
<块引用>内部错误:表达式错误'内部错误:未知常量“DotNetVersion”'
如果我将 NetNotInstalled
替换为 ExpandConstant('{DotNetVersion}')
,函数 '5'
可以正常工作,但我希望能够轻松更改它,而无需修改超过定义的常量。
我不明白这里有什么问题。 Inno Setup 文档指出这应该是有效的。
对任何其他函数使用相同的常量似乎完美无缺。
答案 0 :(得分:2)
变量 defined using Inno Setup preprocessor 不是 Inno Setup constant。对其调用 ExpandConstant
function 无效。
要扩展预处理器变量(或任何 expression),您可以使用 {#VariableOrExpression}
语法。它是一个 inline preprocessor directive call,当没有明确指定指令时,emit
是隐含的。所以 {#VariableOrExpression}
与 {#emit VariableOrExpression}
相同。与每个预处理器构造一样,它在编译时进行评估(与 ExpandConstant
相反)。
您实际上已经用 {#DotNetInstallFile}
正确地做到了这一点,所以对 DotNetVersion
也这样做:
Source: "..\Dependencies\{#DotNetInstallFile}"; \
DestDir: {tmp}; Flags: deleteafterinstall; AfterInstall: InstallDotNet; \
Check: NetNotInstalled('{#DotNetVersion}'); Tasks: "dotnet"