2009-10-22 3 views
2

Question assez simple, et je veux vraiment savoir la raison (la vraie raison) derrière cela. Supposons que vous souhaitiez distribuer une application .NET sur des ordinateurs sans .NET (pas même 1.1). Pourquoi ne pouvons-nous pas simplement inclure mscorelib.dll & autres avec l'application? Est-ce parce que CLR doit être installé d'une manière ou d'une autre, pour acquérir des capacités JIT pour interpréter IL?Pourquoi les DLLs .NET ne peuvent-elles pas être incluses avec l'application en utilisant "copy local" - de sorte que .NET n'est pas nécessaire

Je sais que cela est tout à fait question de sens de nos jours, puisque chaque système dispose d'un minimum de .NET 2.0, mais je me demande toujours: =)

+0

Je ne sais pas avec certitude, mais j'imagine que cela a beaucoup à voir avec le Global Assembly Cache, et les capacités JIT que vous mentionnez. –

+1

Merde, et il y avait moi avec une raison irréelle préparée et tout :( –

+0

Eh bien ... J'ai posé cette question parce que je ne suis pas vraiment sûr non plus ... Il y a un livre que je sais qu'il a la réponse - je crois il s'appelle "CLR From Inside Out en utilisant C#" Malheureusement, jamais trouvé le temps de le lire ... –

Répondre

1

L'installation des bibliothèques et du CLR permet également des assemblages partagés. Voulez-vous vraiment que des centaines de copies du CLR se libèrent sur votre machine? J'aime le fait que je sais que certaines choses seront disponibles pour mon application. Bien mieux que d'avoir à se soucier de ... Ai-je compilé pour la version 1.4.5 ou 1.4.6 de l'exécution ... peut-être que c'était même 1.2.5 (JRE peut être une douleur)

Il y a aussi beaucoup de parties de le .Net Framework qui ne sont que des wrappers gérés sur des API non gérées. Ainsi que des tonnes d'autres assemblages que vous utilisez mais qui ne sont pas référencés directement. (Voir mscoree.tlb et beaucoup d'autres)

+0

Ouais, je pense que vous avez raison à ce sujet ... –

5

Eh bien, comme vous l'avez dit déjà, les assemblées seules sont inutiles.

Vous avez besoin de l'environnement d'exécution, y compris la gigue, le type chargeur, garbage collector etc.

3

.NET est un Just In Time Interpretation d'langauge. Vos assemblys ne compilent pas vers un exécutable binaire.

Par conséquent, vous devez installer .NET Runtime afin que votre code puisse être interprété lors de l'exécution. Sans cela ... votre application ne va pas faire grand-chose.

Questions connexes