我正在尝试对WixStandardBootstrapperApplication.cpp进行更改,并根据this链接的建议生成一个dll。我已经下载了wix310-debug源,并且正在修改wix310-debug \ src \ ext \ BalExtension \ wixstdba \ location下的文件。这个位置下有一个wixstdba.vcxproj文件,我试图使用Visual Studio 2012打开。每当我尝试这样做时,我都会收到错误:
Unable to read the project file "wixstdba.vcxproj". The imported project "C:\tools\WixBuild.props" was not found.
我不知道该怎么做才能纠正这个问题。另外,根据引用的链接,我想我正在更新正确的文件,但如果不是这样,请告诉我。任何帮助都会很棒。提前致谢。
答案 0 :(得分:3)
在你的vcxproj中有这样的一行:
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
调试源并不是wix的源头。它包含所有wix源文件,但它不是真正可构建的。这个zip包含所有构建的pdbs,仅用于调试。
您想从wixtoolset's github下载wix源代码,以便构建wixstdba。但是,这是针对当前版本3.10.3而且可能有一些特定于版本的更改但是我没有看到任何使用此处针对wix 3.10.2构建的DLL的问题,因为引擎和引导程序应用程序接口应该保持不变。
但是,您应该能够使用仅 WixStdBA项目来构建所有这些。您将不得不复制wixstdba文件夹。编辑vcxproj并删除上面提到的导入行(它应该在底部附近)。
现在,将此项目添加到Visual Studio中的新解决方案或安装程序解决方案中。我们需要添加添加include和库目录。所有这些包括目录将在您的wix安装位置(默认C:\ Program Files(x86)\ WiX Toolset v3.10)在属性 - &gt; C / C ++ - &gt;一般 - &gt;其他包含目录添加您的wix SDK包含路径。如果您使用的是visual studio 2013,则可以使用完整路径,也可以使用&#34; $(WIX)\ SDK \ vs2013 \ inc&#34;。 $(WIX)应该引用WIX环境变量,该变量指向安装wix时添加的安装目录。如果您要在安装了wix的构建系统上构建,这应该是更好的选择,因为不同机器的位置可能不同。
现在添加库目录,我们转到属性 - &gt;链接器 - &gt;一般 - &gt;其他库目录并添加正确的lib路径。如果您使用的是visual studio 2013,则需要输入$(WIX)\ SDK \ vs2013 \ lib \ x86。最后,我们需要引用构建bootstrapper dll所需的库。在链接器下 - &gt;输入 - &gt;附加依赖项,添加&#34; dutil.lib; balutil.lib&#34;。我的其他依赖项有很多东西,我不记得它是否默认存在。无论如何,这里是我的附加依赖
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。没有编辑任何代码,这应该与包含wixstdba.dll的wix完全相同。
你可以尝试引用这个dll而不是wix包含一个(必须定义你自己的BootstrapperApplication而不是使用BootstrapperApplicationRef到其中一个wix)或者只是将这个dll放入你的wix位置bin。