Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Versione .NET Framework
Forum - C# / VB.NET - [VB.NET] Versione .NET Framework

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 18:47
Lunedì, 13/09/2010
Questo topic è stato chiuso dal moderatore

Salve, avrei qualche domanda da porvi. E' possibile, non necessariamente da codice ma magari anche utilizzando un programma esterno, risalire alla versione del framework utilizzato da un programma e quindi da un file ".exe" ? Inoltre esiste un modo per selezionare la versione del framework da utilizzare quando si compila da codice un file con estensione "vb" utilizzando le classi System.CodeDom.Compiler.CodeDomProvider, Microsoft.VisualBasic.VBCodeProvider e System.CodeDom.Compiler.CompilerParameters ? Grazie mille per l'attenzione :k:

PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Up
1
Down
V
Segnala al moderatore
Postato alle 19:39
Mercoledì, 15/09/2010
Testo quotato

Postato originariamente da klez91:

Scusami netarrow, potresti spiegarti meglio per piacere, nn ho capito bene dove dovrei andare ad agire o cosa modificare.



Quella configurazione va messa nel app.config del tuo progetto (se non c'è devi fare add new item - configuration file).

Ad ogni modo ho cercato qualche informazione sul CodeDom.
Puoi forzare nelle provider options quale versione usare per compilare i tuoi assembly: http://msdn.microsoft.com/en-us/library/bb470844.aspx

Oltre che inserire queste informazioni nell'app.config puoi cablarle nel codice:

Codice sorgente - presumibilmente C# / VB.NET

  1. provider = New Microsoft.VisualBasic.VBCodeProvider(new Dictionary<string, string>() {{"CompilerVersion", "v2.0"}});



Perdonami se è misto C# misto vb.net, ma vb.net non l'ho conosco.

PM
Avatar
dotNET (Member)
Rookie


Messaggi: 26
Iscritto: 13/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 21:26
Lunedì, 13/09/2010
1 con visual studio puoi risalire a quali dipendenze ha un exe, per il framework da utilizzare dipende tutto da quali riferimenti ha il tuo progetto, puoi decidere tu quali componenti usare e di quale versione del framework

PM
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 22:08
Lunedì, 13/09/2010
Innanzitutto grazie per aver risposto...

Testo quotato

Postato originariamente da dotNET:
1 con visual studio puoi risalire a quali dipendenze ha un exe


Potresti spiegarti meglio....ti ricordo che io parlo di un file exe di cui non ho nessun progetto o soluzione, ma solo il file compilato...

Per l'altro problema, mi spiego meglio. Ho sviluppato, utilizzando il framework 2.0, un'applicazione in grado di compilare un file di sorgente con estensione ".vb". Fin qui non ci sono problemi...tuttavia mi aspettavo che l'exe generato dal mio programma facesse riferimento a sua volta al framework 2.0, mentre a quanto pare utilizzava il framework 4.0. Me ne sono accorto in quanto eseguendo il programma sua un computer sprovvisto del framework 4.0, ricevevo un errore relativo alla versione del framework installato. Adesso mi chiedevo se c'è un opzione o qualcosa del genere, in modo che il programma che vado a generare a partire dal sorgente .vb, utilizzi il framework 2.0. Questo è il codice di esempio che utilizzo per compilare il file.vb:
Codice sorgente - presumibilmente VB.NET

  1. Dim exeName As String = "Percorso exe finale"
  2.  
  3.         Dim sourceName As String = "File sorgente con estensione .vb"
  4.         Dim provider As System.CodeDom.Compiler.CodeDomProvider = Nothing
  5.         Dim Options As String = "/t:winexe"
  6.  
  7.         provider = New Microsoft.VisualBasic.VBCodeProvider()
  8.  
  9.         Dim cp As New System.CodeDom.Compiler.CompilerParameters
  10.         cp.GenerateExecutable = True
  11.         cp.OutputAssembly = exeName
  12.         cp.GenerateInMemory = False
  13.         cp.TreatWarningsAsErrors = False
  14.         cp.ReferencedAssemblies.Add("system.dll")
  15.         cp.ReferencedAssemblies.Add("system.drawing.dll")
  16.         cp.ReferencedAssemblies.Add("system.windows.forms.dll")
  17.         cp.CompilerOptions = Options
  18.  
  19.         Dim cr As System.CodeDom.Compiler.CompilerResults = provider.CompileAssemblyFromFile(cp, sourceName)


Ops...vista la posizione del post, devo aver sbagliato qualcosa durante la risposta...scusate :hail:

Ultima modifica effettuata da klez91 il 13/09/2010 alle 22:11
PM
Avatar
dotNET (Member)
Rookie


Messaggi: 26
Iscritto: 13/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 22:23
Lunedì, 13/09/2010
altri metodi oltre a quello che ti illustro ora non ne ho visti ma ci sono sicuramente, per sapere quali dipendenze possiede un exe puoi creare un progetto di installazione in visual studio e fare riferimento all'exe e vedere le dipendenze di quell'exe, poi ti suggerisco di usare reflector se non hai il sorgente,  è un programma che "decompila" l'exe e da li vedi i riferimenti del programma, comunque credo sia improbabile che se compili un progetto senza dipendenze al 4.0 le includa..

PM
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 22:46
Lunedì, 13/09/2010
Ok, perfetto, primo problema risolto, grazie, ho usato Disassembler IL, all'inizio non avevo trovato la versione delle DLL referenziate...poi ci sono riuscito :k:

Testo quotato

Postato originariamente da dotNET:
comunque credo sia improbabile che se compili un progetto senza dipendenze al 4.0 le includa..


Purtroppo, utilizzando quel codice che ti ho mostrato sopra, mi compila l'exe facendo riferimento alle dll del framewok 4.0 quando è installato, altrimenti se il 4.0 non è installato, si comporta normalmente facendo riferimento alle dll del 2.0.
Per questo motivo avevo chiesto se c'è qualche altra opzione da utilizzare quando vado a compilare il file di sorgente ".vb", in modo che l'exe generato faccia riferimento esclusivamente alle dll del framework 2.0 :)

PM
Avatar
dotNET (Member)
Rookie


Messaggi: 26
Iscritto: 13/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 23:02
Lunedì, 13/09/2010
perfetto allora risolto?

PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Up
0
Down
V
Segnala al moderatore
Postato alle 18:46
Martedì, 14/09/2010
Puoi forzare un assembly a girare su una diversa versione del framework cambiandoli la configurazione in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. <configuration>
  2.  <startup>
  3. <supportedRuntime version="v2.0.50727" />
  4. </startup>
  5. </configuration>



Ovviamente in version metti la versione della 2.0 che effettivamente vuoi utilizzare.

Potresti quindi provare a forzare l'avviamento della tua applicazione che genera gli eseguibili in 2.0, e in teoria dovrebbe quindi anche generali in questo modo.

Se così non fosse potresti sempre forzare direttamente i tuoi file generati.

PM
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 22:21
Martedì, 14/09/2010
Scusami netarrow, potresti spiegarti meglio per piacere, nn ho capito bene dove dovrei andare ad agire o cosa modificare.

Tuttavia, mi chiedevo una cosa, non ho provato ancora perché è una cosa che mi è venuta in mente adesso, ma se mettessi al posto del nome della dll, l'intero percorso, ad esempio sostituendo il sorgente precedente in questo modo:
Codice sorgente - presumibilmente Plain Text

  1. cp.ReferencedAssemblies.Add("C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll")


Immagino che questo percorso sia uguale su tutti i computer...che ne pensi ?

PM
Pagine: [ 1 2 ] Precedente | Prossimo