2013-08-26 6 views
38

Ho aggiornato il mio progetto per utilizzare Automapper 3.0.0 e ora la mia build TFS non ha esito positivo. L'errore è la seguente:Automapper 3.0 - Questo tipo non è supportato su questa piattaforma IMapperRegistry

"... System.PlatformNotSupportedException: System.PlatformNotSupportedException: Questo tipo non è supportato su questa piattaforma IMapperRegistry."

C'è qualcuno che può aiutarmi a risolvere questo problema. Nel frattempo, tornerò alla versione precedente poiché sembra funzionare correttamente.

risposta

28

Assicurarsi di aggiungere un riferimento (o aggiungere un riferimento a un pacchetto NuGet) nell'applicazione a AutoMapper e all'assembly AutoMapper.Net4 nell'applicazione principale. Visual Studio ha un problema con la copia dei riferimenti che non copierà i riferimenti che non ritiene vengano utilizzati.

Ad esempio, se si dispone di progetti: - Nucleo - UI

e Core riferimento automapper, assicuratevi di aggiungere un riferimento a interfaccia utente anche per entrambi i gruppi. NuGet lo fa automaticamente, ma MSBuild NON copierà tutti i riferimenti da Core a UI. Il modo più semplice per risolvere questo problema è semplicemente aggiungere il riferimento al pacchetto AutoMapper nell'interfaccia utente.

+0

Sì, sembra essere una mancanza di riferimento a AutoMapper.Net4 assemblaggio. Il mio progetto funziona bene nell'esecuzione in VS2012 (debug o no) ma nell'esecuzione non autonoma, il nostro script usato per copiare l'app nell'ambiente di esecuzione dimentica di copiare il nuovo assembly AutoMapper.Net4.dll nella cartella dell'app. –

+4

Questo mi sembra che entrambi gli assembly debbano essere combinati nella compilazione AutoMapper in quanto vorrei raccogliere molte persone che utilizzano AutoMapper negli assembly 'service layer' e non nel loro proxy web che manifesterebbe il problema. È possibile? Non sono un granché un "riferimento nazista", ma il bisogno di aggiungere l'automapper "inutilizzato" nelle dipendenze upstream sembra che potrebbe esserci una soluzione migliore. –

+3

Per me, ho dovuto installare pacchetto Automapper nel mio progetto di test dell'unità e i miei test di unità hanno funzionato di nuovo. HTH –

38

Abbiamo avuto lo stesso problema sul nostro server di build. MsTest sembrava rimuovere le DLL ritenute non necessarie (nota: questa affermazione è solo un'ipotesi plausibile). Per risolvere il problema, aggiungi una chiamata esplicita a qualcosa in AutoMapper.Net4.dll. Ad esempio, con il ListSourceMapper classe:

var useless = new ListSourceMapper() 

L'aggiunta di questo a un progetto che è condiviso da tutti gli altri progetti ha risolto il tutto per noi. Dove mettere questa riga di codice può variare.

+0

Grazie per questo, ho dovuto fare anche questo. @JimmyBogard FYI nel caso in cui questi dati siano d'aiuto. – Josh

+1

Stupido che devi fare questo genere di cose. Ma fastidiosamente, ha funzionato per me. Grazie! – demoncodemonkey

+0

Sono d'accordo sul fatto che questa è una correzione zoppa, ma tutti i miei test hanno iniziato a passare di nuovo dopo averlo aggiunto, quindi funziona. – Colin

2

Ho avuto lo stesso problema con alcuni test di integrazione più semplici che ho creato.

Si consiglia di utilizzare l'attributo DeploymentItem sulla classe di test anziché un riferimento diretto nel codice. Ad esempio, questo è quello che ho:

[TestClass] 
[DeploymentItem("Unity.config")] 
[DeploymentItem("EntityFramework.SqlServer.dll")] 
**[DeploymentItem("AutoMapper.Net4.dll")]** 
public class MyFancyIntegrationTests 
{ 

è inoltre necessario aggiungere un riferimento, come già detto, usando NuGet, per automapper nel progetto di test.

Per risolvere questo problema, visualizzare la directory bin del progetto più semplice. Dovresti vedere sia Automapper.dll che AutoMapper.Net4.dll se hai un riferimento automatico al progetto. Prima di aggiungere l'attributo DemploymentItem alla classe di test, non vedrai AutoMapper.Net4.dll nella cartella TestResults [MyLatestTestRun]. Ma aggiungi l'attributo e lo farai.

MSTest non gioca bene con iniezione ...

0

Ho avuto lo stesso problema utilizzando squadra della città per eseguire MSTEST e non ha trovato risoluzione.

Si scopre che ho bisogno di utilizzare il Visual Studio Test Runner.

Ho trovato ulteriori informazioni in this blog post.

In Team City 8.1 è disponibile un passo di costruzione per i test VSTest.Console.

Questo ha funzionato per me. Non avevo bisogno di usare lo PowerShell script nel blog qui sopra.

1

Aggiornamento a automapper 3.1.1 ha risolto questo problema per me

Update-Package AutoMapper -Version 3.1.1

Problemi correlati