Soluzione pulita causa errori di riferimento

Ho cercato di cercare tra le domande poste in precedenza, ma è difficile setacciarle perché sembra che il 99% faccia riferimento a problemi di riferimento dopo una compilazione , mentre il mio problema sono i problemi di riferimento dopo una pulizia .

Il problema è il seguente: sto rilanciando un vecchio progetto – che non ho mai lavorato in precedenza, purtroppo – e tutto compila e funziona bene quando costruisco la soluzione.

Quando faccio una soluzione pulita, ottengo errori di riferimento per un progetto. Il progetto in questione è un progetto di servizio Web Visual Basic. Ha un riferimento a due altri progetti (che sono C #) e quando guardo le Proprietà del progetto, nel riquadro Riferimenti vedo che il percorso utilizzato per il riferimento è SolutionFolder \ Project \ bin \ Debug \ Projectname.dll.

Quindi ogni volta che pulisco la mia soluzione il cestino \ Debug viene svuotato e manca il riferimento. Questo significa che il riferimento è impostato erroneamente?

Capisco dalla ricerca del problema che le Referenze di progetto funzionano in modo diverso per i progetti VB, ma trovo strano che una combinazione di progetti C # e VB darebbe errori di riferimento nel momento in cui pulisci la soluzione.

Qualcuno può aiutarmi / spiegare perché questo accade?


Ok, ho creato dei passaggi per ricreare il problema. Funziona come segue:

Visual Studio -> Nuovo progetto -> Applicazione servizio WCF di Visual Basic

Soluzione -> Aggiungi -> Nuovo progetto -> Libreria di classi C #

Nella libreria di classi aggiungi la seguente funzione

namespace ClassLibrary1 { public class Class1 { public static int Foo() { return 1; } } } 

Progetto WCF di Visual Basic -> Aggiungi -> Riferimento -> C # ClassLibrary (dal progetto Solution)

Build Solution

Nel servizio cambio la funzione GetData come segue:

 Public Function GetData(ByVal value As Integer) As String Implements IService1.GetData Dim foo = ClassLibrary1.Class1.Foo Return String.Format("You entered: {0}", value) End Function 

Build Solution

Ora soluzione pulita.

Visual Studio ora mi dice che ho degli errori di riferimento.

Costruisci di nuovo.

Errori andati.

Come affermato da Maarten , c’è un’importante differenza tra l’ aggiunta di un riferimento al progetto o l’ aggiunta di un riferimento al file . Mi piacerebbe spiegarlo in modo più dettagliato – i crediti originali vanno a Maarten!

Esistono diversi modi per aggiungere un riferimento a un assieme. Per informazioni dettagliate si può dare un’occhiata all’articolo MSDN Procedura: aggiungere o rimuovere riferimenti utilizzando il gestore di riferimento .

Come richiesto dall’opzione, ci concentriamo sul file e sul riferimento del progetto. Mostrerò come VS salva le impostazioni di riferimento e quale impatto hanno sul tuo progetto! Nel mio esempio ho realizzato una soluzione con tre progetti (a, b e c). Il progetto C fa riferimento a A e B.

Riferimento file (Sfoglia)

Riferimento file - come salvato in * .csproj / *. Vbproj

Come possiamo vedere un riferimento al file si riferisce staticamente a un file sul tuo hdd. Nel caso in cui il file a cui si fa riferimento non sia disponibile, verrà visualizzato un avviso di riferimento non funzionante . Pertanto, quando si pulisce la soluzione, tutti gli assiemi già creati verranno ripuliti. Per questo motivo ricevi l’avviso.

Riferimento del progetto (Soluzione – Progetto)

Riferimento del progetto - come salvato in * .csproj / *. Vbproj

Fare riferimento a un progetto salva il GUID del progetto del target . Quindi, quando si costruisce il progetto attuale, VS cercherà il progetto target e lo costruirà anche, se necessario .


Ecco perché MSDN afferma:

Evitare di aggiungere riferimenti a file di output di un altro progetto nella stessa soluzione , poiché questa tattica potrebbe causare errori di compilazione. Utilizzare invece la scheda Soluzione della finestra di dialogo Gestione riferimento per creare riferimenti da progetto a progetto. Questa tattica semplifica lo sviluppo del team consentendo una migliore gestione delle librerie di classi create nei progetti. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi ai riferimenti interrotti.


MODIFICARE

Poiché il tuo progetto contiene diversi linguaggi, VS non riesce a risolvere il tuo riferimento al progetto. Potresti dare un’occhiata a questa simile domanda SO che riguarda due lingue in un’unica soluzione. Apparentemente sebbene sia un riferimento al progetto, VS lo gestisce come un riferimento di file.

All’interno di Visual Studio ci sono diversi servizi linguistici che sono specifici della lingua . Quindi, nel caso in cui si faccia riferimento da un assembly C # a un altro assemblaggio C #, i servizi linguistici corrispondenti gestiranno eventuali errori di riferimento potenziali quando creati da un riferimento di progetto.

Ma nel caso in cui si fa riferimento a un assembly VB.net da C # (o viceversa) non esiste un servizio di lingue “inter-“ per quello. Un esempio molto semplice è che i

tags

relativi all’assembly # ac non verranno visualizzati in un progetto VB.net (come indicato nella domanda / nei commenti collegati).

Penso che il riferimento sia ora impostato sul file dll fisico nella cartella bin\debug anziché nel progetto che crea quel file dll.

Se imposti il ​​riferimento al file dll fisico, visual studio si aspetta sempre che il file sia lì, e altrimenti si lamenterà.

Se imposti il ​​riferimento al progetto che costruisce il file dll, visual studio guarderà al progetto e sarà sempre lì. Visual Studio non si lamenterà di un file dll mancante poiché non è interessato al file dll di riferimento.

Rimuovi il riferimento che hai ora e crea un nuovo riferimento che punta al progetto invece del file dll.

Le dipendenze del progetto sono impostate correttamente in questo progetto di Visual Basic.

È ansible specificare le dipendenze facendo clic con il tasto destro del mouse sul progetto all’interno di Solution Explorer e andando alle Project Dependencies . Assicurati che gli altri due progetti di riferimento siano spuntati qui.

Inoltre, puoi verificare che i tuoi due progetti a cui fa riferimento il progetto Visual Basic siano impostati su Build nella finestra di Configuration Manager per la configurazione di Debug .

Vorrei ringraziare tutti per le risposte rapide e chiare.

Ho provato le soluzioni e ho cercato un altro po ‘, ma non ho risolto il problema e sento che questo post è il più applicabile alla mia situazione:

https://stackoverflow.com/a/3989670/3895498