我正在尝试安装一些我们的几个应用程序通用的字体,所以看起来将它们放在一个共享合并模块中是可行的方法。但我无法获得精确的Wix语法。这是我的合并模块配置文件中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Module Id="TS3DFontsMerge" Language="1033" Version="1.0.0.0">
<Package Id="F6029400-FD05-4213-A0B2-1755387595BF" Manufacturer="Tech Soft 3D" InstallerVersion="200" />
<DirectoryRef Id="FontsFolder">
<Component Id="TechSoft3DFonts" Guid="0B9C43FC-3835-42DE-80F6-1DB2A912BEE5">
<File Id="ts3d.ttf" Source="..\..\..\samples\fonts\ts3d.ttf" TrueType="yes" />
<File Id="MyriadCAD.otf" Source="..\..\..\samples\fonts\MyriadCAD.otf" TrueType="yes" />
</Component>
</DirectoryRef>
</Module>
</Wix>
我正在关注here描述的模型。在这种情况下,我收到此错误:
ts3d_fonts_merge.wxs(5,0):错误CNDL0205:具有Id'FontsFolder'的目录不是有效的根目录。每个产品或模块可能只有一个根目录,其Id属性值必须为“TARGETDIR”,其Name属性值必须为“SourceDir”。 ts3d_fonts_merge.wxs(5,0):错误CNDL0025:Directory元素需要Name属性,因为没有父Directory元素。
所以我的问题是:如何让Wix识别合并模块中的FontsFolder预定义ID?我正在使用WixToolset v3.10。
以下是我尝试的其他一些事情......
当我直接在主产品安装程序中使用它时,我不得不使用&lt; directory&gt;标记而不是&lt; DirectoryRef&gt;,这是有效的。但是当我在合并模块中使用它时,我收到此错误消息:
ts3d_fonts_merge.wxs(5,0):错误LGHT0094:未解决对“模块:TS3DFontsMerge”部分中“目录:FontsFolder”的引用。
如果我将FontsFolder包装在TARGETDIR标记中(如第一个错误所示),我会收到警告,说明字体安装在错误的位置。以下是错误消息:
light.exe(0,0):警告LGHT1076:ICE07:'ts3d.ttf.F6029400_FD05_4213_A0B2_1755387595BF'是一个字体,必须安装到FontsFolder。当前安装目录:'FontsFolder.F6029400_FD05_4213_A0B2_1755387595BF' light.exe(0,0):警告LGHT1076:ICE07:'MyriadCAD.otf.F6029400_FD05_4213_A0B2_1755387595BF'是一个字体,必须安装到FontsFolder。当前安装目录:'FontsFolder.F6029400_FD05_4213_A0B2_1755387595BF'
有什么想法吗?
答案 0 :(得分:2)
一些快速建议:
<Directory>
而不是<DirectoryRef>
- https://msdn.microsoft.com/en-us/library/aa368605(v=vs.85).aspx 所以最后,你应该接近:
?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Module Id="TS3DFontsMerge" Language="1033" Version="1.0.0.0">
<Package Id="F6029400-FD05-4213-A0B2-1755387595BF" Manufacturer="Tech Soft 3D" InstallerVersion="200" />
<Directory Id="TARGETDIR">
<Directory Id="FontsFolder">
<Component Id="TechSoft3DFonts" Guid="0B9C43FC-3835-42DE-80F6-1DB2A912BEE5">
<File Id="ts3d.ttf" Source="..\..\..\samples\fonts\ts3d.ttf" TrueType="yes" />
</Component>
<Component Id="TechSoft3DFonts2" Guid="0B9C43FC-3735-42DE-80F6-1DB2A912BEE5">
<File Id="MyriadCAD.otf" Source="..\..\..\samples\fonts\MyriadCAD.otf" TrueType="yes" />
</Component>
</Directory>
</Directory>
</Module>
</Wix>
答案 1 :(得分:1)
我遇到了同样的问题,但我没有从上一个答案中得到完整的解决方案。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product (...)>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="FontsFolder" />
</Directory>
<DirectoryRef Id="FontsFolder">
<Component Id="MyFont" Guid="0B9C43FC-3735-42DE-80F6-1DB2A912BEE5">
<File Id="MyFont.otf" Source="Fonts\MyFont.otf" TrueType="yes" />
</Component>
<Component Id="MySecondFont" Guid="0B9C43FC-3835-42DE-80F6-1DB2A912BEE5">
<File Id="MySecondFont.otf" Source="Fonts\MySecondFont.otf" TrueType="yes" />
</Component>
</DirectoryRef>
<Feature Id="FontsInstallation" Title="Install and Register Company Fonts" Level="1">
<ComponentRef Id="MyFont"/>
<ComponentRef Id="MySecondFont"/>
</Feature>
</Product>
</Wix>
该字体在Paint或Word中不可见,但我可以使用XAML / WPF代码以原始名称引用它(因为它们将安装在Windows中):
<TextBlock FontFamily="My First Font" FontSize="30">Sample text</TextBlock>
<TextBlock FontFamily="My Second Font" FontSize="30">Sample text</TextBlock>
字体文件设置为构建操作 内容和复制到输出目录 DoNotCopy 。