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的发布版本,并在 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 Product.wxs

为什么MySetup的发布版本使用了 MyApplication 的调试配置?

更新 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\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 工具栏上的组合框)。
我的意思是,如果Debug在那里选择,WiX 项目将包括引用项目的调试输出。如果Release选中,WiX 项目将包括发布输出。

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

在这里发布了错误,但现在没有任何解释就关闭了。

有任何想法吗?

4

3 回答 3

10

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

<File Id="MyApp.exe" KeyPath="yes" Source="..\MyApp\$(var.Configuration)\MyApp.exe" />
于 2013-04-14T09:12:17.683 回答
0

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

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

详情在这里

于 2012-08-24T09:31:34.523 回答
0

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

于 2013-04-11T14:57:41.340 回答