programing

에 대한 링커 상태.NET 앱("Please Sir, May I have a Linker" 2009년판)

muds 2023. 5. 11. 21:57
반응형

에 대한 링커 상태.NET 앱("Please Sir, May I have a Linker" 2009년판)

이곳의 많은 사람들은 아마도 Joel Spolsky의 가장 인기 있는 블로그 게시물 중 하나인 Please Sir, May I Have a Lincer에 대해 잘 알고 있을 것입니다. 여기서 그는 의존성을 제거할 방법을 외칩니다.독립 실행형 애플리케이션을 개발하고 판매할 수 있는 NET 프레임워크입니다.

당시 Visual Studio 개발 팀의 Jason Zander는 이 주제에 대한 자신의 견해로 답했으며, 이 주제는 다소 미묘하다고 주장했습니다. 런타임에서 보안 문제를 해결하는 능력이 주요 관심사였습니다.)이 주요 관심사였습니다.전반적으로, 적은 간접비는 그만한 가치가 있었습니다.

2009년으로 빨리 가십시오.C# 링커를 가지고 있다고 주장하는 몇몇 그룹이 있습니다.(Jason Zander는 심지어 하나를 구현하는 데 많은 것이 필요하지 않을 것이라고 스스로 말하기도 했습니다.)의 귀여운 십여 개의 메가 다운로드 대신.NET 1.0은 이제 200-300mb의 대규모 크로스 플랫폼을 완성했습니다.의 버전을 포함하는 NET 3.5 설치 관리자.x86, x64 및 ia64용 NET.런타임 크기를 줄이기 위한 Microsoft의 제안은 다음과 같습니다.

  • 재배포 가능한 패키지를 풀고 원하지 않는 대상 플랫폼을 제거한 후 다시 결합
  • 플랫폼용 라이브러리만 다운로드하는 웹 부트스트래퍼 사용
  • 제한된 라이브러리가 있고 x86에만 작동하는 클라이언트 프로파일 설치 관리자(2008년 말 기준) 사용

엎친 데 덮친 격으로, 제가 이해하는 바와 같이(잘못된 경우 수정 부탁드립니다) 고객 프로파일은 윈도우에 등록조차 되지 않습니다.NET 3.5가 설치되었습니다.이는 다중인 경우를 의미합니다.NET 3.5 클라이언트 응용 프로그램이 컴퓨터에 설치되어 있으며, 아무도 서로를 볼 수 없으며 런타임이 다시 설치됩니다.

저는 마이크로소프트가 여기서 무슨 생각을 하는지 정말 모르겠습니다.최악의 경우 하나의 대상 플랫폼(예: x64)을 설치하고 이러한 라이브러리만 포함하면 된다고 가정하더라도 앱에서 60MB 이상의 오버헤드가 발생합니다.심지어 가장 잘 알려진 것 중 하나.NET 앱, 페인트.NET은 대규모로 인해 애플리케이션을 설치하는 데 어려움을 겪었습니다.NET 종속성.만약 그들이 무료 앱을 배포하는 데 문제가 있다면, 나머지 세계는 어떻습니까?결국 Microsoft Installer 3.1을 설치하는 부트스트래퍼를 만들어야 했습니다.자체 애플리케이션을 설치하기 전에 NET 런타임 부트스트래퍼 및 기타 모든 종속 라이브러리.

그래서 어때요?링커.사용자가 대용량을 설치할 필요 없이 C# 애플리케이션을 구축할 수 있는 도구가 있습니까?NET 런타임?

업데이트: 몇 가지 옵션이 있습니다.

모노:

.NET:

모노 툴이 사용되고 있는 것 같습니다. 그러면 어떨까요?NET 기반 툴?다른 경험이 있습니까? 아니면 Microsoft가 3.5를 모두에게 공개할 때까지 기다려야 합니까?시간이 얼마나 걸릴지 생각하면 몸서리가 쳐집니다.NET 4.0 꺼짐...

모노 링커의 케이스입니다.

여기에 나열된 다른 소프트웨어에 대해서는 자세히 설명할 수 없지만 모노링커의 저자인 저는 그것이 무엇을 하고 무엇을 하지 않는지 알 수 있습니다.

