在我的 Visual Studio 2017 解决方案中,我有一个 WiX 3 设置项目,该项目可以提取其他几个项目(库、可执行文件、资产、内容)的输出。在解决方案的目录结构下但没有作为项目添加到解决方案中,我有一个使用 webpack 编译一些浏览器扩展的项目。这个 webpack 项目输出到一个 artifacts 文件夹,其中包含每个浏览器的子目录。在每个子目录中都是编译后的扩展,文件名中包含版本号,例如:
- 人工制品
- 铬合金
- myextension-0.1.0.0.zip
- myextension-0.1.0.1.zip
- myextension-0.1.0.2.zip
- 铬合金
在编译时,最终我想将与版本号匹配的文件,即 myextension-\$(var.VERSION).zip 包含到 MSI 包中,以便在安装过程中将其放入应用程序文件夹中。即使我将版本号(即 myextension-0.1.0.2.zip)硬编码到组件中,我也会收到错误消息:
LGHT0001: The system cannot find the path specified. (Exception from HRESULT: 0x80070003)
我正在使用这样的定义获取目录:
<?define ChromeTargetDir=$(var.SolutionDir)Extensions\artifacts\chrome\?>
然后我的组件看起来像这样:
<Component Id="ChromeExt"
Location="local"
Guid="GUID_HERE">
<CreateFolder/>
<File Id="ChromeExtension"
Name="myextension-0.1.0.2.zip"
Source="$(var.ChromeTargetDir)myextension-0.1.0.2.zip"
KeyPath="yes"/>
</Component>
当我查看由蜡烛创建的 wixobj 时,我看到完整的正确路径被替换为它驻留在我的系统上的文件:
<field>C:\Users\me\source\repos\mysolution\Extensions\artifacts\chrome\myextension-0.1.0.2.zip</field>
所以我的问题是,在我的 WiX 项目中包含“任意”文件的正确方法是什么?