web-dev-qa-db-fra.com

Compiler dans un exécutable autonome (.exe) dans Visual Studio

comment puis-je faire un exe autonome dans Visual Studio. C’est juste une simple application de console pour laquelle les utilisateurs ne voudraient pas installer une petite application de console. J'ai compilé un simple fichier cpp à l'aide de la commande visual studio Prompt. Est-ce que l'exe fonctionnera même si le framework .NET n'est pas installé? J'ai utilisé du code C++ natif.

35
Mohit Deshpande

Tout ce qui utilise l'environnement géré (qui inclut tout ce qui est écrit en C # et VB.NET) nécessite le framework .NET. Vous pouvez simplement redistribuer votre fichier .exe dans ce scénario, mais ils devront installer le framework approprié s'ils ne le possèdent pas déjà.

19
Joe

Dans votre dossier de projet, il y a un dossier bin. Dans votre dossier bin, il y a 2 dossiers, une version et un débogage. Pour votre .exe poli, vous voulez aller dans votre dossier de publication.

Je ne sais pas si c'est ce que tu demandes

55
Marlon

Si je vous ai bien compris, vous le pouvez, mais pas sous Visual Studio (d'après ce que je sais) . Pour obliger le compilateur à générer un exécutable autonome (ce qui signifie que vous utilisez C # comme tout autre langage), programme mkbundle (livré avec Mono). Cela compilera votre application C # en un exécutable réel sans dépendance.

Il y a beaucoup d'idées fausses à ce sujet sur Internet. Comme certaines personnes le disent, cela ne va pas à l’encontre du but du framework .net, car comment perdre des fonctionnalités futures du framework .net si vous n’avez pas utilisé ces fonctionnalités pour commencer? Et lorsque vous envoyez des mises à jour à votre application, il n'est pas vraiment difficile de l'exécuter via le processeur mkbundle avant de créer votre programme d'installation. Il est également avantageux de faire fonctionner votre application à la vitesse native (car maintenant, elle IS est native).

En C++ ou Delphi, vous avez le même système, mais sans la couche MSIL intermédiaire. Donc, si vous utilisez un espace de nom ou un fichier source (appelé unité sous Delphi), il est compilé et inclus dans votre binaire final. Donc, votre binaire final sera plus grand (Lire: taille "normale" pour une application réelle). Il en va de même pour les parties du framework que vous utilisez dans .net, elles sont également incluses dans votre application. Cependant, les liens intelligents permettent d’économiser un montant considérable.

J'espère que ça aide!

19

Je suis d'accord avec @Marlon. Lorsque vous compilez votre projet C # avec la configuration Release, vous trouverez dans le dossier "bin/Release" de votre projet l'exécutable de votre application. Cela devrait fonctionner pour une application simple.

Mais, si votre application a des dépendances sur des dll externes, je vous suggère de créer un SetupProject avec VisualStudio. Ce faisant, l’assistant de projet trouvera toutes les dépendances de votre application et les ajoutera (les librairies) au dossier d’installation. Enfin, tout ce que vous aurez à faire est d’exécuter la configuration sur l’ordinateur de l’utilisateur et d’installer votre logiciel.

3

Je n'ai jamais eu de problèmes avec le déploiement d'une petite application console faite en C # tel quel. Le seul problème que vous pouvez rencontrer est une dépendance au framework .NET, mais même cela ne devrait pas être un problème majeur. Vous pouvez essayer d'utiliser la version 2.0 du framework, qui devrait déjà figurer sur la plupart des PC.

En utilisant le C++ non géré natif, vous ne devriez pas avoir de dépendances sur le framework .NET, vous devez donc être sûr. Il suffit de récupérer l’exécutable et tous les fichiers d’accompagnement (s’il en existe) et de les déployer tels qu’ils sont; il n'est pas nécessaire de les installer si vous ne le souhaitez pas.

1
alex

Vous pouvez intégrer toutes les dll dans votre dll principale. Voir: Incorporation de DLL dans un exécutable compilé

0

Je ne pense pas qu'il soit possible de faire ce que le questionneur demande, à savoir éviter l'enfer de la DLL en fusionnant tous les fichiers du projet en un seul fichier .exe.

La question cadre est un hareng rouge. Le problème qui se pose est que lorsque vous avez plusieurs projets dépendant d'une bibliothèque, il s'agit d'un PITA pour maintenir les bibliothèques synchronisées. Chaque fois que la bibliothèque change, tous les fichiers .ex qui en dépendent et qui ne sont pas mis à jour mourront horriblement.

Dire aux gens d'apprendre le C comme une réponse l'a fait est arrogant et ignorant.

0
PHB