13/09/10 19:26
dotNET
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
aaa
13/09/10 20:08
klez91
Innanzitutto grazie per aver risposto...
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:
Ops...vista la posizione del post, devo aver sbagliato qualcosa durante la risposta...scusate
Postato originariamente da dotNET:
1 con visual studio puoi risalire a quali dipendenze ha un exe
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:
Dim exeName As String = "Percorso exe finale" Dim sourceName As String = "File sorgente con estensione .vb" Dim provider As System.CodeDom.Compiler.CodeDomProvider = Nothing Dim Options As String = "/t:winexe" provider = New Microsoft.VisualBasic.VBCodeProvider() Dim cp As New System.CodeDom.Compiler.CompilerParameters cp.GenerateExecutable = True cp.OutputAssembly = exeName cp.GenerateInMemory = False cp.TreatWarningsAsErrors = False cp.ReferencedAssemblies.Add("system.dll") cp.ReferencedAssemblies.Add("system.drawing.dll") cp.ReferencedAssemblies.Add("system.windows.forms.dll") cp.CompilerOptions = Options 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
Ultima modifica effettuata da klez91 13/09/10 20:11
aaa
13/09/10 20:23
dotNET
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..
aaa
13/09/10 20:46
klez91
Ok, perfetto, primo problema risolto, grazie, ho usato Disassembler IL, all'inizio non avevo trovato la versione delle DLL referenziate...poi ci sono riuscito
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
Postato originariamente da dotNET:
comunque credo sia improbabile che se compili un progetto senza dipendenze al 4.0 le includa..
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
aaa
14/09/10 16:46
netarrow
Puoi forzare un assembly a girare su una diversa versione del framework cambiandoli la configurazione in questo modo:
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.
<configuration> <startup> <supportedRuntime version="v2.0.50727" /> </startup> </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.
aaa
14/09/10 20:21
klez91
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:
Immagino che questo percorso sia uguale su tutti i computer...che ne pensi ?
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:
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 ?
aaa