2015-06-19 10 views
7

Ho un'applicazione .NET che sembra avere alcune delle sue versioni di dipendenza che cambiano tra il debug e l'esecuzione come un'app di rilascio installata. Mi concentrerò solo sull'assemblaggio Castle.Core per i miei dettagli, ma lo stesso problema si verifica anche con un paio di altri. Un pacchetto NuGet che sto utilizzando richiede Castle.Core come dipendenza (tutti i casi del mio problema sono legati agli assembly originati da NuGet, nel caso in cui sia importante).Modifica Dipendenze di montaggio dopo l'installazione

In Visual Studio, quando installo il pacchetto NuGet con la dipendenza Castle.Core, tutto viene eseguito correttamente, sia nelle configurazioni Debug che Release. Vedo che il riferimento al progetto Castle.Core fa riferimento alla versione 3.3.0.0. Tuttavia, quando ho impacco tutto generato dalla configurazione di rilascio utilizzando InstallShield e installare l'applicazione (con tutti i gruppi che vivono nella stessa directory del programma), ottengo questo errore di runtime:

Could not load file or assembly 'Castle.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Il pacchetto NuGet elenca la sua dipendenza da Castle .Core come (≥3.2.0.0 & & < 4.0.0.0). Sia 3.2.0.0 che 3.3.0.0 soddisfano queste condizioni.

Se eseguo manualmente il downgrade di Castle.Core alla versione 3.2.0.0, il riferimento del mio progetto mostra che è effettivamente stato declassato. Ma quando ho eseguito il progetto in Visual Studio, ottengo:

Could not load file or assembly 'Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

con un'eccezione interna:

Could not load file or assembly 'Castle.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Tuttavia, se poi pacchetto in un programma di installazione e lanciarlo come un'applicazione installata , Funziona.

Per me, è come se l'operazione di assemblaggio degli assembly in un programma di installazione causasse la modifica delle versioni delle dipendenze. Non riesco a immaginare che sia il caso, ma sto avendo problemi a trovare una spiegazione migliore.

Qualcuno può spiegare cosa sta succedendo qui e come posso risolvere il problema?

risposta

12

Ok, ho capito. Primo, facepalm

L'assembly aggiunto tramite NuGet ha una dipendenza di versione specifica su Castle.Core 3.2.0. Tuttavia, poiché tale assembly può ancora funzionare con Castle.Core 3.2.0-4.0.0, viene aggiunto un reindirizzamento dell'associazione all'assieme App.config che indica al caricatore di assembly che tutti gli assembly che richiedono una versione in tale intervallo devono provare a caricare Castle. .Core 3.3.0, che è la versione che viene impacchettata nel mio programma di installazione dell'app. Non mi ero reso conto di non aver incluso il file di configurazione nel mio programma di installazione, quindi la configurazione è stata caricata da Visual Studio senza problemi, mentre l'app installata mancava quel file nella directory dell'app.

+1

Non l'avrei mai capito, grazie per aver risposto alla tua domanda. –

+1

Mi ha salvato un sacco di tempo! –

+0

Quindi la soluzione era includere 'App.config' nel tuo programma di installazione? – Jess

3

Ho avuto lo stesso problema, ho appena eseguito il downgrade alla versione di Moq e ha funzionato.

+0

Ho provato a correggere i reindirizzamenti dell'assieme ma è diventato sempre più complicato. Il downgrade ha funzionato per me. – Phill

+0

Bello. Grazie –

Problemi correlati