获取WIX以包含项目中的引用

时间:2013-10-30 17:19:16

标签: c# winforms wix

我是WiX的新手并且总体上设置了自定义安装程序,所以我为这个问题的主题道歉!

我有一个内部业务应用程序(日记),它构建和运行良好,所以我按照教程/官方文档添加WiX项目并引用日记的csproj。

在构建并运行这个最基本版本的WiX安装程序之后,输出目录有一个单独的exe文件,在加载File Not Found Exception后崩溃。

我的猜测是它没有内置Crystal Report或NLog,两者都在我的CSProj中引用。

我的问题是,如何让WIX包含并构建对输出的项目引用???

非常感谢任何帮助! /安东尼

2 个答案:

答案 0 :(得分:9)

不幸的是,您必须做一些体力劳动才能使您的项目正确。我将采用以下两种方法之一,要求您编辑.wixproj文件:

  1. 使用HeatProject任务。您必须为所有引用的项目执行此操作,它将为您提供单独的.wxs文件。在此之后,在基于WIX的设置的功能中引用这些文件中的组件组。

    <Target Name="BeforeBuild">
      <HeatProject ToolPath="$(WixToolPath)" AutogenerateGuids="true" OutputFile="OutputFile.wxs" SuppressFragments="true" Project="ReferencedProject.csproj" ProjectOutputGroups="Binaries" />
    </Target>
    
  2. 使用HeatDirectory任务。下面将获取项目bin文件夹中的所有内容,包括引用项目的任何二进制文件,并为您提供包含UniqueComponentGroupName的单个.wxs,可以包含在任何功能中。

    <Target Name="BeforeBuild">
      <PropertyGroup>
        <DefineConstants>BINFOLDER=PATH\TO\YourProject\bin\$(Configuration)</DefineConstants>
      </PropertyGroup>
      <HeatDirectory OutputFile="OutputFile.wxs" Directory="PATH\TO\YourProject\bin\$(Configuration)" KeepEmptyDirectories="true" DirectoryRefId="INSTALLFOLDER" ComponentGroupName="UniqueComponentGroupName" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" GenerateGuidsNow="true" ToolPath="$(WixToolPath)" PreprocessorVariable="var.BINFOLDER" />
    </Target>
    

答案 1 :(得分:2)

与旧版Visual Studio中的(现已不存在)安装项目项目不同,WiX不进行自动参考检测。您必须手动将每个引用的项目添加到WiX项目中,就像您对主项目所做的那样。