모노 링커는 관리되는 링커일 뿐이므로 기본적으로 어셈블리를 사용하고 프로그램 실행에 필요하지 않은 것을 제거합니다.어셈블리를 모두 병합하지 않으며, 기본 프로그램을 만들지도 않습니다.

모노가 있습니다.ILMerge의 병합 복제본이 완전하지 않고 작성자가 이 복제본을 유지 관리하지 않습니다.Mono 런타임과 어셈블리를 모두 포함하는 네이티브 프로그램을 생성하기 위해 Mono는 mkbundle 도구를 제공합니다.

또한 어셈블리를 변경하는 관리 도구일 뿐이므로 강력한 명명된 어셈블리를 지정하고 이 어셈블리에 서명할 개인 키가 없으면 해당 어셈블리를 실행하는 데 문제가 발생합니다.

저는 링커에 대한 블로그 게시물을 몇 개 작성했습니다.

링커에 대한 우리의 경험에 대해서요.링커는 현재 Mono 프로젝트의 두 부분에서 사용됩니다.이것은 사람들이 C# 컴파일러인 Mono를 내장할 수 있도록 배포하는 어셈블리를 생성하는 데 사용됩니다.CSSharp.dll.PDC에서 미구엘의 프레젠테이션을 보실 수 있습니다. PDC에서는 어떻게 하는지 설명합니다.사용자 정의 가능한 도구인 링커의 기본적인 사용법이며, 이를 위한 사용자 정의 단계를 작성하는 것이 매우 쉽습니다.

링커를 더 복잡하게 사용하는 것은 달빛 어셈블리를 만드는 방법입니다.달빛은 Silverlight를 구현한 것으로 조립품은 데스크톱 조립품의 하위 집합입니다.따라서 데스크톱 어셈블리를 연결하여 크기를 줄이고 맞춤형 단계를 사용하여 Silverlight에 맞게 퍼블릭 API를 변환하고 있습니다.

예를 들어, 링커는 명령 줄 인터페이스와 같이 상당히 거친 부분이 있습니다. 예를 들어, 여러분이 무엇을 하고 있는지 정말 알아야 합니다. 그렇지 않으면 이상한 어셈블리가 나올 수도 있습니다. 하지만 전반적으로, 이것은 우리에게 매우 잘 작동합니다.

FWIW

모노는 꽤 오랫동안 링커를 가지고 있었습니다.

다음은 mkbundle 사용 방법의 입니다.

http://www.xenocode.com/

이것이 우리가 사용하는 것입니다.지금까지 1년 또는 다소 제한적인 사용(야생 환경에서 500개 설치) 후에는 문제가 없습니다.

그리고 꽤 합리적인 가격입니다.더 비싼 전체 가상화 소프트웨어(다른 앱과 함께 사용자의 앱을 번들로 제공하고 운영 체제도 함께 제공)가 있습니다.하지만 우리는 그 모든 것이 필요하지 않았습니다.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 원자로

는 조엘이 그 기사를 쓰기 전에 한동안 조엘의 포럼에 링크어가 필요하다고 주장하고 있었습니다.링커의 확산은 (슬프게도) 제 우려를 정당화한 것 같습니다.

http://www.thinstall.com/

제가 이야기를 나눈 사람들에 따르면, 라이센스 비용이 만만치 않은 것으로 확인되었지만, 이는 상당히 잘 평가되고 있습니다(앱 라이센스당 연간 2,000달러).그들은 SW 개발자보다는 IT 상점을 목표로 하는 것 같습니다.그들의 사이트에서 가격을 찾을 수 없다는 사실은 (저에게) 비싸다는 것을 암시합니다.

코드 프로젝트에는 일부 "링커"와 그 작동 방식에 대해 이야기하는 훌륭한 기사가 있습니다.

http://www.codeproject.com/KB/dotnet/internals_native.aspx

언급URL : https://stackoverflow.com/questions/668188/the-state-of-linkers-for-net-apps-aka-please-sir-may-i-have-a-linker-2009-e

반응형