• NDC Sydney–Day 1

    The first full day started with Scott Hanselman’s keynote, then straight into sessions. I was rostered to look after room in the morning, with the afternoon free to attend other sessions.

    Here’s my photo tweet stream from the day:

    #ndcsydney opening keynote with @shanselman pic.twitter.com/Wkyl0HAMYx

    — David Gardiner (@DavidRGardiner) August 2, 2016

    Omnisharp and Script C# with filip_woj at #ndcsydney pic.twitter.com/12vuNTl82N

    — David Gardiner (@DavidRGardiner) August 3, 2016

    Good to see @alexjmackey is both performing and stable #ndcsydney pic.twitter.com/26dhpsb2DX

    — David Gardiner (@DavidRGardiner) August 3, 2016

    I don’t think @Aaronontheweb is acting. Talking about https://t.co/iR8Xop5OSH #ndcsydney :-) pic.twitter.com/O1H7BDvk6v

    — David Gardiner (@DavidRGardiner) August 3, 2016

    Now @Aaronontheweb is doing NBench presses #ndcsydney pic.twitter.com/JJGxLBJQoX

    — David Gardiner (@DavidRGardiner) August 3, 2016

    Automapped @jbogard solidly into #ndcsydney pic.twitter.com/XSjePDpToB

    — David Gardiner (@DavidRGardiner) August 3, 2016

    Enter the @OdeToCode dragon #ndcsydney pic.twitter.com/g3y1af0fY7

    — David Gardiner (@DavidRGardiner) August 3, 2016

    I had a quiet night back in the hotel room, though many attendees went on a harbour cruise. It had been quite wet and rainy, so I didn’t mind missing out on that.

  • NDC Sydney–Day 0

    Cloud view of Sydney HarbourIt’s Tuesday, so off to NDC Sydney conference. I must say 11am is a very sensible time to fly from Adelaide to Sydney. Makes a nice change from 6am flights!

    George St looking towards Hilton HotelI’m attending NDC as a volunteer crew member, but it turns out the organisers were extra-pleased to see me, as they’d forgotten that I was coming, and were actually short of helpers. Phew, glad that worked out well.

    NDC is being held at the Sydney Hilton. I’ve actually been here many years ago attending a SharePoint conference. I wasn’t originally going to stay here on-site, but my employer (RL Solutions) encouraged me to do so and I’m really glad I did. It is super convenient to just be able to “pop upstairs” to my room. Code Club registration badgeI started right away, helping out with the registration desk for the NDC Sydney Code Club, an evening of workshops for kids aged 7-16. It was great to see some of the conference speakers had brought their families over to Australia and so their kids got a chance to participate, as well as a bunch of Sydney school kids. As a bonus, they had Scott Hanselman as their keynote speaker. I’m pleased to report the kids enjoyed Scott just as much as the adults will at the rest of the conference. Scott was entertaining and informative. I could hear lots of laughter coming from the room. After Scott’s welcome keynote, there were a number of workshops the kids participated in, including IoT, Minecraft and other fun stuff.

    Here’s photo of Scott enjoying the perks of working for Microsoft (well I think that’s what he said!) from his welcome talk to the kids:

    Not really Scott Hanselman

  • Error AD0001: Compiler Analyzer … threw an exception of type 'System.InvalidOperationException' with message 'Feature 'IOperation' is disabled.'

    If you upgrade to the latest beta release of one of the Roslyn compiler analyzer packages, you might notice they fail with an error like this:

    Compiler Analyzer 'Microsoft.ApiDesignGuidelines.Analyzers.UsePropertiesWhereAppropriateAnalyzer' threw an exception of type 'System.InvalidOperationException' with message 'Feature 'IOperation' is disabled.'.
    

    The solution wasn’t immediately obvious to me, but I eventually tracked down this comment on a Github issue. According to the comment, the analyzers are using an API that needs to be enabled through configuration. To do this, you need open up the .csproj file and add a new property as a child of the first PropertyGroup element like this:

    <PropertyGroup>
      <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
      <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
      <Features>IOperation</Features>
    

    Or if you have lots of projects, run this PowerShell script to update them all:

    Get-ChildItem *.csproj -Recurse | ForEach-Object {
        $content = [xml] (Get-Content $_)
        $xmlNameSpace = new-object System.Xml.XmlNamespaceManager($content.NameTable)
        $xmlNameSpace.AddNamespace("p", "<a href="http://schemas.microsoft.com/developer/msbuild/2003%22)">http://schemas.microsoft.com/developer/msbuild/2003")</a>
        if (-not $content.Project.PropertyGroup[0].Features) {
            Write-Host "Features missing in $_"
            $featureElt = $content.CreateElement("Features", "<a href="http://schemas.microsoft.com/developer/msbuild/2003%22)">http://schemas.microsoft.com/developer/msbuild/2003")</a>
            $featureElt.set_InnerText("IOperation")
    
            $content.Project.PropertyGroup[0].AppendChild($featureElt)
        }
        $content.Save($_)
    
        # Normalise line endings
        (Get-Content $_ -Encoding UTF8) | Set-Content $_ -Encoding UTF8
    }