Использование Async CTP с переносимой библиотекой классов

Я пытаюсь переписать проект в переносимую библиотеку классов. Но проблема в том, что он использует Async CTP, и я не могу скомпилировать его как библиотеку для WP и приложения Windows Store. Если я не включу ссылку AsyncCtpLibrary.dll, компилятор скажет, что

Тип или имя пространства имен Tasks не существует в пространстве имен System.Threading (вам не хватает ссылки на сборку?)

Если я включу его, компилятор по-прежнему сообщает об тех же ошибках и добавляет предупреждение:

Первичная ссылка «AsyncCtpLibrary» не может быть разрешена, поскольку она имеет косвенную зависимость от сборки платформы «mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089», которая не может быть разрешена в текущей целевой платформе. ".NETPortable, Version = v4.0, Profile = Profile104". Чтобы решить эту проблему, либо удалите ссылку «AsyncCtpLibrary», либо перенацелите свое приложение на версию платформы, которая содержит «mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089».

Как мне с этим мириться?


person passick    schedule 26.09.2012    source источник


Ответы (3)


Простой ответ - AsyncCTP не работает в Visual Studio 2012 и не может использоваться ни в одном проекте. Для .NET 4.0 и Silverlight 5 вы можете установить пакет Async Targeting Pack из NuGet, который работает аналогичным образом.
Async / await находится в Portable Class Library, поддерживается только при ориентации на WinRT, .NET4.5 или Windows Phone 8, и даже тогда использование довольно ограничено. Я не могу вдаваться в подробности здесь, потому что Windows Phone 8 SDK все еще находится под NDA.
Для WP7.5 и VS2012 в настоящее время нет способа использовать async / await, но обновлен пакет Async Targeting Pack для этой платформы должен быть доступен когда-нибудь.
Также обратите внимание, что AsyncCTP и Async Targeting Pack нельзя использовать в переносимых библиотеках классов, и маловероятно, что он изменится в будущем. В результате в VS2010 нельзя использовать async / await в переносимых библиотеках классов.

person Martin Suchan    schedule 26.09.2012
comment
Итак, я должен сохранить две разные версии классов для каждого проекта? - person passick; 26.09.2012
comment
Я решал эту проблему в VS2010 - у меня была одна папка Project для моей логики приложения с двумя файлами csproj, один для WinRT, а второй для WP7.5. Затем я ссылаюсь на одни и те же файлы в обоих проектах, а также использую переменные условной сборки, такие как #if и т. Д. Это работало довольно хорошо с некоторыми ограничениями. - person Martin Suchan; 26.09.2012
comment
Вы также находитесь под nda, не говоря уже о том, что вы можете быть вовлечены в wp8sdk - первое правило бойцовского клуба! :) - person Stuart; 27.09.2012

В настоящее время вы можете использовать async / await только в переносимой версии при ориентации на приложения .NET 4.5 и Window Store. Помимо переносимости, вы можете использовать Async Targeting Pack для .NET 4.0 и Silverlight 5.

Тем не менее, мы работаем над обновленным пакетом асинхронного таргетинга, который добавляет поддержку async / await в переносимых при ориентации на Phone 7.5, Silverlight 5 и .NET 4.0, см. http://visualstudio.uservoice.com/forum/121579-visual-studio/questions/2691068-support-async-in-portable-class-libraries. Вы увидите это в начале октября.

Обновление: мы только что выпускаем бета-версию этого: http://blogs.msdn.com/b/bclteam/archive/2012/10/22/using-async-await-без-net-framework-4-5.aspx.

person David Kean    schedule 26.09.2012

Вы можете попробовать использовать проект AsyncBridge вместо AsyncCTP. Не знаю, поможет ли это. Вам нужно будет скомпилировать в VS2012, чтобы это работало (вы все еще можете настроить таргетинг на .NET4.0):

person RoelF    schedule 26.09.2012
comment
Есть ли другой способ сделать это? Потому что я разрабатываю wp под Windows 7 с vs2010. - person passick; 26.09.2012
comment
вы можете попытаться скомпилировать проект, который нуждается в поддержке асинхронности в VS2012, а затем сослаться на эти DLL в своем проекте VS210. - person RoelF; 26.09.2012