Molte persone qui hanno probabilmente familiarità con uno dei post più famosi del blog Joel Spolsky, Please Sir, May I Have a Linker, dove grida per un modo per rimuovere le dipendenze dal framework .NET in modo che sia possibile sviluppare e vendere un'applicazione stand-alone.Lo stato dei linker per le app .NET (aka "Please Sir, May I have a Linker" edizione 2009)
Jason Zander del team di sviluppo di Visual Studio, al momento, ha risposto with his views on the topic, sostenendo che l'argomento è in qualche modo discutibile - la capacità di correggere i problemi di sicurezza in runtime (tra gli altri punti) era la loro principale preoccupazione. Nel complesso, il piccolo overhead è valsa la pena.
Avanti veloce al 2009. Ci sono alcuni gruppi là fuori che affermano di avere i linker C#. (Jason Zander ha anche detto a se stesso che non ci sarebbe voluto molto per implementarlo.) Invece del simpatico download da decine di mega di .NET 1.0, ora abbiamo un enorme programma di installazione .NET 3.5 completo multipiattaforma da 200-300 mb che contiene versioni di .NET per x86, x64 e ia64. suggerimenti di Microsoft per ridurre le dimensioni di esecuzione sono:
- Estrarre la ridistribuibile, rimuovere le piattaforme di destinazione che non si desidera, e rimetterlo insieme
- Utilizzare il programma di avvio automatico web che scarica solo le librerie per la piattaforma
- Utilizzare il programma di installazione client Profile (nuove a partire dal fine del 2008), che ha limitato le librerie e funziona solo per x86
a peggiorare le cose, se ho capito bene (per favore correggetemi se sbaglio) il cliente il profilo non si registra nemmeno con windows come avendo installato .NET 3.5. Ciò significa che se sul computer sono installate più applicazioni client .NET 3.5, nessuna si vedrà e il runtime verrà reinstallato ancora e ancora!
Non so davvero cosa stia pensando Microsoft. Anche supponendo che l'installazione del caso peggiore sia per una piattaforma di destinazione (ad esempio, x64) e solo quelle librerie devono essere incluse, stai ancora guardando verso l'alto di 60 mb di overhead sulla tua app. Anche una delle applicazioni .NET più conosciute, Paint.NET, era irta di Difficulties installing the application because of the massive .NET dependencies. Se hanno problemi a distribuire un'applicazione gratuita, e il resto del mondo? Alla fine, hanno dovuto Make a bootstrapper that installed Microsoft Installer 3.1, the .NET runtime bootstrapper, and all their other dependent libraires prima di poter installare la propria applicazione.
Quindi che ne dite. Un linker. Esistono cose buone o uno strumento che rende semplicemente possibile creare un'applicazione C# senza richiedere all'utente l'installazione del massivo runtime .NET?
Aggiornamento: così, sembra che ci sono un paio di opzioni:
Mono:
- Mono has its own linker. Dalla risposta in basso, sembra che funzioni abbastanza bene.
.NET:
- Xenocode sembra essere uno che è disponibile e lavora.
- Thinstall è un altro che è stato consigliato, ed è di VMware.
- There's another linker by Remotesoft. Lo fatturano come un "obfuscator". Qualche idea lì?
- Found another by Rustemsoft called Skater .NET Obfuscator. Qualcuno ha familiarità con loro?
- ILmerge by Microsoft was also suggested; sembra che esegua solo parte del compito (cioè, unendo le librerie, non estraendo i bit inutilizzati).
Sembra che gli strumenti Mono siano utilizzati; che ne dici degli strumenti basati su .NET? Qualche altra esperienza con loro, o dovremo aspettare che Microsoft lo spinga a tutti? Rabbrividisco a pensare a quanto tempo ci vorrà affinché .NET 4.0 venga messo fuori ...
Non ILMerge dispone di un'opzione che lo fa? – configurator
Sei così giusto !!! Il programma di installazione di un driver della webcam (42M stesso) di Microsoft è andato al Web e ha scaricato .NET 3.0 - ci sono voluti più di 10 minuti su ADSL 1,5 M ... Ciò che mi viene richiesto - Solo per usare una webcam ... –
Sarebbe un peccato se Microsoft non impiegasse tanto tempo a spingere .NET 3.5 verso tutti. Se lo includevano nei service pack più recenti come con .NET 2.0, la maggior parte delle persone non avrebbe dovuto occuparsi di queste assurdità. –