我想知道,如何在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,但现在关闭时没有任何解释。
有什么想法吗?
答案 0 :(得分:9)
你可以使用$(var.Configuration),它被设置为解决方案配置(Debug,Release等):
<File Id="MyApp.exe" KeyPath="yes" Source="..\MyApp\$(var.Configuration)\MyApp.exe" />
答案 1 :(得分:0)
尝试添加MyApplication.Configuration
变量并按以下步骤将其设置为Release
:
详情here。
答案 2 :(得分:0)
由于我完全按照您的成功经常尝试,我怀疑您将解决方案配置与项目配置混淆。 foo 的解决方案配置可以使用 bar 的项目配置 - 它们只是名称而不必匹配。检查配置管理器(VS2012中的 BUILD→配置管理器... )并验证当解决方案配置为“Release”时,您的项目配置也是“Release”。