Discussione Problema con la compilazione di un programma in dll visual studio.

Emu Blog

Utente Bronze
11 Marzo 2021
79
9
35
37
Ciao a tutti in questi giorni volevo imparare a programmare in c#. Come ide ho scelto Visual Studio 2022.
Come templete del progetto ho scelto "App Console" e ho scritto questo semplice codice.
C#:
Console.WriteLine("Hello, World!");
Quando ho provato a compilare il programma si sono creati più file di qui un dll e un exe.
Con dnspy ho scoperto che il dll è quello che il contiene il codice che ho scritto e l'exe è un semplice loader.
Cartella:
2022-09-27_21-06.png

Un altra prova è nei log di compilazione:
2022-09-27_21-08.png


La mia domanda è se si può compilare il progetto in un solo exe. E se si come.
Ho provato a cercare ovunque su google ma non ho trovato nulla.
Grazie in anticipo.
 

JunkCoder

Moderatore
5 Giugno 2020
1,111
22
962
458
Questo è il comportamento di default per programmi .NET Core/5/6. L'utilità è che puoi eseguire la sola dll su tutte le piattaforme usando dotnet ConsoleApp1.dll

Se vuoi avere un unico eseguibile deduco che vuoi usarlo su Windows, quindi potresti usare benissimo il .NET Framework (es. 4.8) che ha alcune funzionalità ancora non implementate nel .NET cross-platform. Per farlo continuando ad usare .NET puoi usare le impostazioni del progetto ed impostare PublishSingleFile a true, tuttavia l'eseguibile sarà molto più grande rispetto alle altre modalità.
 

Emu Blog

Utente Bronze
11 Marzo 2021
79
9
35
37
Ultima modifica:
grazie mille
Messaggio unito automaticamente:

ho provato ad installare .net 4.8 ma mi da questo errore:
2022-09-27_22-59.png

Allora lo ho installato dal pannello di controllo con le funzionalità di windows.
2022-09-27_23-01.png

Ma comunque visual studio non me lo da come framework disponibile (anche dopo il riavvio).
2022-09-27_23-03.png


P.S

Ho installato .NET framework 4.8/4.8.1 la versione developer ma comunque non compare nelle opzioni del Framework di Destinazione.
Ho anche installato .net 4.8 dall'installer di visual studio
2022-09-28_02-38.png

Ma alla fine non compare ancora nei framework di destinazione e neanche nella scelta del framwork alla creazione di un progetto.
2022-09-27_23-03.png
 

JunkCoder

Moderatore
5 Giugno 2020
1,111
22
962
458
Un progetto .NET moderno è strutturato in modo differente da uno .NET Framework, non puoi fare il retarget su un progetto esistente, in fase di creazione hai queste scelte:

1664358693991.png


Selezionando il Framework avrai poi le scelte corrette:

1664358803043.png



La confusione nasce dal casino che Microsoft ha fatto con la numerazione delle versioni e i differenti framework (.NET, .NET Core, .NET Framework, .NET Standard...).
Con .NET si intende una delle ultime versioni (5, 6...), .NET Core è la stessa cosa: hanno tolto la parola Core da dopo la 3.1.
Il .NET Standard runna ovunque ma da nessuna parte, ci puoi solo fare una lib condivisa estremamente compatibile con un subset di .NET.
Il .NET Framework è quello iniziato per primo e con in mente Windows, ha molte più librerie perché usa funzioni di sistema Windows che non è possibile tradurre o portare su altre piattaforme.