我创建了一个WixLib项目和解决方案,其中包含一个片段,该片段指向我想要包含在多个项目中的一组DLLS。
但是,当我从其他解决方案中引用此wixlib时,dll所在目录的预处理器值随wixlib一起提供。我想覆盖此值或更新它。
我的Wixlib看起来像这样:
<Fragment>
<ComponentGroup Id="CG.FarPointComponents">
<Component Id="cmpBBC3777DD58F5E2AE4704D66EF87C105" Directory="INSTALLDIR"
Guid="6CB60019-D122-41F6-8009-C41B07BCE5C3">
<File Id="filC126C8C2BFE502E045C17A812B8A907D" KeyPath="yes"
Source="$(var.FarPointDir)\FarPoint.CalcEngine.dll" />
</Component>
</ComponentGroup>
</Fragment>
我想在另一个解决方案中为var.FarPointDir指定另一个目录我该怎么办?我正在使用wix 3.6
答案 0 :(得分:3)
一些选择:
创建binary .wixlib
- 使用-bf
切换到lit.exe
将文件嵌入.wixlib。这样,.wixlib完全是自包含的,虽然它会更大。
使用bind paths
- 绑定路径与搜索路径类似,但要查找需要在程序包中结束的文件。如果您设置File/@Source
亲戚(不要以X:\
或\
开头),则会搜索未命名的绑定路径。您使用light.exe
命令行开关指定-bp
的绑定路径。或者,您可以使用命名绑定路径,它们如下所示:
<File Source='!(bindpath.Name)\FarPoint.CalcEngine.dll' />
同样,-bp
开关可以创建命名绑定路径。
使用bind variable
- 而不是使用预处理器变量(在“编译”之前解析),使用在“绑定时”解析的变量。您可以引用绑定变量,如:!(wix.Var)
。可以在light.exe
的命令行上设置,也可以使用WixVariable
元素在代码中设置。
我使用选项#1将.wixlibs分发给其他人(自包含),如果只是我的东西,则选项#2(二进制.wixlibs会使构建速度变慢一些)。