我想知道,如何在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 输出窗口中蜡烛的命令提示符:
------ 全部重建 已开始:项目:我的安装程序,配置:发布 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 时:
%windir%Microsoft.NETFrameworkv4.0.30319MsBuild.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=Undefined 如果不是从 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\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 工具栏上的组合框)。
我的意思是,如果在那里选择了Debug
,WiX 项目将包括引用项目的调试输出。如果选择Release
,WiX 项目将包括发布输出。
从我的角度来看,这种行为是不正确的。 Debug
安装程序必须包括引用项目的调试输出。 Release
安装程序 - 发布输出。
在这里发布了错误,但现在它已关闭,没有任何解释。
有什么想法吗?
您可以使用 $(var.配置),设置为解决方案配置(调试、发布等):
<File Id="MyApp.exe" KeyPath="yes" Source="..MyApp$(var.Configuration)MyApp.exe" />
尝试添加变量 MyApplication.Configuration
并通过以下步骤将其设置为 Release
:
- 在"解决方案资源管理器"中右键单击项目的"引用"节点,然后选择"添加引用..."
- 在"添加 WiX 库引用"对话框中,单击"项目"选项卡。
- 选择所需的项目并单击"添加"按钮,然后单击"确定"关闭对话框。
详情请见此处。
由于我完全按照您经常尝试的方式成功,因此我怀疑您将解决方案配置与项目配置混淆了。foo的解决方案配置可以使用bar的项目配置 - 它们只是名称,不必匹配。检查配置管理器(VS2012 中的 BUILD → Configuration Manager...),并验证当解决方案配置为"发布"时,项目配置是否也是"发布"。