2009-12-09 17 views
6

J'ai une application .net 3.5 et je voudrais la rendre portable. C'est simple et fonctionne parfaitement, j'ai envoyé le fichier .EXE + .DLL à quelques amis et il fonctionne comme prévu lors de l'exécution de l'exe avec le .DLL et le .ICO (que j'ai utilisé) dans le même dossier . Ce que je veux est simple: créer un seul fichier EXE qui s'occupe de la DLL, image et what-i-want avec elle sans être une installation, et ne nécessitant aucune installation. (aka portable)Création d'applications Windows portables (non installées) en C#

Je peux envisager de le migrer vers .net 2.0 si nécessaire, je n'utilise aucune fonctionnalité de 3.5 seulement, en fait, je ne suis pas vraiment sûr pourquoi j'utilise 3.5 (je suis Je voudrais des conseils, des liens, ou une explication sur la façon de le faire, car il est vraiment ennuyeux d'envoyer des .rar à mes amis et de leur dire d'extraire et d'exécuter le fichier .exe parmi tous " des fichiers bizarres "comme ils appellent (d'ailleurs, tout le monde n'a pas d'affichage de l'extension dans les dossiers, donc c'est un cauchemar)

(J'ai cherché dans StackOverflow, et je n'ai pas trouvé de questions qui répondent à ce que je demande, le seul celui que j'ai trouvé être comme il a fini dans une discussion de fram disponibilité des travaux dans les machines Windows, choix de la langue et pas de bonnes réponses.)

+0

Je pense que vous voulez dire facilement distribuable - non portable (portable signifie s'exécuter sur différents systèmes d'exploitation et/ou architectures matérielles). – Oded

+0

Allez, discutons-en, une réponse à cette question (qui peut intéresser beaucoup de gens) est trop peu! Je suis ici pour donner toute autre information qui pourrait être utile pour répondre. – Marcelo

+3

@Oded - portable est maintenant l'un de ces mots qui a plusieurs significations, son habitude utilisé pour signifier croix plate-forme, mais maintenant souvent (plus?) Signifie "fonctionne à partir d'une clé USB ou équivalent sans installer" – Murph

Répondre

10

Vous pouvez utiliser ILMerge pour fusionner tous les assemblages dans votre exécutable. Je m'attendais à ce que votre icône soit déjà une ressource incorporée - ou vous devriez au moins pouvoir la créer en tant que telle.

Cibler .NET 2.0 rendrait l'application plus largement portable en ce qu'elle fonctionnerait uniquement sur les machines qui n'ont que .NET 2.0 installé - mais je ne sais pas à quoi ressemblent les proportions pour le déploiement 2.0 vs 3.5, et plus surtout, ils peuvent ne pas être les mêmes que les proportions pour le déploiement sur votre public cible.

+0

Merci! à propos de l'icône, je ne sais pas comment faire cela, mais je vais comprendre. Je vais continuer à attendre, peut-être que quelque chose de mieux se présentera! – Marcelo

3

Vous pouvez ajouter des données (assemblages, icônes, etc.) requises par votre application en tant que ressources ou fichiers incorporés. Utilisez l'éditeur de ressources ou, si vous voulez avoir les mains sales, vous pouvez ajouter n'importe quel fichier en faisant un clic droit sur le projet dans l'explorateur de solution et en faisant un "ajouter un élément existant", obtenant des propriétés sur le fichier et définissant Build Aciton sur "Embedded Resource".

ressources comme les icônes peuvent simplement être utilisés directement - comme dans DrawIcon (Properties.Resources.MyIcon)

Les fichiers de données peuvent être chargés à l'aide Application.GetManifestResource (et des méthodes connexes) pour obtenir un flux à charger à partir. Par exemple, pour un assembly, vous pouvez utiliser Assembly.Load() directement à partir du flux de ressources du manifeste pour votre ressource.

+0

P.S. L'avantage de ceci est qu'il est facile d'incorporer des fichiers de données et des assemblages dans votre fichier .exe, très facile à maintenir, tous les fichiers sont listés automatiquement dans l'Explorateur de solutions et ne nécessitent aucun outil tiers ni aucune étape de post-construction pour le faire fonctionner - tout repose sur la fonctionnalité intégrée VS/C# /. net2.0. –