如何在WiX 3.6中包含依赖于配置的项目输出

时间:2012-08-16 08:38:06

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

我想知道,如何在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输出窗口的蜡烛命令提示符:

  

------重建全部开始:项目: MySetup,配置:发布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的 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:\项目\研究\ Wix_ProjectOutput \ Wix_ProjectOutput.sln -dConfiguration =松开-dOutDir = .. \推出\ -dPlatform = 86 - dProjectDir = d:\项目\研究\ Wix_ProjectOutput \ MySetup \ -dProjectExt = .wixproj -dProjectFileName = MySetup.wixproj -dProjectName = MySetup -dProjectPath = d:\项目\研究\ Wix_ProjectOutput \ MySetup \ MySetup.wixproj -dTargetDir = d: \项目\研究\ Wix_ProjectOutput \推出\ -dTargetExt =的.msi -dTargetFileName = MySetup.msi -dTargetName = MySetup -dTargetPath = d:\项目\研究\ Wix_ProjectOutput \推出\ MySetup.msi的 -dMyApplication.Configuration =释放 -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:\项目\研究\ Wix_ProjectOutput \推出\ -dMyApplication.TargetExt = .EXE -dMyApplication.TargetFileName = MyApplication.exe -dMyApplication.TargetName =所有MyApplication -dMyApplication.TargetPath = d:\项目\研究\ Wix_ProjectOutput \发布\ MyApplication的.exe -out obj \ Release \ -arch x86 Product.wxs

所以,在msbuild下,一切正常。

更新3

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

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

发布错误here,但现在关闭时没有任何解释。

有什么想法吗?

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:0)

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

  1. 在Solution Explorer中右键单击项目的References节点,然后选择Add Reference ...
  2. 在“添加WiX库参考”对话框中,单击“项目”选项卡。
  3. 选择所需的项目,然后单击“添加”按钮,然后单击“确定”关闭该对话框。
  4. 详情here

答案 2 :(得分:0)

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