ICE69
O ICE69 verifica se todas as subcadeias de caracteres do formulário [$componentkey] em uma cadeia de caracteres formatada não fazem referência cruzada a componentes. Uma referência entre componentes ocorre quando a propriedade [$componentkey] de uma cadeia de caracteres formatada se refere a um componente diferente do componente armazenado na coluna Component_ de suas tabelas.
Os problemas com a referência entre componentes surgem da maneira como cadeias de caracteres formatadas são avaliadas. Se o componente referenciado com a propriedade [$componentkey] já estiver instalado e não estiver sendo alterado durante a instalação atual (por exemplo, sendo reinstalado, movido para a origem e assim por diante), a expressão [$componentkey] será avaliada como nula, pois o estado de ação do componente em [$componentkey] é nulo. Problemas semelhantes podem ocorrer durante operações de atualização e reparo.
Resultado
ICE69 retornará um erro se uma subcadeia de caracteres [$componentkey] dentro de um formatado cadeia de caracteres faz referência cruzada a um componente em outro recurso. ICE69 retorna um aviso se uma subcadeia de caracteres [$componentkey] dentro de uma cadeia de caracteres formatada faz referência cruzada a um componente no mesmo recurso. (A tabela FeatureComponents é usada para determinar esse mapeamento. Ele deve ser mapeado para o mesmo recurso para o aviso. Referenciar componentes em recursos pai ou referenciar componentes em recursos filho é considerado um erro.)
O ICE69 relatará um erro se a subcadeia de caracteres [#FileKey] dentro de um formatado cadeia de caracteres fizer referência a um arquivo que não é especificado na tabela arquivo como pertencente ao mesmo componente.
Exemplo
O ICE69 relata o seguinte para os exemplos mostrados.
WARNING: "Mismatched component reference. Entry 'Test' of the Shortcut table belongs to component 'QuickTest'. However, the formatted string in column 'Argument' references component 'Test'. Components are in the same feature."
ERROR: "Mismatched component reference. Entry 'Shortcut2' of the Shortcut table belongs to component 'QuickTest'. However, the formatted string in column 'Argument' references component 'Test2'. Components are not in the same feature."
Para corrigir esse erro, não faça referência cruzada a componentes. Altere o [$componentkey] para corresponder ao componente do atalho.
Atalho | Componente_ | Argumento |
---|---|---|
Teste | QuickTest | -v [$Test] |
Atalho2 | QuickTest | [$Test 2] |
As tabelas verbo e extension são casos especiais em que a tabela Verbo faz referência a uma extensão que pertence a um componente. Uma Extensão, no entanto, pode pertencer a vários componentes porque a chave primária da tabela de extensão é composta pelas colunas Extensão e Component_. Você pode logicamente ter a situação a seguir.
Extensão | Verbo_ | Argumento |
---|---|---|
Tst | abrir | -v [$comp 1][$comp 2] |
da Tabela de Extensão (parcial)
Extensão | Componente_ |
---|---|
Tst | comp1 |
Tst | comp2 |
da tabela FeatureComponents
Característica_ | Componente_ |
---|---|
Feature1 | QuickTest |
Feature1 | Teste |
Feature2 | Test2 |
Nesse caso, você deve garantir que pelo menos uma das propriedades [$componentkey] seja avaliada como um valor não nulo. No entanto, cada propriedade [$componentkey] na coluna Argument da tabela Verbo ([$comp 1] e [$comp 2] no exemplo acima) deve referenciar um possível componente incluído na extensão associada ao verbo. Uma referência como [$comp 3] resultaria em um aviso do ICE69.
A tabela AppId tem uma situação semelhante à tabela Verbo. Ele usa a tabela Class para sua referência de componente. Nesse caso, a tabela AppId é validada da mesma forma que a validação de Verb-Extension (agora AppId-Class).
A coluna Argumento da tabela Classe é validada como o de Atalho de, do Registro e tabelas semelhantes.
Tabela usada durante a execução (somente se encontrada)
Tópicos relacionados