I wanted to see how easy it was to build a Portable Class Library, and the answer is very easy. What follows is my experience.
First off create the project...
Next choose the platforms you want to support, you can changes these later via the project settings page:
At this point you're ready to start creating your masterpiece...
For this demo I thought I would revisit the WP7Contrib. Last year I built as part of the WP7Contrib a set of wrapper class around HttpWebRequest & HttpWebResponse classes to make communicating with a RESTful web service easier - ResourceClient.
I was interested to see how this would turn out when implemented as a PCL. Also I was interested to see which framework features weren't supported for the selected target frameworks. I knew I wanted to use Task<T> for the asynchronous nature of my library's interface:
This turned out to be the first issue as Task is not supported out of the box for any of the current WP7 platforms or Silverlight 4. This materialises as build errors:
Can I get round this or does this mean I'm going to have to reduce the number of targeted frameworks?
This seems to be the main problem when building a PCL - the lack of support for certain language\framework features and working out what is and isn't supported.
Initially I was going to use the AsyncBridge package, it has a PCL version, but it only supports Silverlight 5.0 not 4.0. But then yesterday I saw this blog post about Using async/await without .NET Framework 4.5 and this covered all the targets I needed...
Adding the Microsoft.Bcl.Async package along with the Json.Net package I was able to get a successful build. You'll notice in the screenshot below showing the referenced assemblies - out of the box a PCL only has the a reference to .NET Portable Subset:
Testing my PCL was very easy and simple - no need to test on different frameworks, just a standard test library in 4.5 with a reference to nUnit and I was away.
This ability for me is probably the greatest feature of building a PCL for the simple reason being I can now write tests for a platform that is relatively hard to test for (e.g. WP7) in away that can be incorporated into an automated build process. I've used Project Linker to do this before but compared to this that was a hassle:
And after implementing the PCL completely I get all the tests to sucessfully pass:
That pretty much covers my experience of building a simple PCL...
I've pushed this code up onto GitHub here and I also pushed out a NuGet package called Simple.Rest
First off create the project...
Next choose the platforms you want to support, you can changes these later via the project settings page:
At this point you're ready to start creating your masterpiece...
For this demo I thought I would revisit the WP7Contrib. Last year I built as part of the WP7Contrib a set of wrapper class around HttpWebRequest & HttpWebResponse classes to make communicating with a RESTful web service easier - ResourceClient.
I was interested to see how this would turn out when implemented as a PCL. Also I was interested to see which framework features weren't supported for the selected target frameworks. I knew I wanted to use Task<T> for the asynchronous nature of my library's interface:
1: public interface IRestClient
2: {
3: Task<IRestResponse<T>> GetAsync<T>(Uri url) where T : class;
4:
5: Task<IRestResponse> PutAsync<T>(Uri url, T resource) where T : class;
6:
7: Task<IRestResponse<T>> PostAsync<T>(Uri url, T resource) where T : class;
8:
9: Task<IRestResponse> DeleteAsync(Uri url);
10: }
This turned out to be the first issue as Task
Can I get round this or does this mean I'm going to have to reduce the number of targeted frameworks?
This seems to be the main problem when building a PCL - the lack of support for certain language\framework features and working out what is and isn't supported.
Initially I was going to use the AsyncBridge package, it has a PCL version, but it only supports Silverlight 5.0 not 4.0. But then yesterday I saw this blog post about Using async/await without .NET Framework 4.5 and this covered all the targets I needed...
Adding the Microsoft.Bcl.Async package along with the Json.Net package I was able to get a successful build. You'll notice in the screenshot below showing the referenced assemblies - out of the box a PCL only has the a reference to .NET Portable Subset:
Testing my PCL was very easy and simple - no need to test on different frameworks, just a standard test library in 4.5 with a reference to nUnit and I was away.
This ability for me is probably the greatest feature of building a PCL for the simple reason being I can now write tests for a platform that is relatively hard to test for (e.g. WP7) in away that can be incorporated into an automated build process. I've used Project Linker to do this before but compared to this that was a hassle:
And after implementing the PCL completely I get all the tests to sucessfully pass:
That pretty much covers my experience of building a simple PCL...
I've pushed this code up onto GitHub here and I also pushed out a NuGet package called Simple.Rest
Nice post, thank you for sharing. You have really imparted useful knowledge. A very useful post I must say. Awesome content. I bookmarked it for future reference.
ReplyDeleteThanks and keep posting such a informative blogs.
ReplyDeleteDLF Chanakyapuri