Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
13/09/10 16:47
klez91
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:
aaa
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...

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:
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 :hail:
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 :k:

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 :)
aaa
13/09/10 21:02
dotNET
perfetto allora risolto?
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:

<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:
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