다음 서비스 스택의 DLL 및 일부 Azure의 DLL을 EXE 프로젝트에 복사했다는 점에서 EXE 프로젝트 (푸른 응용 프로그램의 시작 작업)를 사용하여 서비스 스택을 사용합니다.
이 EXE 프로젝트를 빌드하면 Azure DLL이 내 EXE와 함께 번들로 제공되지만 서비스 스택의 DLL은 EXE와 함께 번들로 제공되지 않습니다. 모든 컴퓨터에서 EXE를 실행하려면 모든 서비스 스택의 DLL을 수동으로 복사해야하기 때문입니다.
이 서비스 스택의 dll을 사용하여
JsonServiceClient client = new JsonServiceClient(servicepath);
이 모든 DLL을 EXE에 번들로 묶으려면 어떻게해야합니까?
답변
몇 가지 옵션이 있습니다.
또는
- SmartAssembly (상용) 와 같은 도구를 사용하여
다른 것들 사이에 포함하고 병합 할 수 있습니다 (소스 코드를 변경할 필요 없음).
또는
- 10 줄 미만의 코드 (무료이지만 최소한의 소스 코드 변경)는
필요한 모든 종속성을 “임베디드 리소스”로 표시합니다. 이렇게하면 EXE 파일에 포함됩니다.AssemblyResolve
런타임시 리소스에서 읽는 핸들러 를 설정해야합니다. 필요한 DLL을 .NET 런타임에 반환합니다.
답변
답변
참조 된 어셈블리를 포함 된 리소스로 포함하는 훌륭한 도구는 Costura ( Fody 추가 기능)입니다. 저자 Simon Kropp은 다음과 같이 설명합니다.
[…] 두 가지 방법의 조합 :
- 어셈블리 병합 방법으로 임베디드 리소스 사용에 대한 Jeffrey Richter의 제안
- 모듈 이니셜 라이저를 만들기 위해 cecil을 사용하는 Einar Egilsson의 제안
그 결과 단순히 Costura 를 가져 오기만 하면되는 매우 간단한 솔루션입니다. NuGet에서 .
풍모:
- 디버그 기호 포함
- 임베디드 어셈블리 압축
- 특정 어셈블리 포함 / 제외
- 기타 ( Readme 참조 )
답변
.NET 합병 인 ILMerge-GUI를 사용해보십시오 . Ilmerge
모든 명령 줄 작업을 피하는 GUI 기반 입니다.
답변
WPF 종속성이있는 경우 옵션이 더 제한 될 수 있습니다 ….. ILMerge는 이러한 문제를 처리하지 않는 것 같습니다. Costura.Fody (위의 Codefox에서 언급했듯이)는 우리에게 완벽하게 작동했으며 시작하는 데 약 5 분이 걸렸습니다. 아주 좋은 경험이었습니다.
Nuget으로 설치합니다 (패키지 관리자 콘솔에서 올바른 기본 프로젝트 선택).
“Copy Local”= true로 표시된 모든 DLL을 병합하고 압축 된 병합 된 .EXE (표준 출력과 함께 현재 대부분이 필요하지 않음)를 생성합니다. 그런 다음 독립형으로 사용할 수 있습니다.
라이센스는 MIT이므로 필요에 따라 수정 / 배포 할 수 있습니다.
답변
체크 아웃 ServiceStack.Gap의 어느 하나의 크로스 플랫폼에 쇼 하우투 ILMerge ServiceStack의 몇 가지 예를 프로젝트 .EXE를 .
ServiceStack에는 다음과 같은 임베디드 앱을 만드는 데 특히 적합한 여러 다른 기능도 포함되어 있습니다.
- .NET의 HTTP Listener를 사용하여 서비스를 자체 호스팅 할 수 있습니다.
- 미리 컴파일 된 Razor 뷰 지원
- 임베디드 리소스 지원
- Sqlite 및 OrmLite에 포함 된 데이터베이스 지원
- 단일 .exe로 ILMerged 가능
답변
.net core 3은 프로젝트 구성에 단일 파일 게시 및 트리밍이라는 두 가지 새로운 옵션을 도입합니다.
여기 에서 문서에 대한 자세한 내용을 찾을 수 있으며 참조를 위해 여기 에 프로젝트 구성을 복사했습니다.
- 프로젝트 구성 :
<PropertyGroup>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
- CLI 사용 :
dotnet publish -r win10-x64 -p:PublishSingleFile=true
dotnet publish -r <rid> -c Release
두 옵션을 함께 결합하여 응용 프로그램에 맞게 잘린 단일 어셈블리를 얻을 수 있도록 완벽하게 지원됩니다.