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

AJ *_*McK 5 c# wix winforms

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

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

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

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

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

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

stt*_*taq 10

不幸的是,为了让你的项目正确,你将不得不做一些体力劳动.我将采用以下两种方法之一,要求您编辑.wixproj文件:

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

    <Target Name="BeforeBuild">
      <HeatProject ToolPath="$(WixToolPath)" AutogenerateGuids="true" OutputFile="OutputFile.wxs" SuppressFragments="true" Project="ReferencedProject.csproj" ProjectOutputGroups="Binaries" />
    </Target>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

  • 救救我,所有这些东西(`DefineConstants` ...`GenerateGuidsNow` ...`SuppressRootDirectory` ... ToolPath`)都是必要的!我以为默认值可以覆盖我,但不可以。成功的坑不是这样。 (2认同)

Ada*_*son 2

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