2013-08-26 58 views
38

我更新了我的項目以使用Automapper 3.0.0現在我的TFS構建不成功。錯誤是:Automapper 3.0 - 此平臺不支持此類型IMapperRegistry

...... System.PlatformNotSupportedException:System.PlatformNotSupportedException:這種類型不支持在此平臺上IMapperRegistry。」

是否有任何人可以幫我解決這個問題。與此同時,我將恢復到以前的版本,因爲這似乎工作正常。

回答

28

確保您在應用程序中向您的主應用程序中的AutoMapper和AutoMapper.Net4程序集添加了引用(或添加NuGet包引用)。 Visual Studio在複製引用時遇到問題,它不會複製它認爲不被使用的引用。

例如,如果您有項目: - 核心 - UI

和核心引用AutoMapper,請確保您添加在UI的引用,以及對兩個程序集。 NuGet會自動執行此操作,但MSBuild不會將所有引用從Core複製到UI。解決這個問題最簡單的方法就是簡單地在UI中添加AutoMapper軟件包引用。

+0

呀,似乎是一個沒有提到AutoMapper.Net4組裝。我的項目工作正常執行VS2012(調試或不),但是當執行獨立不是,我們的腳本用於複製應用程序執行環境忘記將新程序集AutoMapper.Net4.dll複製到應用程序文件夾。 –

+4

在我看來,像兩個程序集都應該在AutoMapper構建中組合起來,因爲我會收集很多人在'服務層'程序集中使用AutoMapper,而不是在它們的webproject中顯示問題。這可能嗎?我並不是一個「參考納粹」,但需要在上游依賴項中添加「未使用」的自動映射器似乎可能會有更好的解決方案。 –

+3

對我來說 - 我不得不將Automapper軟件包安裝到我的單元測試項目中,並且我的單元測試再次運行。 HTH –

38

我們在構建服務器上遇到同樣的問題。 MsTest似乎刪除了它認爲不必要的DLL(注意:這種說法只是一個有教養的猜測)。要修復它,請在AutoMapper.Net4.dll中添加一個顯式調用。例如,與類ListSourceMapper:

var useless = new ListSourceMapper() 

添加這被所有其他項目共享一個固定的項目對我們來說。這行代碼的位置可能會有所不同。

+0

謝謝你,我也必須這樣做。如果這些數據有幫助,@JimmyBogard僅供參考。 – Josh

+1

愚蠢的是,你必須做這種事情。但令人討厭的是,它爲我工作。謝謝! – demoncodemonkey

+0

我同意這是一個跛腳的修復,但所有我的測試開始在添加後再次傳遞,所以它的工作原理。 – Colin

2

我與我創建的一些mstest集成測試有同樣的問題。

我會建議在測試類中使用DeploymentItem屬性,而不是代碼中的直接引用。例如,這是我所:

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

您還需要添加引用,如上面提到的,使用的NuGet,在您的測試項目automapper。

要解決此問題,請查看您的mstest項目的bin目錄。如果您在項目中引用了automapper,則應該同時看到Automapper.dll和AutoMapper.Net4.dll。在將DemploymentItem屬性添加到測試類之前,您不會在TestResults [MyLatestTestRun]文件夾中看到AutoMapper.Net4.dll。但添加屬性,你會的。

MSTest的不很好地發揮注射...

0

我不得不使用Team市運行MSTEST同樣的問題,發現沒有解決。我們需要使用Visual Studio Test Runner

我找到更多信息in this blog post

在Team City 8.1中,有一個用於VSTest.Console測試的構建步驟。

這對我有效。我不需要在上面的博客中使用PowerShell script

1

更新到3.1.1 AutoMapper修復了這個問題對我來說

Update-Package AutoMapper -Version 3.1.1

相關問題