programing

컴파일을 비교합니다.NET 어셈블리?

yellowcard 2023. 5. 10. 20:46
반응형

컴파일을 비교합니다.NET 어셈블리?

컴파일과 비교할 만한 좋은 프로그램이 있습니까?NET 어셈블리?

예를 들어 HelloWorld.dll(1.0.0)과 HelloWorld.dll(2.0.0)이 있는데 차이점을 비교하고 싶은데 어떻게 해야 합니까?

제가 쓸 수 있다는 걸 알아요.NET Reflector 및 Assembly Diff 플러그인을 사용합니다.이것을 할 수 있는 다른 좋은 도구가 있습니까?

비교 방법.NET 어셈블리 제안

광고:

무료:

  • Just Assembly(API에서 차이만 표시)
  • 비트 차이(동일)
  • 리플렉터 Diff 추가 기능(이미 검색했지만 더 이상 사용할 수 없음)

Beyond Compare(상업용)와 같은 기존 비교 도구는 특수 구성을 통해 이를 수행할 수 있습니다.Beyond Compare를 위한 방법은 다음과 같습니다.

  • →로 이동
  • 를 클릭하고 "텍스트 형식"을 선택한 다음
  • EXE DLL)을 를 ""(": EXE " DLL")로 합니다.*.exe또는*.dll
  • 탭을 클릭하고 "외부 프로그램(유니코드 파일 이름)"을 선택합니다.
  • "로딩 중"에서 다음에 대한 경로를 지정합니다.ildasm 가추를 합니다. %s /OUT:%t /NOBAR 다음과 같습니다.)C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\ildasm.exe %s /OUT:%t /NOBAR)
  • 꼭 확인하세요.
  • 를 클릭한 다음
  • 를 다시 하고 두 개의 BC를 .exe비교할 파일, 그것은 분해되어야 합니다.ilasm지금은 자동으로

이 새 형식에 구문 강조 표시를 추가할 수도 있습니다.공유할 수 있도록 구문 파일을 보낼 계획입니다.

두 가지 방법.

고전적인 도구로 ILDASM과 Diff를 할 수 있습니다.

또는 NDepends를 사용할 수도 있습니다. 이 기능에는 비용이 듭니다.

[조각과 C# 번짐..]

버전이 동일한 동일한 DLL의 두 리비전을 비교하면 됩니다(작은 핫픽스를 구현하고 운영 환경에 DLL을 배포해야 했지만 다른 변경 사항이 코드에 유출되지 않았는지 확인하고 싶었습니다).이상적으로는 어셈블리 Diff 추가 기능을 통해 차이점을 표시하고 싶지만 작동하지 않습니다(DLL을 자체와 비교하는 것으로 간주됨).그래서 제가 한 일은 다음과 같습니다.

  • 분해된 원본 파일을 보관할 두 개의 폴더를 만들었습니다.
  • 상황에 맞는 메뉴에서 리플렉터내보내기 옵션을 사용하여 이전 단계에서 만든 폴더의 각 DLL에서 원본 파일을 생성했습니다.
  • 무료 DiffMerge 도구를 사용하여 두 디렉터리를 비교했습니다. 도구는 수정된 파일과 차이점을 보여주었습니다.

약간 흐리지만 효과가 있는 것 같습니다.그래도 어셈블리 디프 애드인이 작동했으면 좋겠습니다.

업데이트: Assembly Diff 추가 기능의 최신 버전은 동일한 어셈블리의 두 버전을 비교하는 문제를 해결하기 위한 것입니다.한번 해보라구요.

NDepend 도구는 컴파일된 기능을 비교할 수 있는 많은 기능을 제공합니다.NET 어셈블리.

NDepend Start 페이지에서 먼저 다음을 클릭합니다.코드 기반의 두 버전을 비교합니다.이렇게 하면 이전 버전과 최신 버전의 어셈블리를 제공할 수 있습니다.

엔디펜드 코드 베이스의 두 버전 비교

그런 다음 NDepend가 이전 어셈블리와 최신 어셈블리를 모두 분석한 후 Search by Change 패널을 사용할 수 있습니다.어셈블리 코드 diff 탐색 전용입니다.주의:

  • 소스 코드를 사용할 수 있는 경우 요소를 마우스 오른쪽 단추로 클릭하고 Diff Source를 클릭합니다.NDepend 옵션에서 코드 차이 도구(Visual Studio, Beyond Compare...)를 NDepend에 연결할 수 있습니다.
  • 소스 코드가 없고 원시 어셈블리만 있는 경우 이전 버전과 새 버전을 ILSpy로 분해 비교 옵션이 있습니다.ILSpy v7.0 이상 버전이 지원됩니다.이 메뉴는 어셈블리, 네임스페이스, 유형 및 메서드 수준에서 작동하며 C# 또는 IL로 압축 해제할 수 있습니다.

비교하다.

스크린샷에서도 Diff를 찾아보기 위해 CQLinq 코드 쿼리가 생성됩니다.

from m in Application.Methods 
where m.CodeWasChanged() 
select new { m, m.NbLinesOfCode }

다른 많은 기본 diff 쿼리와 규칙이 기본적으로 제안되어 검색할 수 있습니다.NET 코드는 스마트한 방식으로 다릅니다.

고지 사항:는 그 도구의 개발자 중 한 입니다.

또 다른 옵션은 Microsoft의 LibCheck입니다.

공개 API diff를 얻기 위한 꽤 오래된 콘솔 도구입니다.디버깅 및 대상 변경 없이는 실행할 수 없습니다.하지만, 그것은 저에게 매우 명확한 출력을 주었고 저는 나중에 그것을 사용할 것입니다.

여기 스크린샷이 있는 기사가 있습니다.

여기 잘 작동하는 기본적인 접근 방식을 벗어난 생각이 있습니다.

  1. dnSpy, dotPeek 또는 JustDecompile을 사용하여 이전 어셈블리와 새 어셈블리를 프로젝트에 덤프합니다.

  2. 새 Gitrepo를 만들고 이전 어셈블리 코드를 먼저 커밋합니다.

  3. 로컬 repo 폴더에서 ".git"을 제외한 모든 파일/폴더를 삭제하고 새 어셈블리 파일을 붙여넣습니다.

  4. 새 변경사항을 커밋하고 Github에 변경사항을 보거나 Fork와 같은 Git 뷰어를 사용합니다.무료로 코드를 쉽게 비교할 수 있습니다.

Java에는 시맨틱 디프 유틸리티가 있습니다.

언급URL : https://stackoverflow.com/questions/652432/compare-compiled-net-assemblies

반응형