program story

여러 어셈블리를 하나로 병합하는 방법은 무엇입니까?

inputbox 2020. 10. 7. 07:36
반응형

여러 어셈블리를 하나로 병합하는 방법은 무엇입니까?


다음 서비스 스택의 DLL 및 일부 Azure의 DLL을 EXE 프로젝트에 복사했다는 점에서 EXE 프로젝트 (하늘색 애플리케이션의 시작 작업)를 사용하여 서비스 스택을 사용합니다.

DLL

이 EXE 프로젝트를 빌드 할 때 Azure DLL은 EXE와 함께 번들로 제공되지만 서비스 스택의 DLL은 EXE와 함께 번들로 제공되지 않습니다. 모든 컴퓨터에서 EXE를 실행하려면 모든 서비스 스택의 DLL을 수동으로 복사해야하기 때문입니다.

이 서비스 스택의 dll을 사용하여

JsonServiceClient client = new JsonServiceClient(servicepath);

이 모든 DLL을 EXE에 번들로 묶으려면 어떻게해야합니까?


몇 가지 옵션이 있습니다.

또는

  • SmartAssembly (상용) 와 같은 도구를 사용하여
    다른 것들 사이에 포함하고 병합 할 수 있습니다 (소스 코드를 변경할 필요 없음).

또는

  • 10 줄 미만의 코드 (무료이지만 최소한의 소스 코드 변경)는
    필요한 모든 종속성을 "임베디드 리소스"로 표시합니다. 이렇게하면 EXE 파일에 포함됩니다. AssemblyResolve런타임에 리소스에서 읽는 핸들러 를 설정해야합니다. 필요한 DLL을 .NET 런타임에 반환합니다.

찾고있는 도구는 ILMerge 입니다. 명령 줄 도구이며 다음과 같이 사용할 수 있습니다.

ilmerge /target:winexe /out:MyApp.exe 
        MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll  ServiceStack.Text.dll

여기에 VS 프로젝트 설정에 ILMerge를 포함하는 방법을 설명하는 문서도 있습니다.


참조 된 어셈블리를 포함 된 리소스로 포함하는 훌륭한 도구는 Costura ( Fody 추가 기능)입니다. 저자 Simon Kropp은 다음과 같이 설명합니다.

[...] 두 가지 방법의 조합 :

그 결과 NuGet에서 Costura.Fody 를 가져 오기만 하면되는 매우 간단한 솔루션입니다 .

풍모:

  • 디버그 기호 포함
  • 임베디드 어셈블리 압축
  • 특정 어셈블리 포함 / 제외
  • 기타 ( Readme 참조 )

.NET 합병 인 ILMerge-GUI를 사용해보십시오 . Ilmerge모든 명령 줄 작업을 피하는 GUI 기반 입니다.


WPF 종속성이있는 경우 옵션이 더 제한 될 수 있습니다 ..... ILMerge는 이러한 문제를 처리하지 않는 것 같습니다. Costura.Fody (위의 Codefox에서 언급했듯이)는 우리에게 완벽하게 작동했으며 시작하는 데 약 5 분이 걸렸습니다. 아주 좋은 경험이었습니다.

Nuget으로 설치합니다 (패키지 관리자 콘솔에서 올바른 기본 프로젝트 선택).

"Copy Local"= true로 표시된 모든 DLL을 병합하고 압축 된 병합 된 .EXE (표준 출력과 함께 현재 대부분이 필요하지 않음)를 생성합니다. 그런 다음 독립형으로 사용할 수 있습니다.

라이센스는 MIT이므로 필요에 따라 수정 / 배포 할 수 있습니다.

https://github.com/Fody/Costura/


체크 아웃 ServiceStack.Gap의 어느 하나의 크로스 플랫폼에 쇼 하우투 ILMerge ServiceStack의 몇 가지 예를 프로젝트 .EXE를 .

ServiceStack에는 다음과 같은 임베디드 앱을 만드는 데 특히 적합한 여러 다른 기능도 포함되어 있습니다.

  • .NET의 HTTP Listener를 사용하여 서비스를 자체 호스팅 할 수 있습니다.
  • 미리 컴파일 된 Razor 뷰 지원
  • 임베디드 리소스 지원
  • Sqlite 및 OrmLite에 포함 된 데이터베이스 지원
  • 단일 .exe로 ILMerged 가능

참고 URL : https://stackoverflow.com/questions/8077570/how-to-merge-multiple-assemblies-into-one

반응형