I just learned from Marc Gravell that these are false:
Version.Parse("6.0") >= Version.Parse("6.0.0")

Version.Parse("6.0.0") >= Version.Parse("6.0.0.0")

And these are true:
Version.Parse("6.0.0") >= Version.Parse("6.0.0")

Version.Parse("6.0") < Version.Parse("6.0.0")

Version.Parse("6.0.0") < Version.Parse("6.0.0.0")

I'm gonna need more coffee.

@Nick_Craver The high percentage kind of coffee?

@Nick_Craver because the last two numbers default to -1. A pre-generics way, seemingly, of specifying they weren't set but, IMO, a bad design. Version comparisons everywhere else assume zero for unset version fields. Win32 APIs, for example. Whenever I've decided to use this class, I've always had to normalize it.

Another reason to add a SemanticVersion class: fix the mistakes of the past with a version far more prevalent these days (well, at least 3 field versions).

@heaths @Nick_Craver The https://www.nuget.org/packages/NuGet.Versioning package already contains two types to work with versions in a sane way.
SemanticVersion which is a strict SemVer implementation and NuGetVersion which is a relaxed implementation of SemVer that does not strictly enforce it to allow older 4-digit versioning schemes.
NuGet.Versioning 6.5.0

NuGet's implementation of Semantic Versioning.

@Nick_Craver ohooh, I might need to check some code here

@Nick_Craver using Version = NuGet.Versioning.NuGetVersion;

And suddenly the results become much more sane! 😎