2013-08-26 27 views
38

Ich habe mein Projekt aktualisiert, um Automapper 3.0.0 zu verwenden, und jetzt ist mein TFS-Build nicht erfolgreich. Der Fehler ist der folgende:Automapper 3.0 - Dieser Typ wird auf dieser Plattform nicht unterstützt IMapperRegistry

... System.PlatformNotSupportedException: System.PlatformNotSupportedException: Diese Art auf dieser Plattform nicht unterstützt wird IMapperRegistry.“

Gibt es jemanden, der mich zu lösen dieses Problem helfen kann. In der Zwischenzeit werde ich zur vorherigen Version zurückkehren, da das scheint gut zu funktionieren.

Antwort

28

Stellen Sie sicher, dass Sie in Ihrer Anwendung eine Referenz (oder eine NuGet-Paketreferenz) in Ihrer Anwendung sowohl AutoMapper als auch der AutoMapper.Net4-Assembly hinzufügen. Visual Studio hat ein Problem mit dem Kopieren von Referenzen, dass es keine Referenzen kopiert, von denen es nicht glaubt, dass sie verwendet werden.

Zum Beispiel, wenn Sie Projekte haben: - Kern - UI

und Core verweist AutoMapper, stellen Sie sicher, dass Sie auch für beide Baugruppen eine Referenz in UI hinzuzufügen. NuGet tut dies automatisch, aber MSBuild kopiert NICHT alle Referenzen von Core auf UI. Die einfachste Möglichkeit, dies zu beheben, besteht darin, einfach die AutoMapper-Paketreferenz in der Benutzeroberfläche hinzuzufügen.

+0

Ja, scheint AutoMapper.Net4 Montage ein Mangel an Referenz. Mein Projekt funktioniert einwandfrei innerhalb von VS2012 (Debuggen oder nicht), aber wenn es nicht eigenständig ausgeführt wird, vergisst unser Skript, das die App in die ausführende Umgebung kopiert, die neue Assembly AutoMapper.Net4.dll in den App-Ordner zu kopieren. –

+4

Das sieht für mich so aus, als sollten beide Assemblies im AutoMapper-Build kombiniert werden, da ich feststellen würde, dass viele Leute AutoMapper in 'Service-Layer'-Assemblies verwenden und nicht in ihrem Web-Probject, was das Problem manifestieren würde. Ist das möglich? Ich bin nicht viel von einem "Referenz-Nazi", aber es scheint, als könnte es eine bessere Lösung geben, wenn man den Autoadapter, der in Upstream-Abhängigkeiten "unbenutzt" ist, hinzufügen muss. –

+3

Für mich - ich musste Automapper zu meinem Unit-Test-Projekt installieren und meine Unit-Tests funktionierten wieder. HTH –

38

Wir hatten das gleiche Problem auf unserem Build-Server. MsTest schien DLLs zu entfernen, die er für unnötig hielt (Anmerkung: Dieser Anspruch ist nur eine begründete Schätzung). Um es zu beheben, fügen Sie einen expliziten Aufruf zu etwas in AutoMapper.Net4.dll hinzu. Zum Beispiel mit der Klasse ListSourceMapper:

var useless = new ListSourceMapper() 

Addiert man diese zu einem Projekt, das von allen anderen Projekten gemeinsam genutzt wird reparierte es für uns. Wo diese Codezeile platziert wird, kann variieren.

+0

Danke dafür, das musste ich auch machen. @JimmyBogard FYI falls diese Daten helfen. – Josh

+1

Dumm, dass Sie so etwas tun müssen. Aber ärgerlich, es hat für mich funktioniert. Vielen Dank! – demoncodemonkey

+0

Ich stimme zu, dass dies ein lahmes Update ist, aber alle meine Tests begannen nach dem Hinzufügen wieder zu passieren, so dass es funktioniert. – Colin

2

Ich hatte das gleiche Problem mit einigen MSTest Integration Tests, die ich erstellt habe.

Ich würde empfehlen, das DeploymentItem-Attribut für Ihre Testklasse anstelle einer direkten Referenz im Code zu verwenden. Zum Beispiel ist es das, was ich habe:

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

Sie müssen auch einen Verweis hinzuzufügen, wie oben erwähnt, nuget Verwendung in Ihrem Testprojekt AutoMapper.

Um dies zu beheben, sehen Sie sich das Verzeichnis bin Ihres Mystest-Projekts an. Sie sollten sowohl Automapper.dll als auch AutoMapper.Net4.dll sehen, wenn Sie im Projekt auf den Automapper verwiesen haben. Bevor Sie der Testklasse das Attribut DemploymentItem hinzufügen, wird AutoMapper.Net4.dll im Ordner TestResults [MyLatestTestRun] nicht angezeigt. Aber füge das Attribut hinzu und du wirst es tun.

MSTest nicht gut mit Einspritzung spielt ...

0

Ich hatte das gleiche Problem mit Team-Stadt MSTEST und fand keine Auflösung auszuführen.

Es stellt sich heraus, dass ich die Visual Studio Test Runner verwenden musste.

Ich fand mehr Informationen in this blog post.

In Team City 8.1 gibt es einen Build-Schritt für VSTest.Console Tests.

Das funktionierte für mich. Ich brauchte die PowerShell script im obigen Blog nicht zu verwenden.

1

Update auf AutoMapper 3.1.1 dieses Problem für mich festgelegt

Update-Package AutoMapper -Version 3.1.1

Verwandte Themen