如何在WiX 3.6中包含与配置相关的项目输出

7
我想知道如何在WiX安装项目中包含一个与配置相关的项目输出。 例如,我们看一个带有一个.NET应用程序和一个Wix设置项目的Visual Studio解决方案。
我已经在设置项目中添加了对.NET应用程序的引用,并在设置源代码中创建了组件:
  <Component Guid="EB0CBC32-5AE5-41B3-A343-FEBE044AC30A">
    <File Source="$(var.MyApp.TargetPath)" KeyPath="yes"/>
  </Component>

因此,我期望WiX将在其发布设置msi中包含MyApp的发布版本,并在调试msi中包含调试版本。否则,对项目输出的引用对我来说毫无意义。
但是总有调试版本。 我做错了什么吗?
更新。 这是从VS输出窗口的candle命令提示符:
------ 重新生成全部开始: 项目: MySetup,配置: Release x86 ------ C:\ Program Files \ WiX Toolset v3.6 \ bin \ candle.exe -d“DevEnvDir = C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \”-dSolutionDir = D:\ Projects \ Research \ Wix_ProjectOutput \ -dSolutionExt = .sln -dSolutionFileName = Wix_ProjectOutput.sln -dSolutionName = Wix_ProjectOutput -dSolutionPath = D:\ Projects \ Research \ Wix_ProjectOutput \ Wix_ProjectOutput.sln -dConfiguration = Release -dOutDir = .. \ Release \ -dPlatform = x86 -dProjectDir = D:\ Projects \ Research \ Wix_ProjectOutput \ MySetup \ -dProjectExt = .wixproj -dProjectFileName = MySetup.wixproj -dProjectName = MySetup -dProjectPath = D:\ Projects \ Research \ Wix_ProjectOutput \ MySetup \ MySetup.wixproj -dTargetDir = D:\ Projects \ Research \ Wix_ProjectOutput \ Release \ -dTargetExt = .msi -dTargetFileName = MySetup.msi -dTargetName = MySetup -dTargetPath = D:\ Projects \ Research \ Wix_ProjectOutput \ Release \ MySetup.msi -dMyApplication.Configuration = Debug“-d”MyApplication.FullConfiguration = Debug | x86“-dMyApplication.Platform = x86 -dMyApplication.ProjectDir = D:\ Projects \ Research \ Wix_ProjectOutput \ MyApplication \ -dMyApplication.ProjectExt = .csproj -dMyApplication.ProjectFileName = MyApplication.csproj -dMyApplication.ProjectName = MyApplication -dMyApplication.ProjectPath = D:\ Projects \ Research \ Wix_ProjectOutput \ MyApplication \ MyApplication.csproj -dMyApplication.TargetDir = D:\ Projects \ Research \ Wix_ProjectOutput \ Debug \ -dMyApplication.TargetExt = .exe -dMyApplication.TargetFileName = MyApplication.exe -dMyApplication.TargetName = MyApplication -dMyApplication.TargetPath = D:\ Projects \ Research \ Wix_ProjectOutput \ Debug \ MyApplication.exe -out obj \ Release \ -arch x86 Product.wxs
为什么在MySetup的发布版本中使用了MyApplication的调试配置??
更新2。 这是使用命令行中的msbuild时的candle命令提示符:
%windir%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe /verbosity:d /t:rebuild /fileLogger /p:Configuration=Release  Wix_ProjectOutput.sln 

msbuild.log中:

