2023 年 4 月
随着 WiX 4 的正式发布,现在原生支持通过 WiX 4 Netfx wixextension 检查计算机上是否安装了 .NET 运行时(核心、桌面或 aspnet):https://wixtoolset.org/docs/schema/netfx/dotnetcompatibilitycheck/ https://wixtoolset.org/docs/schema/netfx/dotnetcompatibilitycheck/
用法示例:
<Fragment>
<netfx:DotNetCompatibilityCheck Id="netCoreStatus"
Property="NETCORESTATUS" RollForward="latestMajor"
RuntimeType="core" Version="6.0.1" Platform="x64" />
<Launch Condition="Installed OR NETCORESTATUS="0""
Message="[ProductName] requires Microsoft .NET Core - 6.0.1 or greater." />
</Fragment>
在内部,它使用我在下面链接的相同包来运行 NetCoreCheck 可执行文件。
原答案
WiX 3 目前本身无法处理此问题。它正在针对 WiX v4 进行开发(GitHub问题 https://github.com/wixtoolset/issues/issues/6264)。阅读该问题后,我发现这些工具是当前的解决方法。
https://www.nuget.org/packages/Microsoft.NET.Tools.NETCoreCheck.x86 https://www.nuget.org/packages/Microsoft.NET.Tools.NETCoreCheck.x86
https://www.nuget.org/packages/Microsoft.NET.Tools.NETCoreCheck.x64 https://www.nuget.org/packages/Microsoft.NET.Tools.NETCoreCheck.x64
您可以使用这些包内的文件来检查运行时。要么通过运行NetCoreCheck.exe
直接或使用提供的自定义操作 DLL。
NetCoreCheck.exe -h
查看帮助。但你会想要这样的东西:
netcorecheck --runtimename Microsoft.NetCore.App --runtimeversion 6.0.0
我不知道如何使用自定义操作 DLL,但我确实看到它有两个 DLL 导出。
ordinal hint RVA name
1 0 00001500 CheckNETRuntime
2 1 00002260 get_hostfxr_path