Slight refactoring of Extensions to support lookup by name, added compatibility tests for text and binary formats.
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
index f01da22..2c73394 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
@@ -1,4 +1,4 @@
-// Generated by ProtoGen, Version=0.9.0.0, Culture=neutral, PublicKeyToken=8fd7408b07f8d2cd.  DO NOT EDIT!

+// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48.  DO NOT EDIT!

 

 using pb = global::Google.ProtocolBuffers;

 using pbc = global::Google.ProtocolBuffers.Collections;

@@ -6,6 +6,9 @@
 using scg = global::System.Collections.Generic;

 namespace Google.ProtocolBuffers.TestProtos {

   

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public static partial class UnitTestExtrasLiteProtoFile {

   

     #region Extension registration

@@ -38,6 +41,8 @@
     

   }

   #region Enums

+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public enum ExtraEnum {

     DEFAULT = 10,

     EXLITE_FOO = 7,

@@ -48,6 +53,9 @@
   #endregion

   

   #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class TestRequiredLite : pb::GeneratedMessageLite<TestRequiredLite, TestRequiredLite.Builder> {

     private static readonly TestRequiredLite defaultInstance = new Builder().BuildPartial();

     public static TestRequiredLite DefaultInstance {

@@ -177,6 +185,9 @@
       return (Builder) new Builder().MergeFrom(prototype);

     }

     

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

     public sealed partial class Builder : pb::GeneratedBuilderLite<TestRequiredLite, Builder> {

       protected override Builder ThisBuilder {

         get { return this; }

@@ -307,6 +318,9 @@
     }

   }

   

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class TestInteropPersonLite : pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder> {

     private static readonly TestInteropPersonLite defaultInstance = new Builder().BuildPartial();

     public static TestInteropPersonLite DefaultInstance {

@@ -322,13 +336,21 @@
     }

     

     #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

     public static class Types {

+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

       public enum PhoneType {

         MOBILE = 0,

         HOME = 1,

         WORK = 2,

       }

       

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

       public sealed partial class PhoneNumber : pb::GeneratedMessageLite<PhoneNumber, PhoneNumber.Builder> {

         private static readonly PhoneNumber defaultInstance = new Builder().BuildPartial();

         public static PhoneNumber DefaultInstance {

@@ -457,6 +479,9 @@
           return (Builder) new Builder().MergeFrom(prototype);

         }

         

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

         public sealed partial class Builder : pb::GeneratedBuilderLite<PhoneNumber, Builder> {

           protected override Builder ThisBuilder {

             get { return this; }

@@ -588,6 +613,9 @@
         }

       }

       

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

       public sealed partial class Addresses : pb::GeneratedMessageLite<Addresses, Addresses.Builder> {

         private static readonly Addresses defaultInstance = new Builder().BuildPartial();

         public static Addresses DefaultInstance {

@@ -777,6 +805,9 @@
           return (Builder) new Builder().MergeFrom(prototype);

         }

         

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

         public sealed partial class Builder : pb::GeneratedBuilderLite<Addresses, Builder> {

           protected override Builder ThisBuilder {

             get { return this; }

@@ -1216,6 +1247,9 @@
       return (Builder) new Builder().MergeFrom(prototype);

     }

     

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

     public sealed partial class Builder : pb::ExtendableBuilderLite<TestInteropPersonLite, Builder> {

       protected override Builder ThisBuilder {

         get { return this; }

@@ -1505,6 +1539,9 @@
     }

   }

   

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class TestInteropEmployeeIdLite : pb::GeneratedMessageLite<TestInteropEmployeeIdLite, TestInteropEmployeeIdLite.Builder> {

     private static readonly TestInteropEmployeeIdLite defaultInstance = new Builder().BuildPartial();

     public static TestInteropEmployeeIdLite DefaultInstance {

@@ -1614,6 +1651,9 @@
       return (Builder) new Builder().MergeFrom(prototype);

     }

     

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

     public sealed partial class Builder : pb::GeneratedBuilderLite<TestInteropEmployeeIdLite, Builder> {

       protected override Builder ThisBuilder {

         get { return this; }