VersionString (eg "1.0.2") IComparer algorithm
I adjusted the compare method slightly, making it more readable (IMO) through the use of an Anonymous type with named properties and by extracting two helper methods.

I'm not checking the result of TryParse anymore since the result is 0 for failed conversions.
Regarding performance: on my machine, your version runs ten thousand iterations in ~400ms, while mine seems to shave off around one fourth, running the same amount of iterations at ~300ms.   

This should be because I moved the parsing of the versions out of the loop.
I measured this using a System.Diagnostics.Stopwatch. 

EDIT: A note on performance... micro-optimizations such as the ones I've done are meaningless unless you have actually identified a real bottleneck in your code. I only ran these simplified benchmarks to make sure I wasn't making your implementation slower while getting it into a more expressive form.

public int Compare(string x, string y)
{
    if (x == y) return 0;
    var version = new { First = GetVersion(x), Second = GetVersion(y) };
    int limit = Math.Max(version.First.Length, version.Second.Length);
    for (int i = 0; i &lt; limit; i++)
    {
        int first = version.First.ElementAtOrDefault(i);
        int second = version.Second.ElementAtOrDefault(i);
        if (first &gt; second) return 1;
        if (second &gt; first) return -1;
    }
    return 0;
}

private int[] GetVersion(string version)
{
    return (from part in version.Split('.')
            select Parse(part)).ToArray();
}

private int Parse(string version)
{
    int result;
    int.TryParse(version, out result);
    return result;
}


This adapted converter returns the same test results as your original one - though I haven't tried to test it more thoroughly - maybe someone can spot an edge case? ;-)