首页 > 解决方案 > 使用 $(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也有效!

标签: wixenvironment-variablesvisual-studio-2019

解决方案


更新:首先是关于环境变量和运行进程问题的几个链接:


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


推荐阅读