该CustomAction/@Value
属性在 Windows Installer 中的字符数限制为 255 个。因此,如果您的"VERY LONG STRING COMES HERE"
字符数超过 255 个,您将遇到 ICE 警告。 Binary/@Id
甚至更短,因为它们是 MSI 中的“标识符”,Windows Installer 对这些标识符的 72 个字符进行了标准化。
为什么 ICE03warning 消息在放置在元素下时会有所不同,这是一个谜,Product
因为 ICE 验证是针对最终 MSI 执行的。最终的 MSI 并不关心您如何组织 .wxs 源代码来构建 MSI。根据代码是在a 中Product
还是在 a 下,您是否有可能看到其他警告(不是 ICE03) Fragment
?
我之所以问Product
or之间的区别是因为编译器在编译一个节和一个节Fragment
时知道不同的东西。编译器知道某个部分将创建一个 .MSI 文件。另一方面,A可能正在创建 .MSI 文件、.MSM 文件或 .MSP 文件。除了 .MSI 文件之外,.MSM 和 .MSP 文件还有其他限制。Product
Fragment
Product
Fragment
例如,在构建 .MSM 文件时,所有标识符都以 .MSM 为后缀Module/@Id
。这为已经限制为 72 个字符的标识符增加了 37 个字符。进一步受到限制,Binary/@Id
因为它最终成为 .MSM 文件中流的名称,因此不能超过 60 个字符左右的内容。
无论如何,最终结果是在Fragment
编译器中将所有可能的规则应用于标识符。在所有情况下,这些规则可能比绝对必要的限制性稍强。但是,如果您注意所有警告/错误,那么您的代码应该在所有情况下都可以编译。