diff options
author | Jb Evain <jbevain@gmail.com> | 2015-05-11 14:55:35 +0300 |
---|---|---|
committer | Jb Evain <jbevain@gmail.com> | 2015-05-11 15:29:15 +0300 |
commit | c123c7bbc63534d90039d5a4748e4826efef6f5c (patch) | |
tree | 348e74bb234a659ccd4d26bacadca183b7da2506 | |
parent | 50452a3c059e41038cd7cd0f0009d2efa10271f9 (diff) |
AssemblyNameReference.Version should never return null. Fixes #212
-rw-r--r-- | Mono.Cecil/AssemblyNameReference.cs | 19 | ||||
-rw-r--r-- | Mono.Cecil/BaseAssemblyResolver.cs | 4 | ||||
-rw-r--r-- | Mono.Cecil/ModuleDefinition.cs | 2 | ||||
-rw-r--r-- | Test/Mono.Cecil.Tests/AssemblyTests.cs | 14 |
4 files changed, 27 insertions, 12 deletions
diff --git a/Mono.Cecil/AssemblyNameReference.cs b/Mono.Cecil/AssemblyNameReference.cs index c61c336..3a9858f 100644 --- a/Mono.Cecil/AssemblyNameReference.cs +++ b/Mono.Cecil/AssemblyNameReference.cs @@ -49,8 +49,8 @@ namespace Mono.Cecil { public Version Version { get { return version; } set { - version = value; - full_name = null; + version = value ?? Mixin.ZeroVersion; + full_name = null; } } @@ -147,11 +147,9 @@ namespace Mono.Cecil { var builder = new StringBuilder (); builder.Append (name); - if (version != null) { - builder.Append (sep); - builder.Append ("Version="); - builder.Append (version.ToString ()); - } + builder.Append (sep); + builder.Append ("Version="); + builder.Append (Version.ToString (fieldCount: 4)); builder.Append (sep); builder.Append ("Culture="); builder.Append (string.IsNullOrEmpty (culture) ? "neutral" : culture); @@ -239,7 +237,7 @@ namespace Mono.Cecil { throw new ArgumentNullException ("name"); this.name = name; - this.version = version; + this.version = version ?? Mixin.ZeroVersion; this.hash_algorithm = AssemblyHashAlgorithm.None; this.token = new MetadataToken (TokenType.AssemblyRef); } @@ -249,4 +247,9 @@ namespace Mono.Cecil { return this.FullName; } } + + partial class Mixin { + + public static Version ZeroVersion = new Version (0, 0, 0 ,0); + } } diff --git a/Mono.Cecil/BaseAssemblyResolver.cs b/Mono.Cecil/BaseAssemblyResolver.cs index 8a11182..76f5da1 100644 --- a/Mono.Cecil/BaseAssemblyResolver.cs +++ b/Mono.Cecil/BaseAssemblyResolver.cs @@ -134,7 +134,7 @@ namespace Mono.Cecil { #if !SILVERLIGHT && !CF if (name.IsRetargetable) { // if the reference is retargetable, zero it - name = new AssemblyNameReference (name.Name, new Version (0, 0, 0, 0)) { + name = new AssemblyNameReference (name.Name, Mixin.ZeroVersion) { PublicKeyToken = Empty<byte>.Array, }; } @@ -187,7 +187,7 @@ namespace Mono.Cecil { static bool IsZero (Version version) { - return version == null || (version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0); + return version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0; } #if !SILVERLIGHT && !CF diff --git a/Mono.Cecil/ModuleDefinition.cs b/Mono.Cecil/ModuleDefinition.cs index f887789..26534df 100644 --- a/Mono.Cecil/ModuleDefinition.cs +++ b/Mono.Cecil/ModuleDefinition.cs @@ -967,7 +967,7 @@ namespace Mono.Cecil { if (name.EndsWith (".dll") || name.EndsWith (".exe")) name = name.Substring (0, name.Length - 4); - return new AssemblyNameDefinition (name, new Version (0, 0, 0, 0)); + return new AssemblyNameDefinition (name, Mixin.ZeroVersion); } #endif diff --git a/Test/Mono.Cecil.Tests/AssemblyTests.cs b/Test/Mono.Cecil.Tests/AssemblyTests.cs index 7ba3dda..b427f5c 100644 --- a/Test/Mono.Cecil.Tests/AssemblyTests.cs +++ b/Test/Mono.Cecil.Tests/AssemblyTests.cs @@ -25,7 +25,7 @@ namespace Mono.Cecil.Tests { } [Test] - public void ParseLowerCaseNameParts() + public void ParseLowerCaseNameParts () { var name = AssemblyNameReference.Parse ("Foo, version=2.0.0.0, culture=fr-FR"); Assert.AreEqual ("Foo", name.Name); @@ -33,5 +33,17 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (0, name.Version.Minor); Assert.AreEqual ("fr-FR", name.Culture); } + + [Test] + public void ZeroVersion () + { + var name = new AssemblyNameReference ("Foo", null); + Assert.AreEqual ("0.0.0.0", name.Version.ToString (fieldCount: 4)); + Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName); + + name = new AssemblyNameReference ("Foo", new Version (0, 0, 0, 0)); + Assert.AreEqual ("0.0.0.0", name.Version.ToString (fieldCount: 4)); + Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName); + } } } |