문제

두 개 이상의 큰 .resx 파일 내용을 어떻게 비교할 수 있나요?각 파일에 수백 개의 이름/값 쌍이 있으므로 결합된 버전을 보는 것이 매우 유용합니다.특히 중립 문화권에는 있지만 문화권별 버전에는 지정되지 않은 이름/값 쌍에 관심이 있습니다.

도움이 되었습니까?

해결책

한 번에 여러 언어를보고 누락 된 내용을 명확하게 볼 수있는 Resx 파일을 편집 할 수있는 훌륭한 프리웨어 도구가 있습니다. Zeta 리소스 편집기

다른 팁

Diff 도구 그 자체는 아니지만 Resx Synchronizer 여기서 당신을 도울 수 있습니다. 주된 용도는 중립 언어의 새로운 항목으로 로컬화 된 .resx 파일을 업데이트하고 삭제 된 항목을 제거하는 것입니다.

아마도 /V 명령 줄 스위치와 함께 사용하여 생성 된 출력은 필요한 것입니다. 그렇지 않으면 전체 C# 소스 코드가 제공되므로 필요에 맞게 조정할 수 있습니다.

새로운 버전의 Visual Studio (2010+)의 경우 이제 Visual Studio Extension이 있습니다. RESXManager (만들어졌습니다 Tomenglert) 이것에 대해 놀랍습니다.

각 언어에서 각 리소스를 나란히 볼 수 있으며 누락 된 리소스를 강조 표시 할 수 있습니다. (아래 예제는 확장자 다운로드 페이지입니다.)

Example From Extension Download Page

일치 요소가 두 파일에서 동일한 순서로 나타나지 않으면 XML 파일에서 간단한 차이를 사용하는 것은 완전히 쓸모가 없을 수 있습니다. 나는 지금까지 성공하지 못한 XML 특이 적 Diff 도구도 찾고 있습니다.

그 동안 내가 사용하고있는 해결 방법은 다음과 같습니다.

  • 열기 .resx Visual Studio의 파일.
  • 모든 선택 [Ctrl 키 + ] 그리고 자른 [Ctrl 키 + 엑스] (큰 파일에 시간이 걸릴 수 있습니다 - 참을성이 있습니다)
  • 반죽 [Ctrl 키 + V] 그리고 저장 (이것은 다시 생성됩니다 .resx 키로 정렬 된 파일)

따라서 두 파일이 모두 재 분류되면 정상적인 차이가 훨씬 쉬워집니다. 이제 Diff를 훑어 보면 누락 된 키를 빠르게 찾을 수 있습니다.

여러 XML diff 도구를 사용해 보았습니다.요약은 다음과 같습니다. 평가하게 된 요구 사항은 생성된 Visual Studio와 비교하는 것이었습니다. .resx 리소스 파일은 Microsoft가 만든 큰 결점이라고 생각합니다. 요소의 순서는 무작위이며 Windows Forms는 버튼 위치만 변경하고 imageList에 아무 작업도 수행하지 않는 경우 항상 ImageStream을 다시 작성합니다.

  1. XmlDiff
  2. 아락시스
  3. Altova Diff개
  4. XML 메모장
  5. ExamXML
  6. 액체 XML 스튜디오 2009 (XML diff 메뉴가 있지만 라이센스 버전만 사용할 수 있습니다.그래서 시도해 볼 기회가 없습니다)

우선, 모든 일반적인 diff 도구는 XML에 대해 아무것도 모르기 때문에 고려해서는 안 됩니다. 그들은 텍스트 파일을 단지 텍스트 줄로 취급합니다.

  1. XmlDiff는 제가 시도한 첫 번째 도구입니다.내가 원하는 대로 할 수 있는 것 같지만 소스 코드를 다운로드한 후(비주얼 스튜디오 2003) Visual Studio 2005로 컴파일하고(자동 업그레이드 성공) 소규모 프로젝트를 원활하게 컴파일할 수 있습니다.하지만 실제 두 사람을 비교해 보면 .resx 파일(1295줄)이 충돌했습니다.코드를 디버깅해도 무슨 일이 일어났는지 알 수 없습니다. 소스 코드가 없기 때문입니다. xmldiffpatch.dll XmlDiffPatch.View.dll.

    그리고 제가 이 도구에 대해 더 자세히 알아보려고 하지 않은 이유는 출력 형식 또는 GUI 디자인 때문이었습니다.Internet Explorer에서 호스팅하는 창에 차이점이 강조 표시된 HTML 파일을 출력합니다.대용량 XML 파일 비교의 경우 사용하기가 쉽지 않습니다.

  2. XML 메모장에는 간단한 내장 XML 차이점이 있습니다.출력 창에 따르면 내부적으로 XmlDiff의 구성 요소를 사용하는 것 같습니다.출력은 XmlDiff와 동일합니다.제거하겠습니다.

  3. Araxis는 훨씬 더 전통적인 텍스트 비교 도구이며 바이너리 파일, 이미지 파일, 폴더 및 단어 파일을 비교할 수도 있습니다.나는 어떤 diff 작업에도 그것을 매우 좋아합니다 제외하고 XML은 XML 인식 diff 옵션을 지원하지 않기 때문입니다.

  4. Altova DiffDog는 복잡한 상업용 제품처럼 보이며 요소 순서를 무시하는 옵션이 포함되어 있는데 이것이 나에게 핵심 기능입니다.

    하지만 같은 실제 제품으로 시도해본 결과 .resx 파일(1295줄, 내 경험상 큰 줄은 아님)에서 두 요소가 두 파일의 매우 다른 위치에 있는 경우 "요소 순서 무시"가 제대로 작동하지 않는다는 것을 발견했습니다.

  5. ExamXML은 상용 제품처럼 보이지만 작은 제품입니다.하지만 사용해 본 후에는 이것이 현재 내 기대에 가장 이상적인 도구라는 것을 알았습니다.

