.NET 앱용 링커의 현황 (일명 "링크가 있습니다"2009 년판)
여기에있는 많은 사람들은 Joel Spolsky의 가장 인기있는 블로그 게시물 인 선생님, 링커를 가질 수 있습니다.에 익숙한 것입니다 . 여기서는 독립된 형 응용 프로그램을 개발하고 개발할 수있는 .NET 프레임 워크에 대한 실행을 제거하는 방법을 요구합니다. 판매.
Visual Studio 개발 팀의 Jason Zander 는 주제에 대한 자신의 견해로 대답 하여 다소 의심 스럽습니다. 대부분의 능력이 주요 관심사라고 있습니다. 전반적으로 작은 오버 헤드는 그만한 가치가 있습니다.
2009 년으로 빨리 감기. 현재 C # 링커를 보유하고 있다고 주장하는 몇 개의 그룹이 있습니다. (Jason Zander는 심지어 하나를 구현하는 데 많은 시간이 걸리지 않을 것입니다.) .NET 1.0의 귀엽고 내려가 다운로드 대신 이제는 거대한 200-300MB의 크로스 플랫폼입니다. x86, x64 및 ia64 용 .NET 버전이 포함되어 있습니다. 실행 크기를 따라서 Microsoft의 제안은 다음과 같습니다.
- 재배포 가능 패키지를 풀고없는 대상 플랫폼을 다음 다시 합합니다.
- 플랫폼 용 라이브러리 만 다운로드하는 웹 부트 스트 래퍼 사용
- 라이브러리가 제한되어 있고 x86에서만 작동하는 Client Profile 설치 프로그램 (2008 년 말에 새로 추가됨)을 사용하십시오.
설상가상으로, 내가 이해하기 때문에 (내가 틀렸다면 정정하십시오) 클라이언트 프로필이 .NET 3.5가 평범한 Windows에 등록하지도 언어. 즉, 여러 .NET 3.5 클라이언트 응용 프로그램이 컴퓨터에 설치되어 있으면 서로 볼 수 있습니다.
나는 마이크로 소프트가 여기서 무엇을 생각하고 있는지 모른다. 최악의 경우 설치가 하나의 대상 플랫폼 (예 : x64)이고 해당 라이브러리 만 포함되어야한다고 가정해도 여전히 앱에서 60MB 이상의 오버 헤드가 발생합니다. 가장 잘 작동하는 .NET 앱 중 하나 인 Paint.NET도 배포 .NET 설치로 인해 응용 프로그램을 어려움에 처하게 됩니다. 무료 앱을 배포하는 데 문제가 있다면 나머지 세계는 어떻습니까? 결국, 전에 자신의 응용 프로그램을 설치하기 전에 Microsoft Installer 3.1, .NET 실행 부트 스트 래퍼 및 기타 모든 설치 라이브러리를 설치 한 부트 스트 래퍼 를 설치했습니다 .
그래서 어때요. 링커. 좋은 도구가 있습니까? 아니면 사용자가 .NET 실행을 설치하지 않고 애플리케이션을 빌드 할 수 있습니다.
Update : 두 가지 옵션이있는 것 가변.
단 핵증 :
- Mono에는 자체 링커가 있습니다. 아래 답변에서 꽤 잘 작동하는 것입니다.
. 그물 :
- Xenocode 는 사용 가능하고 작동하는 소리입니다.
- Thinstall 은 권장되는 또 하나이며 VMware에서 제공합니다.
- Remotesoft의 또 다른 링커가 있습니다 . 그들은 그것을 '난 독자'로 청구합니다. 거기에 어떤 생각?
- Rustemsoft에서 Skater .NET Obfuscator라는 또 다른 것을 발견했습니다 . 그들에 익숙한 사람이 있습니까?
- Microsoft의 ILmerge도 제안되었습니다 . 이 작업의 일부만 수행하는 것처럼 (즉, 사용하지 않는 비트를 제거하지 않고 라이브러리 병합).
Mono Tool이 사용되는 것입니다. .NET 기반 도구는 어떻습니까? 그들에 대한 다른 경험이 있습니까? 아니면 Microsoft가 모든 사람에게 3.5를 푸시하기를 기다려야할까요? .NET 4.0이 나올 때까지 얼마나 걸릴지 생각하면 떨립니다 ...
모노 링커 의 경우 .
Mono Linker의 추가 기능과 기능을 구분할 수 있습니다.
Mono Linker는 관리되는 링커 일뿐 아니라 정의에 따라 어셈블리를 사용하고 프로그램 실행에 필요하지 않은 항목을 제거합니다. 어셈블리를 모두 병합하지 않습니다.
ILMerge의 Mono.Merge 작성이 완전하지 않습니다. Mono 실행과 어셈블리를 모두 포함하는 프로그램을 생성하기 위해 Mono는 mkbundle 도구를 제공합니다 .
또한 어셈블리를 변경하는 관리 도구를 제공하고 다시 명명 된 어셈블리를 제공하고 다시 서명 할 개인 키가없는 경우 해당 어셈블리를 실행하는 데 문제가 발생합니다.
링커에 대한 몇 가지 블로그 게시물을 작성했습니다.
링커에 대한 우리의 경험에 대해. 링커는 현재 Mono 프로젝트의 두 부분에서 사용됩니다. 사람들이 C # 컴파일러 인 Mono.CSharp.dll을 포함하도록 배포하는 어셈블리를 생성하는 데 사용합니다. PDC에서 Miguel의 프레젠테이션 을 볼 수 있습니다 . 매우 간단하고 사용자 정의 가능한 도구 인 링커의 기본 사용법이며 이에 대한 사용자 정의 단계를 작성하는 것은 매우 간단합니다.
링커의 더 복잡한 사용은 Moonlight 어셈블리를 만드는 방법 입니다. Moonlight는 Silverlight를 구현 한 어셈블리는 데스크톱 어셈블리의 하위 집합입니다. 따라서 데스크톱 어셈블리를 연결하여 사용하여 Silverlight와 일치하도록 공용 API를 변환하고 있습니다.
예, 링커에는 예를 들어 명령 줄 인터페이스와 같은 꽤 거친가 있습니다. 또는 수행중인 작업을 실제로 실제로 또는 이상한 어셈블리로 끝날 수 있습니다.
FWIW
Mono는 오랫동안 오랫동안 링커 를 사용했습니다.
다음은 mkbundle을 사용하는 방법 의 예 입니다.
이것이 우리가 사용하는 것입니다. 지금까지 1 년 또는 다소 제한적인 사용 (아마도 500 개 설치) 후 문제가 발생하지 않습니다.
그리고 합당 가격입니다. 더 비싼 전체 소프트웨어 (앱을 다른 앱 및 O / S와 비용으로 제공)이 있습니다. 그러나 우리는 모든 것이 필요하지 않습니다. 1 년 정도 전에는 400 달러 였는데 지금은 조금 더 비싸지 만 Thinstall보다는 훨씬 더 생각합니다.
IE 8 과 같이 다운로드 할 수있는 멋진 견본도 있습니다 . 설치가 필요하지 않습니다.
클라이언트 프로필은 Windows에 등록하지 않는 클라이언트 프로필 만있는 컴퓨터를 전체 .net 3.5가있는 컴퓨터와 혼동을 원하기 때문에 특별한 방식으로 등록됩니다.
고객 프로필 :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\DotNetClient\v3.5\Install
전체 .net 3.5 :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\Install
이것은 내가 오래 전에 .NET Rocks에서 들었던 주요 내용입니다. 그래도 시도 할 변화가 없었습니다.
http://www.remotesoft.com/linker/
사용하지 않았지만 .NET 원자로로 비슷한 일을 할 수 있다고 들었습니다.
나는 Joel이 그 기사를 쓰기 전에 잠시 동안 Joel의 포럼에 필요한 것이 있다는 것을 (내 필명 "Mr Analogy"로) 주장 하고 링 합니다. (슬프게도).
지난번에 라이선스가 번거 롭다는 것을 확인했지만 (앱 라이선스 당 연간 $ 2k) 이야기를 나눴지만 꽤 잘 있습니다. 그들은 SW 개발자가 아닌 IT 상점을 목표로하는 것입니다. 결혼식 사이트에서 가격을 제공하는 것이 비싸다는 것을 암시합니다.
일부 "링커"와 작동 방식에 대해 설명하는 CodeProject에 대한 훌륭한 기사가 있습니다.
'ProgramingTip' 카테고리의 다른 글
e.getMessage ()와 e.getLocalizedMessage ()의 차이점 (0) | 2020.11.02 |
---|---|
Brew Doctor-“경고 : / usr / local / include에서 추출되지 않은 헤더 파일을 발견 했습니까?”? (0) | 2020.11.02 |
Android 애플리케이션에서 인앱 결제를 구현하는 방법은 무엇입니까? (0) | 2020.11.02 |
jquery ajax 호출 -.fail 대. : 오류 (0) | 2020.11.02 |
간단한 CLI Java linter가 있습니까? (0) | 2020.11.02 |