Silverlight 2.0 GDR1 and TFS Build Server

I’ve just encountered a really strange problem regarding Silverlight 2.0 GDR1 release and our TFS Build Server at work.

First up, there does not seem to be any way to run the GDR1 installer on the server, so no way of updating the SDK on the build server. Great. I initially didn’t think anything of it, unpacked the installer and ran the MSI contained within. And all seemed fine.

The we noticed that builds were different between the local dev machines and the build server; in that they worked locally and threw a mixture of (seemingly) random errors on the server builds. As our system is setup to pull builds only from the build servers to populate our live and test setups, this was obviously a critical problem.

After some digging, it seems the Silverlight 2.0 SDK had NOT been updated; even after running the Silverlight 2.0 SDK msi and it seemingly installing without error.

I ended up pulling a copy of the updated files from a working Dev box to the server and extracting them, and all seems well.

Fingers crossed!

I hope Microsoft will fix this omission, or at least make it slightly more obvious where to find the relevant updates for TFS installations – a lot of people, like us, do not install Visual Studio on our build platforms!

Trial and tribulations of motorbike ownership

I was planning on going out for a ride on the Zed at the weekend (it was a beautiful weekend weather wise!), but I unfortunately discovered a seized back brake.

No bother, I thought, it will just be the slider full of gunk.

So Sunday after was spent stripping, cleaning and stripping some more (the bike that is).  And it still sticks. Must need new seals.

Ah well, got them ordered up.

While I’m at it, had to order:
- New pads
- Spares for scott oiler (the zed has eaten some of it it seems)
- Couple of spare keys
- New chain adjusters (old ones were worn, still worked tho)
- New bar ends (totally f**ked as I found out fitting heated grips)

But I did get the heated grips fitted (and they work perfectly!).

Next task: Clean, clean, clean, and oil.
The reassemble. Hopefully next weekend will be a decent day and I get an a short run on the bike – assuming all the parts arrive and I have time to reassemble …

TFS 2008 Build Notifications

One thing that I was looking into this morning is adding Build Notifications to our work TFS Server. Now, initially I thought I’d do this via e-mail, but none of us want more junk appearing in our inbox.

The I thought a small systray app.

A quick google later came up with the answer!

http://msdn.microsoft.com/en-us/teamsystem/bb980963.aspx

Silverlight still needs work ..

I’m amazed at how many small parts of Silverlight need a lot more polishing. I recently hit the problem mentioned here - http://silverlight.net/forums/t/69067.aspx – when building a login dialog for our work application. Disabling the text boxes works great. Enabling them … oh dear, so but that just doesn't work all the time :)

Silverlight: Treating Tab == Enter

In software development it’s typically the way that data entry screens handle the Return or Enter key as a Tab.

It seems this functionality is missing from the current Silverlight 2.0 controls.

I had to roll my own implementation quickly this morning, although it’s probably not the best, it does work :)

    public partial class fieldText : UserControl
    {
        public fieldText ()
        {
            InitializeComponent();
        }

        public event KeyEventHandler OnEnter; 

        public string Text
        {
            get
            {
                return content.Text;
            }

            set
            {
                content.Text = value;
            }
        }

        private void content_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                OnEnter(sender, e);
            }
        }
    }

Obviously, I go on to use the OnEnter handler in my actual page to relocate the user’s focus – note that I am using my own custom control that has a TextBox within it, which is why I had to expose the event.