首页 > 解决方案 > 错误 CNDL0027:File/@Name 属性的值不是有效的 8.3 兼容名称

问题描述

当我使用 WIX 2.0 工具集运行 Windows 安装程序构建时,我收到以下错误。

错误 CNDL0027:File/@Name 属性的值无效。合法名称包含不超过 8 个字符,后跟不超过 3 个字符的可选扩展名。可以使用除以下之外的任何字符:\ ? | > < : / * " + , ; = [ ](空格)。

我怀疑这是由于旧版本的原因,因为我使用的是 windows 10 32 位环境。

那么我是否需要迁移代码并使用 WIX 3.0 版本来解决此错误?

问候, 普拉卡什

标签: wixwix3.5wix3wix3.7wix3.8

解决方案


WiX 2:我肯定会将任何 WiX 2.0 源迁移到 WiX 3 或 WiX 4。我只使用 WiX 3。我认为您可以通过节食您的 WiX 资源来解决这个特定问题 - 而不是深入研究实际的主题/问题。如果你问我,处理 8.3 文件名只是浪费时间。如果可以,请避免。对于必须在 Windows 中处理所有这些旧的遗留问题的开发人员,我感到很抱歉。

简化 WiX 标记:换句话说,我认为这个问题可以“删除而不是修复”。所以请多多包涵:我喜欢将我的 WiX 源文件精简到最基本的要求,并允许编译器 (candle.exe) 和链接器light.exe。这是可能的,因为很多字段只是“样板”或冗余,并且总是“一起改变”。它们也可能是自动生成的。

以下是关于如何在较新的 WiX 源中删除多余 XML 属性的简要说明:WIX 中 guid 的语法?(推荐阅读 - 应该很快)。

它的要点是你可以这样做:

<Component>
  <File Source="..\File.dll" />
</Component>

而不是旧的,更精细的:

<!-- Sample guid below, do not copy paste -->
<Component Id="File.dll" Guid="{12345678-1234-1234-1234-123456789ABC}">
  <File Id="File.dll" Name="File.dll" KeyPath="yes" Source="..\File.dll" />
</Component>

所有缺少的属性都将由 WiX 自动填充 - 使您更容易在编译器和链接器中实现由“更精简的源”获取的任何更改。如果需要一个属性——出于某种原因——编译器/链接器/文档会告诉你添加它。

解决方案?: 因此,请尝试删除整个Name attribute,看看这是否能解决您的问题。我也会尽可能多地删除其他字段(应该使未来的迁移更容易 - 也许)。


推荐阅读