The “Roslyn” Analyzers are a great new feature that shipped in Visual Studio 2015. One nice thing about them, is you can still add them to a project even if the target platform for a project is not .NET 4.6. This makes sense, as the analyzers just run as part of the compiler – they don’t affect the generated code in any way.
This also means you can safely add analyzers to a project and get all the warnings/errors when using Visual Studio 2015, but you can still open the same project in an older version of Visual Studio and the analyzers are just ignored.
Sometimes you want to suppress a specific warning. It turns out there’s two ways to do this:
The first is the same that you would have done to suppress an old FxCop/Code Analysis violation – using the System.Diagnostics.CodeAnalysis.SuppressMessageAttribute attribute.
It turns out, the only bit that Roslyn really cares about is the second parameter. As long as it starts with a valid CheckId, then that violation will be suppressed. My observation is that the first parameter (category) doesn’t seem to matter too much.
The new compiler is much more flexible in disabling warnings and errors. You can now use a compiler pragma to disable a particular warning or error code – and the code isn’t just for the C# language, it can be for an analyzer too. eg.
#pragma warning disable SA1514
One advantage to using pragmas is that you can re-enable them if you want to limit the scope of the pragma to just a particular block of code in a single file.
The only problem with the pragma approach above is if you try and compile the source code with the older non-Roslyn C# compilers. They haven’t ever heard of this ‘SA1514’ that you’re referring to and will generate a compiler error. The workaround is to wrap the pragmas with a conditional block, like this:
#pragma warning disable SA1514
The final part is to define ‘VS2015’. Do this by editing the .csproj file and adding the following block (insert it after the last configuration/platform-specific PropertyGroup)
<DefineConstants Condition="$(VisualStudioVersion) >= 14 ">$(DefineConstants);VS2015</DefineConstants>
This has the effect of defining a conditional constant only when we’re compiling with Visual Studio 14 (aka 2015) or above. For earlier versions, the constant is undefined and so the pragma is not visible to the compiler.
I thought it might be my imagination, but running
powercfg.exe /batteryreport shows the truth – my laptop battery isn’t what it used to be.
Battery capacity history
| PERIOD | FULL CHARGE CAPACITY | DESIGN CAPACITY |
| — | — | — |
| 2015-11-17 - 2015-11-23 | 5,656 mWh | 6,600 mWh |
| 2015-11-23 - 2015-11-30 | 5,480 mWh | 6,600 mWh |
| 2015-11-30 - 2015-12-07 | 5,177 mWh | 6,600 mWh |
| 2015-12-07 - 2015-12-14 | 5,177 mWh | 6,600 mWh |
| 2015-12-14 - 2015-12-21 | 5,177 mWh | 6,600 mWh |
| 2015-12-21 - 2015-12-28 | 5,177 mWh | 6,600 mWh |
| 2015-12-28 - 2016-01-04 | 5,129 mWh | 6,600 mWh |
| 2016-01-04 - 2016-01-11 | 4,059 mWh | 6,600 mWh |
| 2016-01-12 | 3,276 mWh | 6,600 mWh |
| 2016-01-13 | 3,276 mWh | 6,600 mWh |
| 2016-01-14 | 3,276 mWh | 6,600 mWh |
| 2016-01-15 | 3,276 mWh | 6,600 mWh |
| 2016-01-16 | 3,276 mWh | 6,600 mWh |
| 2016-01-17 | 3,276 mWh | 6,600 mWh |
| 2016-01-18 | 3,276 mWh | 6,600 mWh |
| 2016-01-19 | 3,276 mWh | 6,600 mWh |
| 2016-01-20 | 3,276 mWh | 6,600 mWh |
| 2016-01-21 | 3,276 mWh | 6,600 mWh |
| 2016-01-22 | 3,276 mWh | 6,600 mWh |
This is not the original battery that came with my Dell XPS 1645. I originally had two 90mWh batteries, but both of those wore out. The current replacement was the only one I could find online (from a 3rd party – unfortunately Dell weren’t selling theirs anymore). I bought the 1645 back in 2010, so it will turn 6 in April – that’s not a bad effort for a laptop that has been lugged around a fair bit.
And so my mind now turns to thinking about getting a replacement laptop…
My initial specs are:
- Gen 6 i7 or Xeon CPU
- Minimum 16GB RAM (Prefer 16 would not be the maximum)
- Minimum 512GB SSD (Ideally PCIe interface)
- Decent screen resolution
- Lighter than my 1645 (3.06KG/6.6lb according to the kitchen scales)
- A bit smaller than the 1645 (380x260mm)
Let me know if you have any other suggestions or recommendations?
There’s been a few announcements lately that will interest you if you’re a developer:
Know it. Prove it.
Microsoft Virtual Academy are running their “Know it. Prove it” challenge again during the month of February. It’s a chance for you to focus on learning something new in one of up to 10 ‘learning challenge’ areas. Register at the site to track your progress towards completing one (ore more) of the challenges and also earn some TechReward points (which you can redeem for actual stuff).
Executable Specifications in .NET with Storyteller 3
Next week JetBrains are hosting a webinar from Jeremy Miller on Storyteller, a tool for creating executable specifications in .NET. As well as creating Storyteller, you might also recognise Jeremy as the author of StructureMap. Register here to watch it live. Hopefully a recording will appear on the JetBrainsTV YouTube channel at a later date, as it turns out to be 1.30am in my time zone.
Pluralsight are running hack.summit() a 4 day virtual developer conference, February 22-25. Speakers include well-known names such as Jon Skeet, Kent Beck, Joel Spolsky, Bob Martin and Yehuda katz. Register via the website – the cost is a donation to charity OR sharing the event on Twitter or Facebook.
DDD Melbourne 7
The date has been fixed for this year’s DDD Melbourne – Saturday, August 13th. That’s a week and a bit after NDC Sydney, if you were wondering. Speaking of Sydney, looks like they’ll also be hosting a DDD there sometime this year too (no date announced yet).
I knew Weird Al Yankovic was touring Australia in January 2016, but when I jumped at the chance to see an NBA game during my visit to Toronto late last year I had resigned myself to the fact that doing so would probably mean passing on Al this time (I had seen him on his Poodle Hat tour back in 2003).
That was until Narelle spotted cheap tickets to Weird Al’s Adelaide concert appearing on lasttix.com.au. By clicking on the special (and avoiding signing up to lasttix because I didn’t want to if I didn’t have to), I ended up at ticketmaster, but with a cheaper price of just $60 per ticket instead of the usual $90+. Bargain!
There was a great crowd, a good supporting act in Mickey D (nice to have a comedian that was funny without being crude), and eventually Al and his band came on to give us a performance just like we were hoping.
It was a great mix of old favourites and songs from his latest album Mandatory Fun (which reached No. 1 on the Billboard charts recently)
All in all a great night out – even better as I went with friends Tom (whom originally introduced me to Al’s albums many years ago) and Derek (who wasn’t a huge Al fan before but I think enjoyed the night anyway).
I’ve been a fan of using Microsoft’s Windows Live Writer to compose blog posts for quite a few years now, so when it stopped working earlier this year due to Google changing the authentication requirements for Blogger, I was a bit disappointed. The good news was that Microsoft contacted Google and (for once) they extended Live Writer a lifeline to allow it to continue to use the old API until alternate arrangements could be made.
All was good just over a week ago, when a) Microsoft released an open source version of Live Writer – named Open Live Writer, and b) Google finally did switch off the old authentication API. Unfortunately the first new release of Open Live Writer didn’t have a working implementation of Google’s new authentication API, so there was a few days of inconvenience whilst that was finished off. Version 0.5.1.2 came out last Friday and I’m pleased to find that it does work again with Blogger!
The source code is on Github at https://github.com/OpenLiveWriter/OpenLiveWriter, and there’s already an active community contributing bug reports and pull requests.
It’s great to see such a useful application given a new lease on life (or should that be ‘new lease on live’ )