1

我正在尝试对 WixStandardBootstrapperApplication.cpp 进行更改并根据链接的建议生成一个 dll。我已经下载了 wix310-debug 源并正在修改 wix310-debug\src\ext\BalExtension\wixstdba\ 位置下的文件。在此位置下有一个 wixstdba.vcxproj 文件,我尝试使用 Visual Studio 2012 打开该文件。每当我尝试这样做时,都会出现错误:

Unable to read the project file "wixstdba.vcxproj". The imported project "C:\tools\WixBuild.props" was not found.

我不确定我应该怎么做才能纠正这个问题。另外,根据引用的链接,我认为我正在更新正确的文件,但如果不是这样,请告诉我。在这方面的任何帮助都会很棒。提前致谢。

4

1 回答 1

3

在您的 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 中。

于 2016-05-04T16:40:27.023 回答