在您的 vcxproj 中有这样一行:
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
调试源并不是真正的 wix 源。它包括所有 wix 源文件,但它不是真正可构建的。此 zip 包含所有已构建的 pdb,仅用于调试。
您想从wixtoolset 的 github下载 wix 源代码,以便构建 wixstdba。但是,这是针对当前版本 3.10.3 的,并且可能有一些特定于版本的更改,但我没有看到使用此处针对 wix 3.10.2 构建的 dll 会出现任何问题,因为引擎和引导程序应用程序接口应该保持不变相同的。
但是,您应该能够仅使用 WixStdBA 项目构建所有这些。您必须复制 wixstdba 文件夹。编辑 vcxproj 并删除上面提到的导入行(它应该靠近底部)。
现在,将此项目添加到您的新解决方案或 Visual Studio 中的安装程序解决方案中。我们需要添加额外的包含和库目录。所有这些包含目录都将位于您的 wix 安装位置(默认 C:\Program Files (x86)\WiX Toolset v3.10) 在属性 -> C/C++ -> 常规 -> 其他包含目录中添加您的 wix SDK 包含路径。如果您使用的是 Visual Studio 2013,则可以使用完整路径,也可以使用“$(WIX)\SDK\vs2013\inc”。$(WIX) 应该引用指向安装 wix 时添加的安装目录的 WIX 环境变量。如果您要在安装了 wix 的构建系统上构建,这应该是更好的选择,因为不同机器的位置可能不同。
现在对于添加库目录,我们转到属性 -> 链接器 -> 常规 -> 附加库目录并添加正确的库路径。如果您使用的是 Visual Studio 2013,则需要放入 $(WIX)\SDK\vs2013\lib\x86。最后,我们需要引用构建引导程序 dll 所需的库。在链接器 -> 输入 -> 附加依赖项下,添加“dutil.lib;balutil.lib”。我的附加依赖项有更多的东西,我不记得它是否默认存在。无论如何,这是我的附加依赖项
dutil.lib;balutil.lib;advapi32.lib;comctl32.lib;comdlg32.lib;gdi32.lib;gdiplus.lib;kernel32.lib;msimg32.lib;odbc32.lib;odbccp32.lib;ole32.lib;oleaut32.lib;shell32.lib;shlwapi.lib;user32.lib;uuid.lib;wininet.lib;winspool.lib;version.lib;%(AdditionalDependencies)
有了这个,您应该能够构建 wixstdba 项目并构建一个 dll。无需编辑任何代码,这应该与 wix 包含的 wixstdba.dll 完全相同。
您可以尝试引用此 dll 而不是 wix 包含的一个(必须定义您自己的 BootstrapperApplication 而不是使用 BootstrapperApplicationRef 到 wix 之一),或者只是将此 dll 放入您的 wix 位置的 bin 中。