Pergunta

Como posso comparar o conteúdo de dois (ou mais) arquivos .resx grandes? Com centenas de pares de nome/valor em cada arquivo, seria muito útil visualizar uma versão combinada. Estou especialmente interessado em pares de nome/valor que estão presentes na cultura neutra, mas também não são especificados em uma versão específica da cultura.

Foi útil?

Solução

Existe uma ótima ferramenta de freeware para editar arquivos resx, onde você pode ver vários idiomas de uma só vez e ver claramente o que está faltando ou extra - Editor de recursos Zeta

Outras dicas

Embora não seja uma ferramenta diff em si, Sincronizador resx Pode ajudá -lo aqui. Seu principal uso é atualizar os arquivos .resx localizados com novas entradas da linguagem neutra e remover qualquer itens excluídos.

Possivelmente, a saída gerada usando -a com o interruptor da linha de comando /v será o que você precisa. Caso contrário, ele vem com o código -fonte C# completo, para que você possa adaptá -lo para suas necessidades.

Para versões mais recentes do Visual Studio (2010+), agora existe uma extensão do Visual Studio chamada ResxManager (criado por Tomenglert) o que é incrível para isso.

Ele permite visualizar cada recurso em cada idioma lado a lado e destaca os recursos ausentes. (O exemplo abaixo é da página de download da extensão.)

Example From Extension Download Page

O uso de um diferencial simples nos arquivos XML pode ser totalmente inútil, se os elementos correspondentes não aparecerem na mesma ordem nos dois arquivos. Também tenho procurado uma ferramenta Diff específica de XML, até agora sem sucesso.

Enquanto isso, a solução alternativa que tenho usado é o seguinte:

  • Abra o .resx Arquivos no Visual Studio.
  • Selecionar tudo [Ctrl + UMA] e corte [Ctrl + X] (Isso pode demorar um pouco para arquivos grandes - seja paciente)
  • Colar [Ctrl + V] e salvar (isso recriará o .resx arquivos classificados por chaves)

Quando os dois arquivos são reordenados, o diferencial normal se torna muito mais fácil. Você pode localizar rapidamente as teclas que faltavam passando pelo diferencial agora.

Eu tentei várias ferramentas XML diff. Aqui está o resumo (o requisito de que me levou a avaliá -lo foi para diferenciar o Visual Studio gerado .resx Arquivos de recursos, que eu acho que é uma grande falha que a Microsoft fez - a ordem dos elementos é aleatória, e os formulários do Windows sempre reescrevem o ImageStream se você apenas alterar a localização de um botão e não fizer nada com o ImageList).

  1. Xmldiff
  2. Araxis
  3. Altova Diffdog
  4. XML bloco de notas
  5. Examxml
  6. Liquid XML Studio 2009 (Há um menu XML Diff, mas apenas uma versão de licença pode usá -lo. Portanto, não tenho chance de tentar)

Primeiro de tudo, todas as ferramentas diff diff não devem ser consideradas porque não sabem nada do XML, elas tratam arquivos de texto como apenas linhas de texto.

  1. Xmldiff é a primeira ferramenta que tentei. Parece que pode fazer, eu preciso, mas depois de baixar o código -fonte (Visual Studio 2003) e compilado com o Visual Studio 2005 (com uma atualização automática bem -sucedida), posso compilar o pequeno projeto sem problemas. Mas quando eu comparo dois reais .resx arquivos (1295 linhas) que travaram. A depuração do código não me dá uma pista sobre o que aconteceu porque não tenho código fonte do xmldiffpatch.dll XmlDiffPatch.View.dll.

    E o motivo que eu não tentei mais procurar nessa ferramenta foi o formato de saída ou o design da GUI. Ele gera um arquivo HTML com diferenças destacadas em uma janela hospedada no Internet Explorer. Para um grande arquivo XML, não é fácil de usar.

  2. XML Notepad possui um simples XML Diff. De acordo com a janela de saída, acho que ela usa internamente o componente do XMLDIFF. E a saída é a mesma que Xmldiff. Vou desinstalá -lo.

  3. Araxis é muito mais uma ferramenta de texto tradicional de texto, também pode comparar arquivos binários, arquivo de imagem, pasta e arquivos do Word. Eu gosto muito de qualquer tarefa diff exceto XML, porque não possui suporte de opções diff com reconhecimento de XML.

  4. A Altova Diffdog parece um produto comercial complicado e continha uma opção para ignorar a ordem do elemento, que é o principal recurso para mim.

    Mas depois de tentar com o mesmo real .resx Arquivo (1295 linhas, não grandes na minha experiência), descobri que a "ordem do elemento ignorada" simplesmente não funciona bem se os dois elementos estiverem localizados em lugares muito diferentes nos dois arquivos.

  5. O ExamXML parece um produto comercial, mas é um produto pequeno. Mas depois de tentar, achei a ferramenta mais ideal para minhas expectativas.

