Wpf 如何在wix安装程序中以智能方式包含热生成的wsx文件?

Wpf 如何在wix安装程序中以智能方式包含热生成的wsx文件?,wpf,msbuild,wix,wix-extension,Wpf,Msbuild,Wix,Wix Extension,这是一个WPF应用程序,带有Wix安装程序 我有resources文件夹,我想将这些文件包括在安装程序中,放在可执行文件旁边。我解决了如何使用heat工具生成一个resources.wxs文件,其中包含有关resources文件夹下文件的必要信息。我设法将其包含到主wxs文件中。出于这个原因,我修改了.wixproj文件,添加了一个构建前目标操作来生成wxs,并将其包含在主wxs中 关注点:.wixproj有点隐藏,有一些东西你不能从VisualStudio中修改,比如添加构建前操作(预构建操作

这是一个WPF应用程序,带有Wix安装程序

我有
resources
文件夹,我想将这些文件包括在安装程序中,放在可执行文件旁边。我解决了如何使用
heat
工具生成一个
resources.wxs
文件,其中包含有关
resources
文件夹下文件的必要信息。我设法将其包含到主
wxs
文件中。出于这个原因,我修改了
.wixproj
文件,添加了一个构建前目标操作来生成wxs,并将其包含在主
wxs

关注点:.wixproj有点隐藏,有一些东西你不能从VisualStudio中修改,比如添加构建前操作(预构建操作是另一回事)

问题:如何将构建前操作提取到单独的文件中

.wixproj
中的生成前操作:

<Target Name='BeforeBuild'>
<Exec Command='"%WIX%bin\heat" dir $(SolutionDir)resources -dr ResourcesDir -var var.ResourcesDir -cg ResourceFilesGroup -gg -g1 -sfrag -srd -out $(ProjectDir)Resources.wxs' />
<ItemGroup>
  <Compile Include='$(ProjectDir)Resources.wxs' />
</ItemGroup>


您可以将其提取到一个单独的文件中,大多数项目文件类型已经这样做了。这就是他们为同一类型的所有项目提供共同目标的方式。A.wixproj有以下特点:

<Import Project="$(WixVersionTargetsPath)" />

要增强您自己的能力,只需:

创建一个XML文件,如:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">    
   <Target Name='BeforeBuild'>
        <!-- tasks -->
    </Target>
</Project>

在项目元素内添加导入元素并引用该文件:

<Import Project="custom.targets" />

如果这样的文件主要具有目标元素,则约定其文件扩展名为“.targets”

但Visual Studio有两个缺点:

  • VisualStudio缓存所有项目文件依赖项,并在内部运行MSBuild。因此,如果您编辑外部文件,则在下次加载项目之前,它不会成为使用VisualStudio生成的一部分。要快速卸载和重新加载项目,请使用解决方案资源管理器中的项目关联菜单。解决方法:自己调用MSBuild
  • Visual Studio加载项目时,如果其中包含非标准外部文件,则会发出警告。(如果我记得的话,您可以在注册表中按项目文件路径对每个用户禁用它。)


  • 作为直接调用heat的替代方法,您可能需要查看WiX提供的Harvest*目标。注意:正如文档所说,您不直接调用它们(它们已经被构建目标调用);您只需将项目添加到他们处理的项目组并设置他们使用的属性

    谢谢!我会调查的。调用热量似乎有点低。