【问题标题】:Get WIX to include references within a project获取 WIX 以在项目中包含引用
【发布时间】:2013-11-10 11:05:36
【问题描述】:

我对 WiX 和设置自定义安装程序完全不熟悉,所以对于这个问题的主题,我深表歉意!

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

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

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

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

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

【问题讨论】:

  • 您的 WIX 设置是否包含项目的任何输出文件?你能分享你在设置中包含你的项目的 WIX 部分吗?这可能有助于更好地理解您的问题。您还应该尝试使用 Orca,这将帮助您查看最终设置 msi 中包含的内容。
  • 没有人知道,但您可以知道您应该在安装程序中包含哪些引用的程序集,也不知道它们应该安装在哪里。 Visual Studio 的 Copy To Output 功能是为了方便在开发人员的机器上进行调试。可能它们正是您想要安装的,并且您希望它们全部安装到同一个位置。如果确实如此,那么正如@sttaq 解释的那样,以这种方式收获很容易。另一方面,对于一些第 3 方组件,我运行他们的安装程序。您可以将安装程序与 WiX Bootstrapper 项目链接和捆绑在一起。

标签: c# winforms wix


【解决方案1】:

不幸的是,您必须做一些体力劳动才能使您的项目正确。我会采取以下两种方法中的任何一种,这两种方法需要您编辑 .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>
    

【讨论】:

  • 谢谢,我确实尝试从命令行运行 heat 来收获我的项目,但它最终什么也没做(与您的解决方案不同)!
  • 要为这个答案添加更多内容,使用选项 2.,您需要像原始 product.wxs 文件一样将 OutputFile(示例中为 OutputFile.wxs)添加到您的 Wix 项目中,然后您可以将 ComponentGroupRef 添加到 Feature 节点
  • @ToddK 是否可以在不将文件存储在版本控制中的情况下做到这一点?我想将生成的文件存储为$(IntermediateOutputPath)\Product.Generated.wxs,然后以某种方式引用它。
  • 我没有签入生成的文件。项目有对它的引用,当你最初签出版本控制时,它会显示文件丢失的警告图标,但是一旦你编译,文件就会及时存在。
  • 救火车我,所有这些东西 (DefineConstants ... GenerateGuidsNow ... SuppressRootDirectory ... ToolPath) 都是必要的!我认为默认设置会覆盖我,但没有。这不是成功的坑。
【解决方案2】:

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

【讨论】:

  • 谢谢你,很明显,我似乎无法找到有关让 WIX 构建在(已被 WIX 引用的)项目中引用的其他 3rd 方库的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
相关资源
最近更新 更多