6

我对 WiX 完全陌生,并且通常设置自定义安装程序,所以我为这个问题的主题道歉!

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

然后构建并运行这个最基本的 WiX 安装程序版本后,输出目录有一个单独的 exe 文件,该文件在加载后会因未找到文件异常而崩溃。

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

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

任何帮助是极大的赞赏!/安东尼

4

2 回答 2

11

不幸的是,您将不得不做一些体力劳动才能使您的项目正确。我将采用以下两种方法中的任何一种,这些方法需要您编辑 .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>
    
于 2013-10-31T10:13:22.503 回答
2

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

于 2013-10-30T17:21:27.380 回答