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