IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Question compilation avec .NET 5.0


Sujet :

Framework .NET

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    4 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 4 076
    Points : 7 282
    Points
    7 282
    Billets dans le blog
    1
    Par défaut Question compilation avec .NET 5.0
    Bonjour,

    J'ai une application console qui faisait jusqu'à présent 250 Ko avec .NET Framework 4.8

    La migration vers .NET Core étant à priori le sens de l'histoire, j'ai donc converti mon programme pour target .NET 5.0

    Je mets à jour les NuGets, tout va bien. Je compile, ça marche. Je vais dans le dossier bin pour récupérer le programme et écraser l'existant chez mon client et... c'est le drame.

    En effet, le programme lui-même fait toujours à peu près la même taille.

    Sauf que j'ai en plus toutes les DLL de toutes les assemblies utilisées.

    On arrive à plusieurs dizaines de fichiers et plusieurs dizaines de Mo.

    J'installe .NET 5.0 sur le serveur du client.
    Je copie donc que mon programme, j'exécute : évidement, ça ne marche pas.

    Je copie tout le bordel généré par Visual Studio : youpi ça marche. Mais c'est une bouse intersidérale, je peux pas laisser ça en l'état...

    Je cherche un peu, je trouve comment créer un programme "autonome".
    https://docs.microsoft.com/en-us/dot...ng/single-file

    Sauf que ça ne me va pas du tout !

    1/ J'ai une DLL externe, que je livre normalement avec mon programme (et peut être mise à jour quand l'autre programme évolue) : elle est maintenant incorporée à mon programme
    2/ Mon programme fait 65 Mo, rien que ça...
    3/ Alors youpi, j'ai plus besoin d'installer le framework .NET 5.0 (quel intérêt ?) mais j'ai toujours besoin de déployer un certain nombre de DLL, notamment les CLR types de SQL Server, qui ne se sont pas intégrés, eux...
    4/ Je suis maintenant obligé d'indiquer sur quelle plateforme je veux exécuter mon programme directement dans le projet si je veux pouvoir créer mon application standalone... c'est même pas un choix dans les options de publication ! Du coup je peux compiler pour Windows x64 uniquement, et si j'ai un autre client sous Linux il faut que je me paluche un projet séparé (c'est ultra intéressant d'avoir un framework cross-plateforme dans ce cas...)

    Bref, je ne suis pas du tout satisfait par la chose...

    Ma question est donc :

    Existe-t-il un moyen pour incorporer dans le *.EXE les différentes assemblies absentes du framework (notamment les NuGets du projet) sans incorporer pour autant tout le framework ?
    Et comment gérer ça proprement pour que ça reste cross-plateforme ? Je veux bien compiler pour chaque plateforme ou CPU, mais je veux pas avoir à gérer un projet différent pour chaque...

    Merci d'avance pour vos conseils éclairés !
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    14 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 14 039
    Points : 24 836
    Points
    24 836
    Par défaut
    en mode autonome le framework est livré à côté de l'exe
    ceci fait plusieurs 10aine de Mo et plein de fichiers, mais permet d'être indépendant, l'application utilisera toujours cette version du framework

    en mode normal le framework n'est pas livré, on se retrouve donc avec comme sur les framework .net avec querques centaines de ko
    l'exe ne fonctionnera que si le framework 5 est installé sur la machine, et si le framework est mis à jour sur la machine (genre 5.1 si ca arrive) alors l'application utilisera ce framework
    c'était là aussi le fonctionnement du framework .net, qui peut poser des problèmes lors de l'ajout (rare) d'un bug dans le framework

    et il y a le mode single file qui permet d'avoir un seul fichier en mode autonome au lieu des 200

    un mode single file sans autonome je ne sais pas si c'est possible ...
    et sinon tout ca se configure dans le profiler de publication

    le mode autonome fait qu'il faut publier pour une plateforme (genre windows x64)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyst
    Inscrit en
    avril 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2022
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    I'm having an issue regarding trying to compile my .NET 5 application to a single file executable while debugging through Visual Studio.

    My .csproject file is below.

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Project Sdk="Microsoft.NET.Sdk">
     
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net50</TargetFramework>
        <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
        <PublishSingleFile>true</PublishSingleFile>
        <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
        <PlatformTarget>x64</PlatformTarget>
      </PropertyGroup>
     
    </Project>
    Mon id
    I have my runtime identifier set to winx64 and publish single file set to true, yet when building I'm left with a bunch of DLLs that my application uses building along-side it (a total of 272 in total). Basically I have checked thoroughly and also faced same problem on best ERP partner in Kolkata and related. I was wondering - how would I package these DLLs into this application? I had thought that publishing it as a single file executable would do that already.

    Hope anyone can here pls helps me onto this.

    The Solution I think is -

    For .NET 5, to get a single runnable executable file when you publish your project, the important properties are:

    PublishSingleFile
    SelfContained
    IncludeAllContentForSelfExtract
    RuntimeIdentifier
    You'll either need to include them in the project file themselves, or specify them on the command line.

    Project File:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Project Sdk="Microsoft.NET.Sdk">
     
        <PropertyGroup>
            <OutputType>Exe</OutputType>
            <!--<OutputType>WinExe</OutputType>--><!--Use this for WPF or Windows Forms apps-->
            <TargetFramework>net5.0</TargetFramework>
            <!--<TargetFramework>net5.0-windows</TargetFramework>--><!--Use this for WPF or Windows Forms apps-->
            <PublishSingleFile>true</PublishSingleFile>
            <SelfContained>true</SelfContained>
            <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
            <RuntimeIdentifier>win-x64</RuntimeIdentifier><!--Specify the appropriate runtime here-->
        </PropertyGroup>
     
    </Project>
    CLI:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dotnet publish -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeAllConte
    Hope this article helps you properly.

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    4 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 4 076
    Points : 7 282
    Points
    7 282
    Billets dans le blog
    1
    Par défaut
    Bonjour Jamiesash24, et merci

    Je vais tester ces paramètres.

    Etonnant que Microsoft ne propose pas un truc un peu plus simple pour faire des EXE autonomes, ni qu'il ne continue à proposer de compiler en faisant appel à un Framework partagé... Avoir 500 Mo de dépendences pour un programme console de 2 Ko, je trouve ça franchement nase... Tout le monde n'a pas la fibre.
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    2 696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 696
    Points : 10 531
    Points
    10 531
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Bonjour Jamiesash24, et merci

    Etonnant que Microsoft ne propose pas un truc un peu plus simple pour faire des EXE autonomes, ni qu'il ne continue à proposer de compiler en faisant appel à un Framework partagé...
    C'est sans doute parce que tu passes par Visual Studio

    Sinon, avec dotnet publish tu peux préciser ce que tu veux aisément pour ton déploiement.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dotnet publish -r linux-x64 --self-contained false   // Sans framework pour Linux 64bits
    dotnet publish -r win-x64 // avec framework pour Windows
    dotnet publish -r osx-x64 // avec framework pour OSX
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. [Question] Compiler Millie avec Netbeans
    Par TanEk dans le forum Millie
    Réponses: 12
    Dernier message: 06/01/2009, 23h52
  2. Réponses: 0
    Dernier message: 04/08/2008, 18h05
  3. Réponses: 3
    Dernier message: 02/03/2008, 18h02
  4. [VS.NET] [C#] Compilation avec /unsafe
    Par Jfrancois57 dans le forum C++/CLI
    Réponses: 3
    Dernier message: 24/05/2004, 16h56
  5. Réponses: 3
    Dernier message: 08/04/2004, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo