Full rutime working, Lite generator and runtime building but untested
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs
index a292701..f628f2c 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs
@@ -1,4 +1,4 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// Generated by ProtoGen, Version=0.9.0.0, Culture=neutral, PublicKeyToken=8fd7408b07f8d2cd.  DO NOT EDIT!
 
 using pb = global::Google.ProtocolBuffers;
 using pbc = global::Google.ProtocolBuffers.Collections;
@@ -13,47 +13,17 @@
     }
     #endregion
     #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestLiteImportsNonlite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite, global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.Builder> internal__static_protobuf_unittest_TestLiteImportsNonlite__FieldAccessorTable;
     #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-    
+    #region Extensions
+    internal static readonly object Descriptor;
     static UnitTestLiteImportNonLiteProtoFile() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          "CjNnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbGl0ZV9pbXBvcnRzX25vbmxp" + 
-          "dGUucHJvdG8SEXByb3RvYnVmX3VuaXR0ZXN0GiRnb29nbGUvcHJvdG9idWYv" + 
-          "Y3NoYXJwX29wdGlvbnMucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi91bml0dGVz" + 
-          "dC5wcm90byJKChZUZXN0TGl0ZUltcG9ydHNOb25saXRlEjAKB21lc3NhZ2UY" + 
-          "ASABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNCTEgDwj5H" + 
-          "CiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MSIlVuaXRUZXN0" + 
-          "TGl0ZUltcG9ydE5vbkxpdGVQcm90b0ZpbGU=");
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_TestLiteImportsNonlite__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_TestLiteImportsNonlite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite, global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.Builder>(internal__static_protobuf_unittest_TestLiteImportsNonlite__Descriptor,
-                new string[] { "Message", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 
-          global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, 
-          }, assigner);
+      Descriptor = null;
     }
     #endregion
     
   }
   #region Messages
-  public sealed partial class TestLiteImportsNonlite : pb::GeneratedMessage<TestLiteImportsNonlite, TestLiteImportsNonlite.Builder> {
+  public sealed partial class TestLiteImportsNonlite : pb::GeneratedMessageLite<TestLiteImportsNonlite, TestLiteImportsNonlite.Builder> {
     private static readonly TestLiteImportsNonlite defaultInstance = new Builder().BuildPartial();
     public static TestLiteImportsNonlite DefaultInstance {
       get { return defaultInstance; }
@@ -67,14 +37,6 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteImportNonLiteProtoFile.internal__static_protobuf_unittest_TestLiteImportsNonlite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<TestLiteImportsNonlite, TestLiteImportsNonlite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteImportNonLiteProtoFile.internal__static_protobuf_unittest_TestLiteImportsNonlite__FieldAccessorTable; }
-    }
-    
     public const int MessageFieldNumber = 1;
     private bool hasMessage;
     private global::Google.ProtocolBuffers.TestProtos.TestAllTypes message_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance;
@@ -85,6 +47,34 @@
       get { return message_; }
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasMessage) {
+        output.WriteMessage(1, Message);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (HasMessage) {
+          size += pb::CodedOutputStream.ComputeMessageSize(1, Message);
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static TestLiteImportsNonlite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -122,7 +112,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<TestLiteImportsNonlite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestLiteImportsNonlite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -143,10 +133,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.Descriptor; }
-      }
-      
       public override TestLiteImportsNonlite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.DefaultInstance; }
       }
@@ -160,6 +146,54 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestLiteImportsNonlite) {
+          return MergeFrom((TestLiteImportsNonlite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestLiteImportsNonlite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.DefaultInstance) return this;
+        if (other.HasMessage) {
+          MergeMessage(other.Message);
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 10: {
+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
+              if (HasMessage) {
+                subBuilder.MergeFrom(Message);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Message = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+      }
+      
       
       public bool HasMessage {
        get { return result.HasMessage; }