View Full Version : [C#]Compilazione di progetti creati da altri
Mattyfog
28-05-2010, 13:28
Molto spesso, scaricando da internet progetti creati da altre persone mi trovo di fronte a molti errori durante la fase di compilazione: ma come è possibile che allora i programmatori che hanno creato il software riuscissero a compilarlo?
L'ultimo caso è stato con il codice sorgente di WatiN che mi serve per poter interagire con Firefox.
Dunque, prima di tutto mi si genera un errore poichè manca un file .snk . Tommino, gentilmente, mi ha risposto dicendomi che potevo ricrearlo dalle proprità del progetto. Così sono andatto su Progetto\Proprietà di <nome progetto>\Firma ed ho creato un nuovo file .snk (tra l'altro senza password, a cosa serve?). A questo punto spero di poter compilare, ma niente durante la compilazione mi viene ancora detto che il file non esiste! :eek: Infatti il file viene creato ma in una posizione che non è quella in cui viene cercato durante la compilazione. Bah :mbe: Allora sempre da Progetto\Proprietà di <nome progetto>\Firma clicco su sfoglia e seleziono il file snk. Ma ancora non funziona, stesso problema di prima. :muro: Vabbè, mi dico, magari lo inganno con un minimo di astuzia elementare: copio il file snk nella posizione in cui lo cerca.
Ora apparentemente il file .snk lo trova, il problema è che il progetto presenta ben 57 errori + un errore (che suppongo generi gli altri) che dice che è impossibile trovare il riferimento System.Core. A questo punto credo che il problema sia che sto lavorando in .NET 3.5 con visual studio 2008.
Quindi? Che faccio? Devo scaricare l'sdk 2.0? Potrebbe darmi problemi la sua installazione? O invece il problema è un altro?
astorcas
28-05-2010, 13:39
Il fatto che il file snk sia senza password non vuol dire nulla, quel file serve a firmare l'assembly, e il meccanismo è valido anche se l'snk non è protetto. Inoltre il fatto che tu abbia installato vs2008 col framework 3.5 non significa che non puoi utilizzare versioni precedenti.
Secondo me il problema è che hai una versione differente di System.Core rispetto a quella richiesta dal progetto. Dovresti controllare nella GAC
tomminno
28-05-2010, 14:20
Ora apparentemente il file .snk lo trova, il problema è che il progetto presenta ben 57 errori + un errore (che suppongo generi gli altri) che dice che è impossibile trovare il riferimento System.Core. A questo punto credo che il problema sia che sto lavorando in .NET 3.5 con visual studio 2008.
Quindi? Che faccio? Devo scaricare l'sdk 2.0? Potrebbe darmi problemi la sua installazione? O invece il problema è un altro?
System.Core è una dll del 3.5 se non la trova probabilmente è perchè Visual Studio è impostato per compilare il progetto con il 2.0.
Mattyfog
28-05-2010, 14:38
Compilando per 3.5 quest'errore scompare ma ne rimangono 57. :eek:
Eheh molti errori sembrano simili... Qualche suggerimento?
Errore 19 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'WatiN.Core.UtilityClasses.LazyList<int>' 64 29
Errore 25 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'WatiN.Core.UtilityClasses.LazyList<int>' 82 29
Errore 31 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'WatiN.Core.UtilityClasses.LazyList<int>' 98 32
Errore 33 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'WatiN.Core.UtilityClasses.LazyList<int>' 101 32
Errore 36 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'WatiN.Core.UtilityClasses.LazyList<int>' 104 32
Errore 1 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 34 24
Errore 8 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 47 24
Errore 14 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 60 24
Errore 21 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 78 24
Errore 28 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 96 24
Errore 40 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 112 24
Errore 46 'WatiN.Core.UtilityClasses.LazyList<T>' non contiene un costruttore che accetta argomenti '1' 132 24
Errore 42 'WatiN.Core.UtilityClasses.LazyList<int>' non contiene una definizione di 'GetEnumerator' e non è stato trovato alcun metodo di estensione 'GetEnumerator'che accetta un primo argomento di tipo 'WatiN.Core.UtilityClasses.LazyList<int>'. Probabilmente manca una direttiva using o un riferimento a un assembly. 114 48
Errore 3 'WatiN.Core.UtilityClasses.LazyList<int>' non contiene una definizione di 'Count' e non è stato trovato alcun metodo di estensione 'Count'che accetta un primo argomento di tipo 'WatiN.Core.UtilityClasses.LazyList<int>'. Probabilmente manca una direttiva using o un riferimento a un assembly. 36 37
Errore 5 'WatiN.Core.UtilityClasses.LazyList<int>' non contiene una definizione di 'Count' e non è stato trovato alcun metodo di estensione 'Count'che accetta un primo argomento di tipo 'WatiN.Core.UtilityClasses.LazyList<int>'. Probabilmente manca una direttiva using o un riferimento a un assembly. 39 37
Errore 10 'WatiN.Core.UtilityClasses.LazyList<int>' non contiene una definizione di 'Count' e non è stato trovato alcun metodo di estensione 'Count'che accetta un primo argomento di tipo 'WatiN.Core.UtilityClasses.LazyList<int>'. Probabilmente manca una direttiva using o un riferimento a un assembly. 49 37
Errore 11 'WatiN.Core.UtilityClasses.LazyList<int>' non contiene una definizione di 'Count' e non è stato trovato alcun metodo di estensione 'Count'che accetta un primo argomento di tipo 'WatiN.Core.UtilityClasses.LazyList<int>'. Probabilmente manca una direttiva using o un riferimento a un assembly. 52 37
Errore 48 'WatiN.Core.UtilityClasses.LazyList<int>' non contiene una definizione di 'CopyTo' e non è stato trovato alcun metodo di estensione 'CopyTo'che accetta un primo argomento di tipo 'WatiN.Core.UtilityClasses.LazyList<int>'. Probabilmente manca una direttiva using o un riferimento a un assembly. 135 18
Errore 2 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 34 28
Errore 9 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 47 28
Errore 15 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 60 28
Errore 22 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 78 28
Errore 29 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 96 28
Errore 41 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 112 28
Errore 47 'WatiN.Core.UtilityClasses.LazyList<int>' è inaccessibile a causa del livello di protezione 132 28
Errore 57 'WatiN.Core.IE' non contiene una definizione per 'GetMajorIEVersion' 639 20
Errore 30 'WatiN.Core.FireFox' non contiene una definizione per 'CurrentProcess' 97 33
Errore 32 'WatiN.Core.FireFox' non contiene una definizione per 'CurrentProcess' 100 33
Errore 20 'WatiN.Core.DialogHandlers.DialogHandlerHelper' non contiene una definizione per 'GetDialogHandlers' 72 54
Errore 16 'WatiN.Core.DialogHandlers.DialogHandlerHelper' non contiene una definizione di 'HandlePossibleCandidate' e non è stato trovato alcun metodo di estensione 'HandlePossibleCandidate'che accetta un primo argomento di tipo 'WatiN.Core.DialogHandlers.DialogHandlerHelper'. Probabilmente manca una direttiva using o un riferimento a un assembly. 61 33
Errore 7 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 42 29
Errore 17 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 62 23
Errore 37 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 105 23
Errore 45 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 127 29
Errore 51 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 150 23
Errore 52 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 151 23
Errore 53 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'On' e non è stato trovato alcun metodo di estensione 'On'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 152 23
Errore 18 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Off' e non è stato trovato alcun metodo di estensione 'Off'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 63 23
Errore 38 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Off' e non è stato trovato alcun metodo di estensione 'Off'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 106 23
Errore 39 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Off' e non è stato trovato alcun metodo di estensione 'Off'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 109 23
Errore 54 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Off' e non è stato trovato alcun metodo di estensione 'Off'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 153 23
Errore 55 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Off' e non è stato trovato alcun metodo di estensione 'Off'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 154 23
Errore 56 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Off' e non è stato trovato alcun metodo di estensione 'Off'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 155 23
Errore 26 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Highlight' e non è stato trovato alcun metodo di estensione 'Highlight'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 84 23
Errore 27 'WatiN.Core.Actions.HighlightAction' non contiene una definizione di 'Highlight' e non è stato trovato alcun metodo di estensione 'Highlight'che accetta un primo argomento di tipo 'WatiN.Core.Actions.HighlightAction'. Probabilmente manca una direttiva using o un riferimento a un assembly. 85 23
Errore 4 'WatiN.Core.Actions.HighlightAction' non contiene un costruttore che accetta argomenti '1' 39 35
Errore 12 'WatiN.Core.Actions.HighlightAction' non contiene un costruttore che accetta argomenti '1' 58 29
Errore 23 'WatiN.Core.Actions.HighlightAction' non contiene un costruttore che accetta argomenti '1' 80 29
Errore 34 'WatiN.Core.Actions.HighlightAction' non contiene un costruttore che accetta argomenti '1' 102 29
Errore 43 'WatiN.Core.Actions.HighlightAction' non contiene un costruttore che accetta argomenti '1' 122 35
Errore 49 'WatiN.Core.Actions.HighlightAction' non contiene un costruttore che accetta argomenti '1' 143 29
Errore 6 'WatiN.Core.Actions.HighlightAction' è inaccessibile a causa del livello di protezione 39 39
Errore 13 'WatiN.Core.Actions.HighlightAction' è inaccessibile a causa del livello di protezione 58 33
Errore 24 'WatiN.Core.Actions.HighlightAction' è inaccessibile a causa del livello di protezione 80 33
Errore 35 'WatiN.Core.Actions.HighlightAction' è inaccessibile a causa del livello di protezione 102 33
Errore 44 'WatiN.Core.Actions.HighlightAction' è inaccessibile a causa del livello di protezione 122 39
Errore 50 'WatiN.Core.Actions.HighlightAction' è inaccessibile a causa del livello di protezione 143 33
tomminno
28-05-2010, 14:52
Compilando per 3.5 quest'errore scompare ma ne rimangono 57. :eek:
Eheh molti errori sembrano simili... Qualche suggerimento?
"Probabilmente manca una direttiva using o un riferimento a un assembly"
Ti dice niente?
Mattyfog
28-05-2010, 15:14
Ops :D
Però scusa è un riferimento a un file del progetto... Cioè perchè distribuiscono codice errato?? Mi pare strano. Visto che il codice nel 99% dei casi il programmatore che l'ha creato riusciva a compilarlo (poichè compare una versione release del progetto e dubito che sia stato modificato in seguito) non è che è un problema della mia versione di visual studio?
Mattyfog
30-05-2010, 17:27
Il problema potrebbe essere dovuto al fatto che io, avendo la versione express, non posso aprire soluzioni multiprogetto e che quindi in fase di compilazione ho degli errori perchè non posso accedere a un progetto?
Qualcuno di voi con Visual Studio non express potrebbe provare a compilarlo? :help:
RaouL_BennetH
30-05-2010, 20:37
Il problema potrebbe essere dovuto al fatto che io, avendo la versione express, non posso aprire soluzioni multiprogetto e che quindi in fase di compilazione ho degli errori perchè non posso accedere a un progetto?
Qualcuno di voi con Visual Studio non express potrebbe provare a compilarlo? :help:
E' così :)
Non avendo tu le varie soluzioni caricate, i riferimenti devi metterli a mano.
Mattyfog
31-05-2010, 14:19
Non c'è nessuno così gentile da scaricare questo file http://downloads.sourceforge.net/project/watin/WatiN%202.x/2.0%20Release%20candidates/WatiN-2.0.20.1089-net-2.0.zip andare nel codice sorgente (cartellar Source\src) e nel progetto core modificare il metodo GetExecutablePath() del file Firefox.cs da private static string GetExecutablePath() a public string GetExecutablePath() (non dovrebbe generare alcun problema no?) e poi inviarmi file a mattyfog@tele2.it ? Grazie infinite
EDIT: se no come posso mettere i riferimenti a mano?
Kralizek
31-05-2010, 14:36
per caso, hai solo lontanamente idea della semantica dietro al cambio da te proposto?
Mattyfog
31-05-2010, 14:43
Purtroppo il mio studio sui libri di C# (iniziato 3 giorni fa) per ora arriva solo ai tipi di variabili :D
Non ho precisamente idea di cosa possa cambiare, ciò che so è che dopo dovrei poter eseguire l'override della funzione.
Ma questo cambiamento al codice quindi è possibile o è un gran errore?
Kralizek
31-05-2010, 15:08
allora fai un salto da queste parti
http://msdn.microsoft.com/en-us/library/79b3xss3%28VS.80%29.aspx ;)
Mattyfog
31-05-2010, 15:43
Penso che basti la prima riga a motivare l'impossibilità del cambiamento:
Static classes and class members are used to create data and functions that can be accessed without creating an instance of the class
Mmm dunque, se va mantenuto static non posso effettuarne l'override.
E non esiste nessun modo, modificando nel codice sorgente di WatiN solo il metodo GetExecutablePath(), per poterne effettuare l'override?
Il punto è che se anche una di voi buone anime mi compilasse WatiN vorrei fare in modo da poter modificare GetExecutablePath() senza dover richiedere il vostro aiuto per compilare il progetto. Per questo pensavo che un override potesse fare al caso mio. Altrimenti forse dovrei fare in modo che GetExecutablePath() faccia riferimento a una libreria che creo io e che quindi posso modificare quando voglio. Altre idee? (nel caso l'unica soluzione sia l'ultima mia proposta, posso modificare il progetto aggiungendo un riferimento a una mia dll o voi dopo, aprendo il progetto che include il riferimento alla mia dll, avrete un errore in fase di compilazione perchè l'ho aperto con il mio Visual Studio express che quindi potrebbe aver danneggiato il progetto che, ricordo, è multisoluzione?)
astorcas
31-05-2010, 15:54
Penso che basti la prima riga a motivare l'impossibilità del cambiamento:
Static classes and class members are used to create data and functions that can be accessed without creating an instance of the class
Mmm dunque, se va mantenuto static non posso effettuarne l'override.
E non esiste nessun modo, modificando nel codice sorgente di WatiN solo il metodo GetExecutablePath(), per poterne effettuare l'override?
Il punto è che se anche una di voi buone anime mi compilasse WatiN vorrei fare in modo da poter modificare GetExecutablePath() senza dover richiedere il vostro aiuto per compilare il progetto. Per questo pensavo che un override potesse fare al caso mio. Altrimenti forse dovrei fare in modo che GetExecutablePath() faccia riferimento a una libreria che creo io e che quindi posso modificare quando voglio. Altre idee? (nel caso l'unica soluzione sia l'ultima mia proposta, posso modificare il progetto aggiungendo un riferimento a una mia dll o voi dopo, aprendo il progetto che include il riferimento alla mia dll, avrete un errore in fase di compilazione perchè l'ho aperto con il mio Visual Studio express che quindi potrebbe aver danneggiato il progetto che, ricordo, è multisoluzione?)
Ma esattamente perché vuoi fare l'override di sto povero metodo?
Mattyfog
31-05-2010, 16:02
Perchè questo povero metodo richiama un altro metodo per cercare il percorso di installazione di firefox prendendolo dal registro di sistema mentre invece questo percorso ho bisogno di fornirglielo io perchè uso Firefox Portable all'interno dell'applicazione (e Firefox Portable come dice il nome è una versione senza installazione).
astorcas
31-05-2010, 16:08
Perchè questo povero metodo richiama un altro metodo per cercare il percorso di installazione di firefox prendendolo dal registro di sistema mentre invece questo percorso ho bisogno di fornirglielo io perchè uso Firefox Portable all'interno dell'applicazione (e Firefox Portable come dice il nome è una versione senza installazione).
beh se questo metodo viene usato a tappeto nell'assembly allora dovrai modificarlo per le tue esigenze. E in ogni caso se fosse un metodo d'istanza e tu facessi l'override non risolveresti nulla perché la libreria userebbe comunque il metodo della classe base. Quindi c'è qualcosa che non va alla base di quello che vuoi fare... credo! :)
Mattyfog
31-05-2010, 16:12
Mmm credevo che con un override la libreria avrebbe usato il mio metodo... Mmm...
Quindi adotto la soluzione del inserire un riferimento a una mia libreria?
Kralizek
31-05-2010, 16:15
"buildati" sta benedetta libreria, attaccala al tuo progetto, crea un wrapper intorno a questa classe e cambi l'implemetazione del metodo :)
Mattyfog
31-05-2010, 16:22
Libreria creata.
Però mi potresti spiegare meglio cosa intendi con creare un wrapper?
EDIT: Intendi semplicemente di inserire un richiamo mio metodo dentro GetExecutablePatch()? Se si non posso farlo poichè come detto non avendo visual studio completo non posso compilare il progetto.
Mattyfog
01-06-2010, 14:36
Faccio un up nella speranza di trovare un'anima pia che mi compili il progetto. :)
Mattyfog
01-06-2010, 19:31
Adesso provo con visual studio express 2010.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.