在 ExpandConstant 中无法识别使用 Inno Setup 预处理器 #define 定义的常量

Constant defined using Inno Setup preprocessor #define is not recognised in ExpandConstant

我正在尝试设置一个安装文件,如果 .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"

当我尝试 运行 生成的安装文件时,出现以下错误:

Internal error: Expression error 'Internal error: Unknown constant "DotNetVersion"'

如果我将 ExpandConstant('{DotNetVersion}') 替换为 '5',函数 NetNotInstalled 可以正常工作,但我希望能够轻松地更改它,而无需修改超过定义的常量。

我不明白这里出了什么问题。 Inno Setup 文档声明此 应该 有效。
对任何其他函数使用相同的常量似乎可以完美地工作。

一个变量defined using Inno Setup preprocessor is not Inno Setup constant. Calling ExpandConstant function对它没有影响。

扩展预处理器变量(或隐含任何 expression), you can use {#VariableOrExpression} syntax. It's an inline preprocessor directive call, where, when no directive is explicitly specified, the emit。因此 {#VariableOrExpression}{#emit VariableOrExpression} 相同。并且作为每个预处理器构造,它在编译时进行评估(相反至 ExpandConstant).

你实际上已经用 {#DotNetInstallFile} 正确地做到了,所以用 DotNetVersion 做同样的事情:

Source: "..\Dependencies\{#DotNetInstallFile}"; \
    DestDir: {tmp}; Flags: deleteafterinstall; AfterInstall: InstallDotNet; \
    Check: NetNotInstalled('{#DotNetVersion}'); Tasks: "dotnet"

另见 How to use variables \ macros with Inno Setup?