Recursos em arquivo de projeto no VS2008 fica “reutilizados” criativamente pelo designer forma, possível evitar?

StackOverflow https://stackoverflow.com/questions/435466

Pergunta

Nós temos alguns arquivos de recursos gerados automaticamente em nosso projeto no Visual Studio 2008, com algumas versões localizadas, e em uma dessas versões localizadas, há uma corda que neste caso está vazio.

Mais explícito. Temos um arquivo de recursos do núcleo, com lotes de recursos de cadeia. Temos, então, 4 outras versões localizadas do thisfile, e em um desses outros arquivos localizados, uma das cordas é dado um valor vazio.

O problema agora é que o designer de formulário é bastante feliz por ter encontrado um recurso para uma string, e aparentemente vai parar em nada para a reutilização deste recurso para quaisquer cadeias vazias que irá atribuir uma propriedade no código do designer gerado para um formulário .

Por exemplo, se por algum motivo uma propriedade em um controle não for especificado com um valor padrão (por isso vai ser serializado para o código, mesmo se ela estiver vazia), então ele irá referenciar o nosso recurso em vez de escrever a seqüência vazia literal no código C #.

O problema é que ele faz referência as versões localizadas, e estes não são compilados para código.

Aqui está um exemplo de código abreviado:

this.rpAllFields.KeyTip = 
  global::namespaces.SystemMessagesResources_sv_SE.
    dash_red_shift_info_description;

Neste caso, o dash_red_shift_info_description não tem um valor para a localidade sv-SE, então o designer, quando vê uma cadeia vazia no código, vai tentar link para esse recurso. Mas o SystemMessagesResources_sv_SE não é uma classe existente, mas aparentemente um nome de classe gerado para a versão localizada sueco do arquivo de recurso SystemMessagesResources, que é compilado para uma classe.

Isto é possível evitar? Nós estamos ficando um pouco cansado da pesquisa / substitua cada vez mudança que algo nos arquivos de formulário, e temos certeza que há um-meu-boneheaded-testa tapa coisa que fizemos que fazer isso acontecer, mas estamos aparentemente não é capaz de encontrar a causa deste nós mesmos.

O código acima, se nós removemos o recurso, leia assim:

this.rpAllFields.KeyTip = "";
Foi útil?

Solução

Você pode tentar criar um EMPTY_STRING recurso de cadeia, definida como "" para cada localidade. Se você faz o primeiro recurso, o designer de formulário (espero) sempre escolher aquele como o valor para polvilhar através de suas formas. Desta forma, pelo menos você estará usando uma seqüência designada para o efeito.

Outras dicas

Se o problema está sendo causado por uma cadeia vazia no arquivo de recurso, o que seria o efeito de torná-lo um espaço. Assim em vez de "" o arquivo de recurso contém "". Eu não sei se essa é a melhor solução, mas eu estaria interessado em saber se ele pára o designer de usar esse recurso como uma string vazia padrão. No entanto, não sabendo como ele é usado, eu não sei o que o impacto de ter um valor que deve ser indefinido ser definida como um espaço ...

Quanto você precisa de um recurso cujo valor é uma string vazia? Posso imaginar alguns cenários multilíngües onde alguns chave de recurso deve corresponder a em branco em algum dos idiomas suportados (se você estiver usando concatenação para alguns elementos de interface do usuário), sim.

Mas se meu cenário não era algo assim, gostaria apenas de desfazer-se da entrada de recursos com a cadeia vazia. Eu tinha acabado de dizer: "O que independente UI texto traduz em branco, afinal?".

Se eu realmente necessário o recurso a ser em branco no alguns casos, (onde ele representa um artigo em um idioma e onde existe nenhuma palavra equivalente em outra), eu iria tentar ver se eu poderia produzir o mesmo efeito de alguma outra forma.

arquivo de recursos gerados e exemplo de código seria bom.

E o que você está dizendo é: você tem uma seqüência de definição literal vazio no espaço de nomes (o primeiro encontrado), mas que está a causar algum problema? ele não vai estar vazio em todos os momentos? Quando você compilar o código- ele faz coisas peculiares como este para economizar espaço. Corri para um problema semelhante ao gerar arquivos XAML com codebehind para on-the-fly compilação automatizada de arquivos de montagem: O compilador é inteligente o suficiente para saber 'que não faz a diferença, mas para nós o fez porque seria renomear os literais (que foram utilizados noutro local).

Para contornar este que usamos chamado tipos para essas primitivas em nosso namespace e fez que um global. O que eu vejo aqui é que seu namespace global está preenchendo o blanks- você pode querer ter um 'abaixo', que avalia todas as cadeias nulas.

Eu não trabalhei com isso em mais de um ano então me perdoe se minha formulação é pobre, mas o que eu quero dizer é: pense XML. Você precisa usar de forma explícita namespace nas propriedades ou atribuir-lhes diminuir (como propriedade anexada em XAML).

Espero que isso ajude (e faz sentido)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top