Há também um lado decepcionante: caiu quando eu pressionei F10 Para navegar para a próxima diferença. o ignorar a ordem dos elementos A opção funciona bem. Há um Pitty que a personalização do elemento ignorada não é muito flexível.

label1.Size
label1.Location
label1.Width

Quero ignorar todas as diferenças nesses elementos cujo nome contém ". A personalização não suporta expressões regulares.

De qualquer forma, usarei o ExamXML (com cuidadosa) para comparar arquivos XML.

ATUALIZAÇÃO 1: Os anos se passaram, agora eu uso o VS2017 e o Winform não mudou desde a minha resposta inicial dessa pergunta. Quando o trabalho precisa quebrar para pessoas diferentes, esse problema apareceu repetidamente, me entediando.

Na verdade, eu esqueci essa resposta, o Google me trouxe aqui.

Comecei uma nova sessão de investigação e tenho boas descobertas:https://www.codeproject.com/articles/37022/solving-the-sx-merge-problem Mostra que como o EaSly podemos classificar o arquivo resx por atributo de dados/@@name by Linq. É incrível. O código principal é apenas uma instrução composta por vários LINQ.

Então eu também descobri que o ResxResourCemanager, que é apontado por outra resposta neste tópico, o autor respondeu ao artigo do projeto de código acima e adiciona o recurso ao ResxResourCemanager, no ResxResourCemanager, você pode configurar o plug -in para classificar automaticamente o arquivo resx quando ( antes) você o salva na guia Configuração. Existe até uma opção de classificação que você pode escolher: CurrentCulture, Ordinal ou Ignorecase etc.

Infelizmente, a solução de projeto de código e a solução ResxResourCemanager produzem resultado diferente, a fonte está disponível, descobri que a solução de projeto de código tratar o valor do atributo ">>" como texto normal para que os widgets semanticamente relacionados sejam separados. Isso pode ser facilmente corrigido adicionando um trimstart ('>') ao LINQ.

No entanto, depois de corrigir isso, a ferramenta ainda produz resultados diferentes. A culinária é o LINQ por padrão usando o CurrentCulture para classificar a string, e eu ignoro totalmente a opção de classificação do Revelant no ResxResourceManager, para esse problema, acho que a melhor opção de classificação é "ordinal". Depois de adicionar a opção de classificação à solução do projeto de código e definir a mesma opção de classificação no ResxResourCemanager, finalmente eles produzem exatamente o mesmo resultado!

Embora o ResxResourCemanager seja ótimo para gerenciar centralmente o recurso e corrigir o problema do pedido do elemento RESX, a ferramenta de projeto de código ainda é inestimável para mim, pois é independente para que possa ser usado em casos mais amplos; Além disso, o código é muito conciso e elegante.

Eu acrescentaria outra nota no final da minha atualização, uso o Tortoise Git, uso o Araxis para comparar versões diferentes, é quase sem sentido comparar duas revisões de arquivo RESX; no entanto, o suporte ARAXIS para personalizar um filtro para transformar o arquivo de entrada Antes do mecanismo de comparação, vendo -o. Para comparar, Araxis chama o filtro pelo seguinte comando: Sortresx.exe -f c: users admini ~ 1 appdata local temp mrg.8032.3.Resx C: Users admini ~ 1 appdata local Temp mrg.8032.2 c: users admini ~ 1 appdata local temp mrg.8032.4

-f significa foward, o primeiro nome do arquivo é o arquivo de entrada, o segundo nome do arquivo é o arquivo de saída que o filtro deve ser escrito, o terceiro pode ser ignorado com segurança. Depois de fazer uma pequena alteração no código do projeto de código, agora posso compilar um programa de filtro, configurá-lo no Araxis e fazer uma comparação razoável de revisão RESX, mesmo em arquivos RESX antigos e bagunçados.

Você pode codificar algo usando XML Diff. Ver Usando a ferramenta XML Diff e Patch em seus aplicativos.

Você pode usar uma ferramenta como o Diff do TortoisesVN (se estiver usando o Windows). Basta selecionar os dois arquivos, clique com o botão direito do mouse e selecione "Diff" no submenu da tartarugavn.

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