【问题标题】:How to include a configuration-dependent project output in WiX 3.6如何在 WiX 3.6 中包含依赖于配置的项目输出
【发布时间】:2012-08-16 08:38:06
【问题描述】:

我想知道,如何在 WiX 设置项目中包含依赖于配置的项目输出? 例如,让我们看一下带有一个 .NET 应用程序和一个 Wix 安装项目的 Visual Studio 解决方案。

我在安装项目中添加了对 .NET 应用程序的引用,并在安装源中创建了组件:

  <Component Guid="EB0CBC32-5AE5-41B3-A343-FEBE044AC30A">
    <File Source="$(var.MyApp.TargetPath)" KeyPath="yes"/>
  </Component>

因此,我希望 WiX 将在其 release 设置 msi 中包含 MyApp 的 release 版本,并在 debug msi 中分别包含调试版本。否则,对项目输出的引用对我来说毫无意义。

但总是有调试版本。 我做错了什么?

更新。

这是来自 VS 输出窗口的蜡烛命令提示符:

------ 重建全部开始:项目: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 产品.wxs

为什么在 MySetup 的 release 构建中使用了 MyApplication 的 debug 配置?

更新 2

这里是蜡烛的命令提示符,当从命令行使用 msbuild 时:

%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\Rese arch\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 使用 active 构建配置(参见 VS 工具栏上的组合框)。
我的意思是,如果在那里选择了Debug,WiX 项目将包括引用项目的调试输出。如果选择Release,WiX 项目将包括发布输出。

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

发了bughere,现在不解释就关闭了。

有什么想法吗?

【问题讨论】:

    标签: visual-studio-2010 wix wix3.6


    【解决方案1】:

    您可以使用 $(var.Configuration),它设置为解决方案配置(调试、发布等...):

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

    【讨论】:

    • 方法可能是对的,但细节似乎不对: 1.) 构建的二进制文件放在 (projectdir)\bin(configuration) 中。上面的例子错过了 bin 目录。 2.) 默认情况下,只有 Debug 和 Release 版本构建在 bin 下,其他构建在 bin\x86(configuration) 下。该示例无法满足目录深度的这种可能差异。我正在使用 $(var.(projectname).TargetDir)
    • 您对项目路径的看法可能是正确的,经过仔细检查后,我可以说我的答案无论如何都是错误的,或者最多只能用作临时解决方法。看起来 TC 问题确实是缺乏对 Configuration Manager 的了解,就像下面提到的 mheyman。
    【解决方案2】:

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

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

    详情here.

    【讨论】:

    • 这个变量已经定义好了,它的值是Debug。我在 WiX 跟踪器上发布了一个错误,但现在它已关闭,没有任何解释。更新了我的问题。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2014-04-24
      • 2023-03-27
      • 2018-01-09
      • 2014-04-04
      • 2020-01-27
      相关资源
      最近更新 更多