Wix 在CNDL0150的candle.exe中使用$(env.VCINSTALLDIR)失败

Wix 在CNDL0150的candle.exe中使用$(env.VCINSTALLDIR)失败,wix,environment-variables,visual-studio-2019,Wix,Environment Variables,Visual Studio 2019,我需要使用一个环境变量 CMD提示符显示以下内容 VCINSTALLDIR=C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Professional\VC\ 现在我试着用这个 <Merge Id='VC_CRT_x86' Language='0' SourceFile='$(env.VCINSTALLDIR)\Redist\MSVC\14.16.27012\MergeModules\Microsoft_VC14

我需要使用一个环境变量

CMD提示符显示以下内容

VCINSTALLDIR=C:\ProgramFiles(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' 
  />

使用完整路径是可行的

我从VS-2019环境中编译

编辑:当我使用一个简单的CMD窗口,并从那里使用Candle.exe时。一切正常。环境变量未在VS-2019中传递,这一点值得注意

EDIT2:使用
devenv.exe/buildrelease mywxsproject.sln
也可以

cmd.exe:您可能正在通过Visual Studio Developer的
命令提示符执行
,而不是执行
从常规的
cmd.exe
=>
这会产生一个错误的实际环境变量列表

Visual Studio Developer命令提示符:Visual Studio Developer命令提示符
基本上是启动
cmd.exe
,并进行了一些开发人员调整。我不知道这一切是如何运作的,但这是本质。我们可能需要传唤来弄清真相

WiX变量:我做了一个冒烟测试,如果环境变量是从环境变量小程序设置的,则应解决
$(此处为env.MY\u值)
构造问题:

rundll32.exe sysdm.cpl,EditEnvironmentVariables
按Windows键,轻按R,粘贴上面的内容,然后按Enter键

解决方案:在修复领域,我不确定该建议什么,因为我不知道详细的目的是什么。我怀疑您希望一切都“开箱即用”,但我只想将您需要的所有合并模块复制到您组装设置的发布区域:

大概是这样的:

  • $(env.vcsinstalldir)\Redist\MSVC\14.16.27012\MergeModules\Microsoft\u VC141\u CRT\u x86.msm

  • \\Releases\Common\MergeModules\Microsoft\u VC141\u CRT\u x86.msm

cmd.exe:您可能正在通过Visual Studio开发者的
命令提示符执行
“设置”,而不是执行
“设置”
从常规的
cmd.exe
=>
这会产生一个错误的实际环境变量列表

Visual Studio Developer命令提示符:Visual Studio Developer命令提示符
基本上是启动
cmd.exe
,并进行了一些开发人员调整。我不知道这一切是如何运作的,但这是本质。我们可能需要传唤来弄清真相

WiX变量:我做了一个冒烟测试,如果环境变量是从环境变量小程序设置的,则应解决
$(此处为env.MY\u值)
构造问题:

rundll32.exe sysdm.cpl,EditEnvironmentVariables
按Windows键,轻按R,粘贴上面的内容,然后按Enter键

解决方案:在修复领域,我不确定该建议什么,因为我不知道详细的目的是什么。我怀疑您希望一切都“开箱即用”,但我只想将您需要的所有合并模块复制到您组装设置的发布区域:

大概是这样的:

  • $(env.vcsinstalldir)\Redist\MSVC\14.16.27012\MergeModules\Microsoft\u VC141\u CRT\u x86.msm

  • \\Releases\Common\MergeModules\Microsoft\u VC141\u CRT\u x86.msm


请注意这个问题:-。不一样,但是因为您在这个问题上使用了VS2019.Heads:-。不一样,但既然你用的是VS2019,我不同意。如果我在VS-2019的构建过程中启动一个批处理文件,那么所需的变量就在那里。我有一个成功使用它们的后期和预构建过程。也可以从命令行使用它,但只有VS-2019内部的构建过程失败。请参阅新注释:您尝试过WiX 3.14吗?没有。目前我没有时间切换。我想您可以尝试将其添加为“真实”环境变量?没有那么干净(有点像重写——VisualStudio甚至可能会抱怨?),但我想它现在可以工作了?不过,我真的建议将所有合并模块放在一个共享的UNC路径上——因为它们可以以这种方式包含在任何包中,并且它为您提供了一个合并模块的“保留库”?我不同意。如果我在VS-2019的构建过程中启动一个批处理文件,那么所需的变量就在那里。我有一个成功使用它们的后期和预构建过程。也可以从命令行使用它,但只有VS-2019内部的构建过程失败。请参阅新注释:您尝试过WiX 3.14吗?没有。目前我没有时间切换。我想您可以尝试将其添加为“真实”环境变量?没有那么干净(有点像重写——VisualStudio甚至可能会抱怨?),但我想它现在可以工作了?我真的建议将所有合并模块放在一个共享的UNC路径上——因为它们可以以这种方式包含在任何包中,并且它为您提供了一个合并模块的“保留库”?