我创建了一个 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
最佳答案
几个选项:
创建一个
binary .wixlib
- 使用-bf
切换到lit.exe
将文件嵌入到 .wixlib .这样 .wixlib 就完全独立了,尽管它会更大。使用
绑定(bind)路径
- 绑定(bind)路径类似于搜索路径,但用于查找需要在包中结束的文件。如果您使File/@Source
相对(不要以X:\
或只是\
开头),那么将搜索未命名的绑定(bind)路径.您可以使用-bp
命令行开关指定light.exe
的绑定(bind)路径。或者你可以使用命名绑定(bind)路径,它们看起来像这样:<File Source='!(bindpath.Name)\FarPoint.CalcEngine.dll' />
同样,
-bp
开关可以创建命名绑定(bind)路径。使用
绑定(bind)变量
- 不使用预处理器变量(在“编译”之前解析),而是使用在“绑定(bind)时”解析的变量。您可以引用绑定(bind)变量,例如:!(wix.Var)
。可以在命令行上将其设置为light.exe
,或者您可以使用WixVariable
元素在代码中进行设置。
我使用选项 #1 将 .wixlibs 分发给其他人(自包含),如果它只是我的东西,则使用选项 #2(二进制 .wixlibs 会稍微减慢构建速度)。
关于wix - 尝试更改引用解决方案中的 WixLib 预处理器变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371016/