Async Ожидание таргетинга на требования к развертыванию 4.0
Microsoft обновила таргетинг async/wait для .net 4.0 и теперь предлагает использовать библиотеку Microsoft.Bcl.Async, доступную на nuget.
В примечаниях к выпуску указано, что требуется .net 4 с KB 2468871.
- Требуется ли KB2468871 требование сборки или требование развертывания?
- Какой аспект KB2468871 делает необходимым?
Ответы
Ответ 1
Цитата из http://support.microsoft.com/kb/2468871/en-us
Функция 5 Изменения в поддерживаемых портативных библиотеках. Эти изменения включают обновления API и модификации связующего. Это обновление позволяет CLR, чтобы успешно связываться с портативными библиотеками, чтобы одна DLL может работать на .NET Framework 4, на Silverlight, на Xbox или на Windows Phone. Это обновление добавляет общедоступные API Silverlight к .NET. Framework 4 в том же месте. Подписи API останутся согласованный по всей платформе. Все модификации 100% совместим и не будет нарушать существующий код.
Оказывается, без этого kb установлена ошибка Microsoft.Bcl(она пытается привязать к Silverlight System.Core
библиотеке, которая не находится в системе)
Ответ 2
Единственный безопасный способ использования async/await в .net 4.0, поддерживающий пользователей xp без установки KB2468871, - это установка async CTP v3 в vs 2010 SP1, nuget microsoft bcl async и реализация собственных AsyncTaskMethodBuilder и AsyncVoidMethodBuilder. (и удалите ссылку async ctp dll)
Это единственный способ реализации асинхронной асинхронной асинхронной CTP в .net4, vs 2010, без установки vs 2012, net 4.5 или KB2468871 WILL WORK.
В любой другой готовой к использованию реализации async на .net4 там используется новый способ реализации и переадресации асинхронного кода в процессе компиляции, поэтому вам необходимо установить async CTP, это единственная реализация async для .net4, модифицируя компилятор csc для его поддержки.
Microsoft изменила использование компилятора типов в С# 5 и .net 4.5 для генерации асинхронного кода, в основном они могли бы легко сделать это .net4, но вместо этого они решили заставить любого установить vs 2012 и .net 4.5, что-то что неприемлемо для компаний, которым необходимо поддерживать пользователей xp, потому что у вас не будет возможности увидеть и исправить ошибки .net 4, которые были исправлены в .net 4.5.
Microsoft.Bcl.Async, AsyncTargetingPack, AsyncBridge, все они НЕ РАБОТАЮТ без установленного .net 4.5 или KB2468871 для .net 4.0.
Они ВСЕ РАБОТАЮТ, если вы внедрили AsyncTaskMethodBuilder и AsyncVoidMethodBuilder самостоятельно, вы даже можете скопировать/вставить его реализацию из async ctp v3 с небольшими изменениями, и это будет просто работать.
Итак, если вы действительно обеспокоены требованием к развертыванию и другими вещами, связанными с поддержкой пользователей xp, я бы настоятельно рекомендовал это сделать, я описал.
Ответ 3
Подробные сведения о выпуске:
при ориентации на любую из следующих платформ (или более высоких версий):
• .NET Framework 4.0 (with KB2468871)
Итак, это означает, что вы нацеливаетесь на 4.0 w/KB2468871, как в KB2468871, должны быть развернуты на целевом компьютере для поддержки библиотеки.
Нет подробностей о том, какие части KB2468871 необходимы для Microsoft.Bcl.Async. Я предлагаю вам связаться с командой BCL, опубликовать в блоге или связаться с владельцами пакетов Nuget для получения более подробной информации. Я не понимаю, что знание того, какие части KB необходимы, будет иметь значение...
Ответ 4
Можно использовать AsyncBridge, переносимый без KB2468871, для получения функции async/await. https://www.nuget.org/packages/AsyncBridge.Portable/