Microsoft.Bcl.Async is Now Stable

Microsoft.Bcl.Async is Now Stable

Rate This
  • Comments 49

It’s done. About five months ago, we shipped our Microsoft.Bcl.Async NuGet package which provides support for the async/await keywords for pre-.NET 4.5 platforms, such as .NET 4, Silverlight 4, and Windows Phone 7.5. Of course, this includes support for portable class libraries as well.

We believe we’ve baked Microsoft.Bcl.Async enough to flip the switch and mark it as stable. This might not sound like a big deal but it is the NuGet equivalent of shipping an RTM.


C-3PO: "Sir, it's quite possible this package is not entirely stable."

Han Solo: "Not entirely stable? Well, I'm glad you're here to tell us

these things. Chewie, take the professor in the back and

show him how to upgrade the NuGet package!"

--- Star Wars as Immo remembers it

What’s the big deal with being stable?

Being stable means the owner of that package states that API and functionality are unlikely to change and therefore suitable for use in production. This also enables 3rd parties to publish stable NuGet packages that depend on our package because NuGet prevents stable packages from depending on pre-release packages.

What about Microsoft.CompilerServices.AsyncTargetingPack?

Before we shipped Microsoft.Bcl.Async we shipped another NuGet package which was provided by the language team to gather feedback on the async and await keywords (“Async Targeting Pack”)

https://www.nuget.org/packages/Microsoft.CompilerServices.AsyncTargetingPack

Our stable release of Microsoft.Bcl.Async officially supersedes the Async Targeting Pack. We haven’t removed it, but we unlisted it on NuGet so that new developers aren’t accidentally using the old version. We’ve also added a readme.txt which is automatically displayed by VS when existing consumers upgrade their package references.

Fixed Issues

The majority of customer issues we’ve seen was due to two issues:

  1. Outdated version of NuGet. In order to use the Async package from a portable class library, you need to run the NuGet 2.1 or higher. To address this in the future, we have worked with the NuGet team and NuGet 2.3 will add this ability. For now, you will need to know to install an updated version of NuGet (see instructions in section “How to Upgrade” below).
  2. Missing reference to the async package from all referencing projects. In order to make the async functionality work across all platforms, we make use of a CLR feature called assembly unification. For that to work properly, all projects must have a reference to the Async NuGet package. Since this can be easy to forget, we’ve added a warning mechanism to our package that tells you what to do. I’ll discuss this in more detail below.

After upgrading, you will see the following build warning:

 

After fixing this, you might see the following warnings:

In both cases, the project that causes the warning is missing a NuGet package reference. Adding these references will fix the warnings.

Tip: If your solution contains many projects, you may want bulk-add the async packages to several projects at once. You can do this by right clicking your solution and selecting Manage NuGet Packages for Solution. Select the NuGet package and click Manage. A dialog appears that enables you to select the projects you want to update.

Add references for Microsoft.Bcl, Microsoft.Bcl.Async, and Microsoft.Bcl.Build to all projects that show the warnings mentioned previously.

Branding

We’ve added some branding to make our packages easier to recognize. Our dotnetframework user now displays the .NET gravatar.

 

and so does our async NuGet package:

 

How to Upgrade

Important: Since our package contains portable class libraries, you need to use NuGet 2.1 or higher. You can check whether you have the latest version by going to Tools | Extensions and Updates. When the Extensions and Updates dialog opens, select Updates | Visual Studio Gallery and look for an entry titled NuGet Package Manager.

In order to upgrade to the RTM version, right click your project and select Manage NuGet Packages. In the resulting dialog, select the Updates section on the left hand side. In the center, the Async NuGet package should show up. Simply click the Update button.

Summary

Microsoft.Bcl.Async is now stable which means you can use it in production. Of course, software is never truly done, so we still want to hear from you if things don’t work for you. You can contact us via comments under this blog posts or via our NuGet contact page. Also, make sure to check out the known issues list.

  • Thanks, this is very helpful for WP7 development. Just updated to the stable release over NuGet.

  • Great work ... I'm absolutely loving the use of NuGet for deploying .NET libs, very very developer friendly!

  • thanks. Now we have an upgrade path.

  • Please add support for Task based WCF Client generation.

  • Fantastic news!

    This is really helping me out writing my WP7 app that has loads of asynchronous network communication. Now I can publish it!

  • Great! Any news about Http Client Libraries hitting RTM soon?

  • Hello,

    having a issue with a Library (.NET 4) that is use BCL. If a .NET 4.5 executable tries to add a references (based on the warning that it is required) to Microsoft.Bcl.Async I end up with a compiler error that this is not allowed.

    Any solution for that?

  • BG: Can you provide more information? What compiler error are you getting? Did you use NuGet to install the package to the .NET 4.5 project?

    David Kean (MSFT)

  • Awesome! Now let's see System.Net.Http stable for WP! Keep up the great work.

  • @Martin Suchan: Thanks for your interest in the portable HttpClient!

    We haven't finalized the release date yet but we are planning on shipping an updated version within the next three weeks or so.

    Right now we aren't planning on making this a stable release as we are adding substantial feature work. However, we are quite confident that the very next release after will be marked as stable.

  • @BG: You should be able to fix the issue by changing the newVersion for the binding redirects in the .NET 4.5 project's app.config from 2.5.19.0 to 4.0.0.0 for System.Runtime and System.Threading.Tasks.

    Daniel Plaisted (MSFT)

  • Our company policy is to have all development workstations offline.  How can I install this and other nuget packages offline?

  • @Jason R, NuGet offers you a way to create your own custom shares. So you can download packages that you need to a non development workstation and configure your dev workstations to consume packages from there, instead of the online mode.

  • Is Microsoft.Bcl.Async now supported for VB Web Applications?

  • Is there a planned .NET 4.1 framework update to push this DLL out to our end users?

Page 1 of 4 (49 items) 1234