6

Próbuję przepisać projekt na Portable Class Library. Problem polega jednak na tym, że używa on Async CTP i nie mogę skompilować go jako biblioteki dla WP i aplikacji Windows Store. Gdybym nie obejmują AsyncCtpLibrary.dll odniesienia, kompilator mówi, żeUżywanie Async CTP z Portable Class Library

typu lub obszaru nazw „Zadania” nie istnieje w przestrzeni nazw „System.Threading” (czy brakuje odwołania do zestawu?)

Jeśli mogę umieścić go, kompilator wciąż mówi te same błędy i dodaje ostrzeżenie:

Podstawowa referencyjna „AsyncCtpLibrary” nie mógł zostać rozwiązany, ponieważ ma zależność pośrednia na zespole ramowym „mscorlib, wersja = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5 c561934e089 ", którego nie można rozwiązać w aktualnie ukierunkowanym środowisku. ".NETPortable, Version = v4.0, Profile = Profile104". Aby rozwiązać ten problem, usuń odwołanie "AsyncCtpLibrary" lub ponownie umieść aplikację w wersji ramowej zawierającej "mscorlib, wersja = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089".

Jak powinienem to wytrzymać?

Odpowiedz

3

Prosta odpowiedź - AsyncCTP nie pracuje w Visual Studio 2012 i nie mogą być używane w żadnym projekcie. Dla .NET 4.0 i Silverlight 5 możesz zainstalować Async Targeting Pack z NuGet, który działa w podobny sposób.
Async/await znajduje się w przenośnej bibliotece klas obsługiwanej tylko podczas kierowania na WinRT, .NET4.5 lub Windows Phone 8, a nawet wtedy użycie jest dość ograniczone. Nie mogę tutaj znaleźć więcej szczegółów, ponieważ pakiet SDK systemu Windows Phone 8 jest nadal objęty umową NDA.
W przypadku WP7.5 i VS2012 nie ma obecnie możliwości korzystania z asynchronizacji/czekania, ale zaktualizowany pakiet docelowy Async dla tej platformy powinien być dostępny w pewnym momencie.
Należy również pamiętać, że AsyncCTP i Async Targeting Pack nie mogą być używane w przenośnych bibliotekach klas i jest mało prawdopodobne, że ulegną one zmianie w przyszłości. W rezultacie w VS2010 nie można używać async/await w Portable Class Libraries.

+0

. Czy powinienem zachować dwie różne wersje klas dla każdego projektu? – passick

+2

Rozwiązałem ten problem w VS2010 - skończyłem z jednym folderem Project dla mojej logiki aplikacji z dwoma plikami csproj, jednym dla WinRT i drugim dla WP7.5. Później odwołuję się do tych samych plików w obu projektach i używam również warunkowych zmiennych kompilacji, takich jak #if itd. To działało całkiem dobrze z pewnymi ograniczeniami. –

+1

Nie możesz nawet wspomnieć, że możesz być zamieszany w wp8sdk - pierwszą zasadę walki z klubem! :) – Stuart

1

Możesz spróbować użyć projektu AsyncBridge zamiast AsyncCTP. Nie wiem, czy to pomoże. Musisz skompilować w VS2012, aby to działało chociaż (nadal można kierować .NET4.0):

+0

Czy jest jakiś inny sposób na zrobienie tego? Ponieważ pracuję nad wpem pod Windows 7 z vs2010. – passick

+1

możesz spróbować skompilować projekt, który potrzebuje wsparcia asynchronicznego w VS2012, a następnie odwołać się do tych bibliotek dll w twoim projekcie VS210 – RoelF

5

Obecnie można używać tylko async/await w trybie przenośnym podczas kierowania na aplikacje .NET 4.5 i Window Store. Poza pakietem przenośnym możesz użyć pakietu Async Targeting Pack dla .NET 4.0 i Silverlight 5.

Mówiąc to, pracujemy nad zaktualizowanym pakietem kierowania asynchronizującym, który dodaje obsługę asynchronizacji/oczekiwania w wersji przenośnej podczas kierowania na telefon 7.5 , Silverlight 5 i .NET 4.0, patrz: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2691068-support-async-in-portable-class-libraries. Zobaczysz to na początku października.

Aktualizacja: Właśnie publikujemy wersję beta tego: http://blogs.msdn.com/b/bclteam/archive/2012/10/22/using-async-await-without-net-framework-4-5.aspx.