wix - 使用 $(env.VCINSTALLDIR) 在带有 CNDL0150 的candle.exe 中失败
问题描述
我需要使用环境变量。
CMD 提示显示如下内容
VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\
现在我尝试使用这个
<Merge Id='VC_CRT_x86'
Language='0'
SourceFile='$(env.VCINSTALLDIR)\Redist\MSVC\14.16.27012\MergeModules\Microsoft_VC141_CRT_x86.msm'
DiskId='1'
/>
但我得到了消息
error CNDL0150: Undefined preprocessor variable '$(env.VCINSTALLDIR)'.
使用完整路径有效。
我从 VS-2019 环境中编译。
编辑:当我使用一个简单的 CMD 窗口并从那里使用 Candle.exe 时。一切正常。似乎环境变量没有在 VS-2019 中传递。
EDIT2:使用devenv.exe /build release mywxsproject.sln
也有效!
解决方案
更新:首先是关于环境变量和运行进程问题的几个链接:
cmd.exe:您可能是"set"
从 aVisual Studio Developer Command Prompt
而不是"set"
从常规这会产生一个错误的实际环境变量列表。cmd.exe
=>
Visual Studio 开发人员命令提示:Visual Studio Developer Command Prompt
本质上是一个批处理文件,启动cmd.exe
时会进行一些开发人员调整。我不知道这一切是如何运作的,但这就是本质。我们可能需要召唤Mr. Heath Stewart
才能查明真相?
WiX 变量:我做了一个冒烟测试,$(env.MY_VALUE_HERE)
如果环境变量是从环境变量小程序设置的,那么构造应该会解析:
rundll32.exe sysdm.cpl,EditEnvironmentVariables
按Windows Key、点击R、粘贴以上内容并按Enter。
解决方案:在修复领域,我不确定该建议什么,因为我不知道详细目的是什么。我怀疑您希望所有内容都“开箱即用”,但我只需将您需要的所有合并模块复制到您组装设置的发布区域:
像这样的东西:
$(env.VCINSTALLDIR)\Redist\MSVC\14.16.27012\MergeModules\Microsoft_VC141_CRT_x86.msm
\\Releases\Common\MergeModules\Microsoft_VC141_CRT_x86.msm
推荐阅读
- javascript - Angular 中带有 hostlistener 的活动类
- javascript - 如何将来自后端的有效负载响应重新格式化为所需的格式?
- r - 如何在 knitr_kable 对象上加上括号
- java - 第二个 Scanner 对象的输入与类型不匹配..?
- woocommerce - 我将购物车和结帐页面合并为一个现在迷你购物车不更新金额
- node.js - Passport 未根据要求公开 login() 函数
- java - 没有@EnableAsync,@Async 是否可以工作
- google-cloud-firestore - 您可以在 Firestore 中隐藏集合组查询的父 ID 信息吗?
- amazon-web-services - 允许 Stripe webhook 访问 AWS EC2 实例
- ubuntu - 如何在 vscode ubuntu 20.04 中显示表情符号?