C:\Program Files\WiX Toolset v3.6\bin\candle.exe -d“DevEnvDir = 如果不是在Visual Studio内部构建,则未定义” -dSolutionDir = D:\ Projects \ Research \ Wix_ProjectOutput \ -dSolutionExt =。sln -dSolutionFileName = Wix_ProjectOutput.sln -dSolutionName = Wix_ProjectOutput -dSolutionPath = D:\ Projects \ Research \ Wix_ProjectOutput \ Wix_ProjectOutput.sln -dConfiguration = Release -dOutDir = .. \ Release \ -dPlatform = x86 -dProjectDir = D:\ Projects \ Research \ Wix_ProjectOutput \ MySetup \ -dProjectExt =。wixproj -dProjectFileName = MySetup.wixproj -dProjectName = MySetup -dProjectPath = D:\ Projects \ Research \ Wix_ProjectOutput \ MySetup \ MySetup.wixproj -dTargetDir = D:\ Projects \ Research \ Wix_ProjectOutput \ Release \ -dTargetExt =。msi -dTargetFileName = MySetup.msi -dTargetName = MySetup -dTargetPath = D:\ Projects \ Research \ Wix_ProjectOutput \ Release \ MySetup.msi -dMyApplication.Configuration = Release -d“MyApplication.FullConfiguration = Release | x86” -dMyApplication.Platform = x86 -dMyApplication.ProjectDir = D:\ Projects \ Research \ Wix_ProjectOutput \ MyApplication \ -dMyApplication.ProjectExt =。csproj -dMyApplication.ProjectFileName = MyApplication.csproj -dMyApplication.ProjectName = MyApplication -dMyApplication.ProjectPath = D:\ Projects \ Research \ Wix_ProjectOutput \ MyApplication \ MyApplication.csproj -dMyApplication.TargetDir = D:\ Projects \ Research \ Wix_ProjectOutput \ Release \ -dMyApplication.TargetExt =。exe -dMyApplication.TargetFileName = MyApplication.exe -dMyApplication.TargetName = MyApplication -dMyApplication.TargetPath = D:\ Projects \ Research \ Wix_ProjectOutput \ Release \ MyApplication.exe -out obj \ Release \ -arch x86 Product.wxs

因此,在msbuild下一切正常。

更新3

看起来WiX使用活动构建配置(请参见VS工具栏中的组合框)。
我的意思是,如果在那里选择了调试,则WiX项目将包括引用项目的调试输出。 如果选择了发布,则WiX项目将包括发布输出。

从我的角度来看,这种行为是不正确的。调试安装程序必须包含引用项目的调试输出。发布安装程序-发布输出。

发布问题在此处,但现在已关闭而没有任何解释。

有什么想法吗?

3个回答

10

你可以使用$(var.Configuration),它被设置为解决方案配置(Debug, Release等):

<File Id="MyApp.exe" KeyPath="yes" Source="..\MyApp\$(var.Configuration)\MyApp.exe" />

这个方法可能是正确的,但细节似乎有误: 1.) 编译后的二进制文件会被放置在(项目目录)\bin(配置)。上面的例子漏掉了 bin 目录。 2.) 默认情况下,只有 Debug 和 Release 构建会被放置在 bin 目录下,其他构建会被放置在 bin\x86(配置) 目录下。这个例子无法考虑到目录深度的差异。 我正在使用 $(var.(projectname).TargetDir)。 - balintn
你可能对项目路径是正确的,经过仔细检查,我可以告诉你我的答案是错误的,或者最多只能用作临时解决方法。看起来TC问题确实是关于配置管理器的知识不足,就像mheyman在下面指出的那样。 - BBR

0

由于我经常成功地完成您正在尝试的工作,我怀疑您正在混淆解决方案配置和项目配置。 foo 的解决方案配置可以使用 bar 的项目配置 - 它们只是名称,不必匹配。检查配置管理器(在 VS2012 中为 BUILD → Configuration Manager...),并验证当您的解决方案配置为“发布”时,您的项目配置也为“发布”。


0

尝试添加一个变量MyApplication.Configuration,并按照以下步骤将其设置为Release

  1. 在解决方案资源管理器中,右键单击项目的“引用”节点,然后选择“添加引用...”。
  2. 在“添加 WiX 库引用”对话框中,单击“项目”选项卡。
  3. 选择所需的项目,然后单击“添加”按钮,最后单击“确定”以关闭对话框。

详细信息在此处


这个变量已经定义过了,它的值是Debug。 我在WiX跟踪器上发布了一个bug,但现在它被关闭了,没有任何解释。我更新了我的问题。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接