실망스러운 측면도 있습니다.내가 눌렀을 때 충돌이 났어 F10 다음 차이점으로 이동합니다.그만큼 요소 순서 무시 옵션이 잘 작동합니다.무시된 요소의 사용자 정의가 그다지 유연하지 않다는 점이 한 가지 아쉽습니다.

label1.Size
label1.Location
label1.Width

이름에 ".Size", ".Location" 또는 ".Width"가 포함된 요소의 모든 차이점을 무시하고 싶지만 동시에 그러한 조건을 정의하는 것은 불가능합니다.사용자 정의는 정규식을 지원하지 않습니다.

어쨌든, 저는 ExamXML을 (신중하게) 사용하여 XML 파일을 비교할 것입니다.

업데이트 1:몇 년이 지났고 이제 VS2017을 사용하고 있으며 이 질문에 대한 초기 답변 이후 winform은 변경되지 않았습니다.작업을 여러 사람에게 나누어야 할 때 이 문제가 계속해서 튀어 나와 지루해졌습니다.

사실 저는 이 답변을 잊어버렸습니다. Google이 저를 여기로 데려왔습니다.

새로운 조사 세션을 시작했고 몇 가지 좋은 결과를 얻었습니다.https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem LINQ를 사용하여 data/@name 속성을 기준으로 resx 파일을 얼마나 쉽게 정렬할 수 있는지 보여줍니다.놀랍다.핵심 코드는 여러 개의 LINQ로 구성된 하나의 명령문입니다.

그런 다음 이 스레드의 다른 답변에서 지적한 ResXResourceManager를 발견했으며 작성자는 위의 코드 프로젝트 기사에 응답하고 ResXResourceManager에 기능을 추가했습니다. ResxResourceManager에서는 다음과 같은 경우 resx 파일을 자동으로 정렬하도록 플러그인을 구성할 수 있습니다. 이전) 구성 탭에 저장합니다.선택할 수 있는 정렬 옵션도 있습니다.CurrentCulture, Ordinal 또는 IgnoreCase 등

불행하게도 코드 프로젝트 솔루션과 ResXResourceManager 솔루션은 다른 결과를 생성하고 소스를 사용할 수 있습니다. 코드 프로젝트 솔루션은 ">>" 속성 값을 일반 텍스트로 처리하므로 의미상 관련된 위젯이 분리된다는 것을 알았습니다.이 문제는 LINQ에 TrimStart('>')를 추가하면 쉽게 해결할 수 있습니다.

그러나 이 문제를 해결한 후에도 두 도구는 여전히 다른 결과를 생성합니다.범인은 기본적으로 CurrentCulture를 사용하여 문자열을 정렬하는 LINQ이며, resXResourceManager의 관련 정렬 옵션을 완전히 무시합니다. 이 문제에 대해 가장 좋은 정렬 옵션은 "Ordinal"이라고 생각합니다.코드 프로젝트 솔루션에 정렬 옵션을 추가하고 ResXResourceManager에서 동일한 정렬 옵션을 설정하면 마침내 완전히 동일한 결과가 생성됩니다!

resxResourceManager는 리소스를 중앙에서 관리하고 resx 요소 순서 문제를 해결하는 데 훌륭하지만, 코드 프로젝트 도구는 독립형이므로 더 광범위한 경우에 사용할 수 있기 때문에 여전히 나에게 매우 중요합니다.게다가 코드는 매우 간결하고 우아합니다.

업데이트가 끝나면 또 다른 메모를 추가하고 거북이 git을 사용하고 Araxis를 사용하여 다른 버전을 비교합니다. 두 개의 resx 파일 개정판을 비교하는 것은 거의 의미가 없습니다. 그러나 Araxis는 필터를 사용자 정의하여 입력 파일을 변환하도록 지원합니다. 비교 엔진이 그것을 보기 전에.비교를 위해 Araxis는 다음 명령으로 필터를 호출합니다.sortresx.exe -f C:\Users\ADMINI~1\AppData\Local emp\mrg.8032.3.resx C:\Users\ADMINI~1\AppData\Local emp\mrg.8032.2 C:\Users\ADMINI~ 1\AppData\Local emp\mrg.8032.4

-f는 전달을 의미하며, 첫 번째 파일 이름은 입력 파일이고, 두 번째 파일 이름은 필터가 작성해야 하는 출력 파일이며, 세 번째 파일 이름은 무시해도 됩니다.코드 프로젝트 코드를 약간 변경한 후 이제 필터 프로그램을 컴파일하고 Araxis에서 구성할 수 있으며 오래되고 엉망인 resx 파일에서도 합리적인 resx 개정 비교를 수행할 수 있습니다.

XML Diff를 사용하여 무언가를 코딩 할 수 있습니다. 보다 응용 프로그램에서 XML Diff 및 패치 도구 사용.

TortoisesVN의 Diff (Windows를 사용하는 경우)와 같은 도구를 사용할 수 있습니다. 두 파일을 모두 선택하고 마우스 오른쪽 버튼을 클릭 한 다음 TortoisesVN 하위 메뉴에서 "Diff"를 선택하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top