Merge pull request #611 from jskeet/csharp-wrappers

C# wrapper types
diff --git a/Makefile.am b/Makefile.am
index 3786200..c669424 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,254 +40,112 @@
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = protobuf.pc protobuf-lite.pc
 
-csharp_EXTRA_DIST=                                                                  \
-  csharp/src/ProtocolBuffers.sln                                                    \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestImportPublicLite.cs        \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestExtrasLite.cs              \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestExtrasFull.cs              \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestImport.cs                  \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestLiteImportsNonlite.cs      \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestImportLite.cs              \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/Unittest.cs                        \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestLite.cs                    \
-  csharp/src/ProtocolBuffersLite.Test/TestProtos/UnittestImportPublic.cs            \
-  csharp/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs                  \
-  csharp/src/ProtocolBuffersLite.Test/packages.config                               \
-  csharp/src/ProtocolBuffersLite.Test/LiteTest.cs                                   \
-  csharp/src/ProtocolBuffersLite.Test/AbstractMessageLiteTest.cs                    \
-  csharp/src/ProtocolBuffersLite.Test/MissingFieldAndExtensionTest.cs               \
-  csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj               \
-  csharp/src/ProtocolBuffersLite.Test/App.xaml.cs                                   \
-  csharp/src/ProtocolBuffersLite.Test/InteropLiteTest.cs                            \
-  csharp/src/ProtocolBuffersLite.Test/ExtendableBuilderLiteTest.cs                  \
-  csharp/src/ProtocolBuffersLite.Test/App.xaml                                      \
-  csharp/src/ProtocolBuffersLite.Test/TestLiteByApi.cs                              \
-  csharp/src/ProtocolBuffersLite.Test/Properties/AppManifest.xml                    \
-  csharp/src/ProtocolBuffersLite.Test/Properties/OutOfBrowserSettings.xml           \
-  csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj          \
-  csharp/src/ProtocolBuffersLite.Test/AbstractBuilderLiteTest.cs                    \
-  csharp/src/ProtoDump/ProtoDump.csproj                                             \
-  csharp/src/ProtoDump/app.config                                                   \
-  csharp/src/ProtoDump/Program.cs                                                   \
-  csharp/src/ProtoDump/Properties/AssemblyInfo.cs                                   \
-  csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs                        \
-  csharp/src/ProtocolBuffers.Serialization/JsonFormatReader.cs                      \
-  csharp/src/ProtocolBuffers.Serialization/JsonTextCursor.cs                        \
-  csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj     \
-  csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs                      \
-  csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs                        \
-  csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj \
-  csharp/src/ProtocolBuffers.Serialization/XmlReaderOptions.cs                      \
-  csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs                    \
-  csharp/src/ProtocolBuffers.Serialization/XmlWriterOptions.cs                      \
-  csharp/src/ProtocolBuffers.Serialization/JsonFormatWriter.cs                      \
-  csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs               \
-  csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs                      \
-  csharp/src/ProtocolBuffers.Serialization/Extensions.cs                            \
-  csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs                    \
-  csharp/src/ProtocolBuffers.Serialization/XmlFormatWriter.cs                       \
-  csharp/src/ProtocolBuffers.Serialization/Http/FormUrlEncodedReader.cs             \
-  csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatOptions.cs             \
-  csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatFactory.cs             \
-  csharp/src/ProtocolBuffers.Serialization/XmlFormatReader.cs                       \
-  csharp/src/ProtocolBuffers.Serialization/RecursionLimitExceeded.cs                \
-  csharp/src/ProtoBench/GoogleSize.cs                                               \
-  csharp/src/ProtoBench/GoogleSpeed.cs                                              \
-  csharp/src/ProtoBench/UnittestImport.cs                                           \
-  csharp/src/ProtoBench/google_message1.dat                                         \
-  csharp/src/ProtoBench/ProtoBench.csproj                                           \
-  csharp/src/ProtoBench/app.config                                                  \
-  csharp/src/ProtoBench/Program.cs                                                  \
-  csharp/src/ProtoBench/google_message2.dat                                         \
-  csharp/src/ProtoBench/Properties/AssemblyInfo.cs                                  \
-  csharp/src/ProtoBench/Unittest.cs                                                 \
-  csharp/src/ProtoBench/UnittestImportPublic.cs                                     \
-  csharp/src/ProtoMunge/app.config                                                  \
-  csharp/src/ProtoMunge/Program.cs                                                  \
-  csharp/src/ProtoMunge/Properties/AssemblyInfo.cs                                  \
-  csharp/src/ProtoMunge/ProtoMunge.csproj                                           \
-  csharp/src/ProtocolBuffers/GeneratedMessage.cs                                    \
-  csharp/src/ProtocolBuffers/ICodedInputStream.cs                                   \
-  csharp/src/ProtocolBuffers/AbstractBuilder.cs                                     \
-  csharp/src/ProtocolBuffers/FieldSet.cs                                            \
-  csharp/src/ProtocolBuffers/TextGenerator.cs                                       \
-  csharp/src/ProtocolBuffers/CodedInputStream.cs                                    \
-  csharp/src/ProtocolBuffers/GeneratedExtensionLite.cs                              \
-  csharp/src/ProtocolBuffers/FrameworkPortability.cs                                \
-  csharp/src/ProtocolBuffers/SortedList.cs                                          \
-  csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs                       \
-  csharp/src/ProtocolBuffers/ExtendableMessage.cs                                   \
-  csharp/src/ProtocolBuffers/Descriptors/ServiceDescriptor.cs                       \
-  csharp/src/ProtocolBuffers/Descriptors/DescriptorBase.cs                          \
-  csharp/src/ProtocolBuffers/Descriptors/EnumDescriptor.cs                          \
-  csharp/src/ProtocolBuffers/Descriptors/PackageDescriptor.cs                       \
-  csharp/src/ProtocolBuffers/Descriptors/FileDescriptor.cs                          \
-  csharp/src/ProtocolBuffers/Descriptors/DescriptorValidationException.cs           \
-  csharp/src/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs                   \
-  csharp/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs                       \
-  csharp/src/ProtocolBuffers/Descriptors/MethodDescriptor.cs                        \
-  csharp/src/ProtocolBuffers/Descriptors/DescriptorUtil.cs                          \
-  csharp/src/ProtocolBuffers/Descriptors/MappedType.cs                              \
-  csharp/src/ProtocolBuffers/Descriptors/FieldType.cs                               \
-  csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs                   \
-  csharp/src/ProtocolBuffers/Descriptors/IDescriptor.cs                             \
-  csharp/src/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs                     \
-  csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs                         \
-  csharp/src/ProtocolBuffers/Descriptors/DescriptorPool.cs                          \
-  csharp/src/ProtocolBuffers/Delegates.cs                                           \
-  csharp/src/ProtocolBuffers/AbstractMessageLite.cs                                 \
-  csharp/src/ProtocolBuffers/IMessageLite.cs                                        \
-  csharp/src/ProtocolBuffers/TextFormat.cs                                          \
-  csharp/src/ProtocolBuffers/Collections/Enumerables.cs                             \
-  csharp/src/ProtocolBuffers/Collections/PopsicleList.cs                            \
-  csharp/src/ProtocolBuffers/Collections/IPopsicleList.cs                           \
-  csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs                      \
-  csharp/src/ProtocolBuffers/Collections/Dictionaries.cs                            \
-  csharp/src/ProtocolBuffers/Collections/Lists.cs                                   \
-  csharp/src/ProtocolBuffers/IMessage.cs                                            \
-  csharp/src/ProtocolBuffers/TextTokenizer.cs                                       \
-  csharp/src/ProtocolBuffers/ByteString.cs                                          \
-  csharp/src/ProtocolBuffers/AbstractBuilderLite.cs                                 \
-  csharp/src/ProtocolBuffers/GeneratedExtensionBase.cs                              \
-  csharp/src/ProtocolBuffers/EnumLite.cs                                            \
-  csharp/src/ProtocolBuffers/ByteArray.cs                                           \
-  csharp/src/ProtocolBuffers/ExtensionInfo.cs                                       \
-  csharp/src/ProtocolBuffers/MessageStreamIterator.cs                               \
-  csharp/src/ProtocolBuffers/DynamicMessage.cs                                      \
-  csharp/src/ProtocolBuffers/ExtendableMessageLite.cs                               \
-  csharp/src/ProtocolBuffers/ICodedOutputStream.cs                                  \
-  csharp/src/ProtocolBuffers/GeneratedRepeatExtension.cs                            \
-  csharp/src/ProtocolBuffers/IBuilderLite.cs                                        \
-  csharp/src/ProtocolBuffers/UnknownField.cs                                        \
-  csharp/src/ProtocolBuffers/ThrowHelper.cs                                         \
-  csharp/src/ProtocolBuffers/UnknownFieldSet.cs                                     \
-  csharp/src/ProtocolBuffers/AbstractMessage.cs                                     \
-  csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs                                \
-  csharp/src/ProtocolBuffers/NameHelpers.cs                                         \
-  csharp/src/ProtocolBuffers/DescriptorProtos/PartialClasses.cs                     \
-  csharp/src/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs                   \
-  csharp/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs                \
-  csharp/src/ProtocolBuffers/ExtendableBuilder.cs                                   \
-  csharp/src/ProtocolBuffers/FieldAccess/IFieldAccessor.cs                          \
-  csharp/src/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs                 \
-  csharp/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs                      \
-  csharp/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs               \
-  csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs                      \
-  csharp/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs                 \
-  csharp/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs                    \
-  csharp/src/ProtocolBuffers/FieldAccess/ReflectionUtil.cs                          \
-  csharp/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs                   \
-  csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs                             \
-  csharp/src/ProtocolBuffers/IBuilder.cs                                            \
-  csharp/src/ProtocolBuffers/ExtensionRegistry.cs                                   \
-  csharp/src/ProtocolBuffers/CodedOutputStream.cs                                   \
-  csharp/src/ProtocolBuffers/MessageStreamWriter.cs                                 \
-  csharp/src/ProtocolBuffers/MessageUtil.cs                                         \
-  csharp/src/ProtocolBuffers/UninitializedMessageException.cs                       \
-  csharp/src/ProtocolBuffers/ProtocolBuffersLite.csproj                             \
-  csharp/src/ProtocolBuffers/InvalidProtocolBufferException.cs                      \
-  csharp/src/ProtocolBuffers/ProtocolBuffers.csproj                                 \
-  csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs                               \
-  csharp/src/ProtocolBuffers/GeneratedMessageLite.cs                                \
-  csharp/src/ProtocolBuffers/GeneratedSingleExtension.cs                            \
-  csharp/src/ProtocolBuffers/ExtensionRegistryLite.cs                               \
-  csharp/src/ProtocolBuffers/WireFormat.cs                                          \
-  csharp/src/ProtocolBuffers/GeneratedBuilder.cs                                    \
-  csharp/src/AddressBook/ListPeople.cs                                              \
-  csharp/src/AddressBook/Addressbook.cs                                             \
-  csharp/src/AddressBook/AddPerson.cs                                               \
-  csharp/src/AddressBook/AddressBook.csproj                                         \
-  csharp/src/AddressBook/SampleUsage.cs                                             \
-  csharp/src/AddressBook/app.config                                                 \
-  csharp/src/AddressBook/Program.cs                                                 \
-  csharp/src/AddressBook/Properties/AssemblyInfo.cs                                 \
-  csharp/src/packages/repositories.config                                           \
-  csharp/src/ProtocolBuffers.Test/AbstractMessageTest.cs                            \
-  csharp/src/ProtocolBuffers.Test/TestProtos/GoogleSize.cs                          \
-  csharp/src/ProtocolBuffers.Test/TestProtos/GoogleSpeed.cs                         \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestEnormousDescriptor.cs          \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnknownEnumTest.cs                     \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestMset.cs                        \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImport.cs                      \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestCustomOptions.cs               \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestOptimizeFor.cs                 \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestNoFieldPresence.cs             \
-  csharp/src/ProtocolBuffers.Test/TestProtos/Unittest.cs                            \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestIssues.cs                      \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestExtrasXmltest.cs               \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportPublic.cs                \
-  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestDropUnknownFields.cs           \
-  csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs                           \
-  csharp/src/ProtocolBuffers.Test/packages.config                                   \
-  csharp/src/ProtocolBuffers.Test/TestReaderForUrlEncoded.cs                        \
-  csharp/src/ProtocolBuffers.Test/ByteStringTest.cs                                 \
-  csharp/src/ProtocolBuffers.Test/ReusableBuilderTest.cs                            \
-  csharp/src/ProtocolBuffers.Test/TestUtil.cs                                       \
-  csharp/src/ProtocolBuffers.Test/TestResources.cs                                  \
-  csharp/src/ProtocolBuffers.Test/Collections/PopsicleListTest.cs                   \
-  csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj                       \
-  csharp/src/ProtocolBuffers.Test/IssuesTest.cs                                     \
-  csharp/src/ProtocolBuffers.Test/UnknownFieldSetTest.cs                            \
-  csharp/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs                         \
-  csharp/src/ProtocolBuffers.Test/App.xaml.cs                                       \
-  csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs                           \
-  csharp/src/ProtocolBuffers.Test/DynamicMessageTest.cs                             \
-  csharp/src/ProtocolBuffers.Test/MessageStreamWriterTest.cs                        \
-  csharp/src/ProtocolBuffers.Test/NameHelpersTest.cs                                \
-  csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs                           \
-  csharp/src/ProtocolBuffers.Test/TestWriterFormatXml.cs                            \
-  csharp/src/ProtocolBuffers.Test/ExtendableMessageTest.cs                          \
-  csharp/src/ProtocolBuffers.Test/WireFormatTest.cs                                 \
-  csharp/src/ProtocolBuffers.Test/TestWriterFormatJson.cs                           \
-  csharp/src/ProtocolBuffers.Test/MessageUtilTest.cs                                \
-  csharp/src/ProtocolBuffers.Test/App.xaml                                          \
-  csharp/src/ProtocolBuffers.Test/Properties/AppManifest.xml                        \
-  csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs                        \
-  csharp/src/ProtocolBuffers.Test/Properties/OutOfBrowserSettings.xml               \
-  csharp/src/ProtocolBuffers.Test/TextFormatTest.cs                                 \
-  csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs                          \
-  csharp/src/ProtocolBuffers.Test/MessageTest.cs                                    \
-  csharp/src/ProtocolBuffers.Test/DescriptorsTest.cs                                \
-  csharp/src/ProtocolBuffers.Test/Compatibility/DictionaryCompatibilityTests.cs     \
-  csharp/src/ProtocolBuffers.Test/Compatibility/JsonCompatibilityTests.cs           \
-  csharp/src/ProtocolBuffers.Test/Compatibility/TextCompatibilityTests.cs           \
-  csharp/src/ProtocolBuffers.Test/Compatibility/TestResources.cs                    \
-  csharp/src/ProtocolBuffers.Test/Compatibility/google_message1.dat                 \
-  csharp/src/ProtocolBuffers.Test/Compatibility/CompatibilityTests.cs               \
-  csharp/src/ProtocolBuffers.Test/Compatibility/google_message2.dat                 \
-  csharp/src/ProtocolBuffers.Test/Compatibility/XmlCompatibilityTests.cs            \
-  csharp/src/ProtocolBuffers.Test/Compatibility/BinaryCompatibilityTests.cs         \
-  csharp/src/ProtocolBuffers.Test/GeneratedBuilderTest.cs                           \
-  csharp/src/ProtocolBuffers.Test/ReflectionTester.cs                               \
-  csharp/src/ProtocolBuffers.Test/FieldPresenceTest.cs                              \
-  csharp/src/ProtocolBuffers.Test/TestCornerCases.cs                                \
-  csharp/src/ProtocolBuffers.Test/MessageStreamIteratorTest.cs                      \
-  csharp/buildall.sh                                                                \
-  csharp/README.md                                                                  \
-  csharp/.gitignore                                                                 \
-  csharp/protos/extest/unittest_extras_lite.proto                                   \
-  csharp/protos/extest/unittest_extras_xmltest.proto                                \
-  csharp/protos/extest/unittest_extras_full.proto                                   \
-  csharp/protos/extest/unittest_issues.proto                                        \
-  csharp/generate_protos.sh                                                         \
-  csharp/CHANGES.txt                                                                \
-  csharp/keys/generate_new_key.bat                                                  \
-  csharp/keys/Google.ProtocolBuffers.snk                                            \
-  csharp/testdata/golden_message                                                    \
-  csharp/testdata/text_format_unittest_data.txt                                     \
-  csharp/testdata/golden_packed_fields_message                                      \
-  csharp/testdata/text_format_unittest_extensions_data.txt                          \
-  csharp/build/build.bat                                                            \
-  csharp/build/googlecode_upload.py                                                 \
-  csharp/build/build.csproj                                                         \
-  csharp/build/Google.ProtocolBuffersLite.nuspec                                    \
-  csharp/build/Common.targets                                                       \
-  csharp/build/Google.ProtocolBuffers.nuspec                                        \
-  csharp/build/target.csproj                                                        \
-  csharp/build/nuspec.xsd                                                           \
-  csharp/build/BuildAll.bat                                                         \
-  csharp/build/RunBenchmarks.bat                                                    \
-  csharp/build/publish.csproj
+csharp_EXTRA_DIST=                                                           \
+  csharp/CHANGES.txt                                                         \
+  csharp/README.md                                                           \
+  csharp/build_packages.bat                                                  \
+  csharp/buildall.sh                                                         \
+  csharp/generate_protos.sh                                                  \
+  csharp/keys/Google.ProtocolBuffers.snk                                     \
+  csharp/keys/generate_new_key.bat                                           \
+  csharp/protos/extest/unittest_issues.proto                                 \
+  csharp/src/AddressBook/AddPerson.cs                                        \
+  csharp/src/AddressBook/AddressBook.csproj                                  \
+  csharp/src/AddressBook/Addressbook.cs                                      \
+  csharp/src/AddressBook/ListPeople.cs                                       \
+  csharp/src/AddressBook/Program.cs                                          \
+  csharp/src/AddressBook/Properties/AssemblyInfo.cs                          \
+  csharp/src/AddressBook/SampleUsage.cs                                      \
+  csharp/src/AddressBook/app.config                                          \
+  csharp/src/ProtoDump/Program.cs                                            \
+  csharp/src/ProtoDump/Properties/AssemblyInfo.cs                            \
+  csharp/src/ProtoDump/ProtoDump.csproj                                      \
+  csharp/src/ProtoDump/app.config                                            \
+  csharp/src/ProtocolBuffers.Test/ByteStringTest.cs                          \
+  csharp/src/ProtocolBuffers.Test/CodedInputStreamExtensions.cs              \
+  csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs                    \
+  csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs                   \
+  csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs                \
+  csharp/src/ProtocolBuffers.Test/Collections/RepeatedFieldTest.cs           \
+  csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs                    \
+  csharp/src/ProtocolBuffers.Test/EqualityTester.cs                          \
+  csharp/src/ProtocolBuffers.Test/FieldCodecTest.cs                          \
+  csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs                    \
+  csharp/src/ProtocolBuffers.Test/IssuesTest.cs                              \
+  csharp/src/ProtocolBuffers.Test/JsonFormatterTest.cs                       \
+  csharp/src/ProtocolBuffers.Test/Properties/AppManifest.xml                 \
+  csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs                 \
+  csharp/src/ProtocolBuffers.Test/Properties/OutOfBrowserSettings.xml        \
+  csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj                \
+  csharp/src/ProtocolBuffers.Test/Reflection/DescriptorsTest.cs              \
+  csharp/src/ProtocolBuffers.Test/SampleEnum.cs                              \
+  csharp/src/ProtocolBuffers.Test/SampleMessages.cs                          \
+  csharp/src/ProtocolBuffers.Test/TestCornerCases.cs                         \
+  csharp/src/ProtocolBuffers.Test/TestProtos/MapUnittestProto3.cs            \
+  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportProto3.cs         \
+  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportPublicProto3.cs   \
+  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestIssues.cs               \
+  csharp/src/ProtocolBuffers.Test/TestProtos/UnittestProto3.cs               \
+  csharp/src/ProtocolBuffers.Test/packages.config                            \
+  csharp/src/ProtocolBuffers.sln                                             \
+  csharp/src/ProtocolBuffers/ByteArray.cs                                    \
+  csharp/src/ProtocolBuffers/ByteString.cs                                   \
+  csharp/src/ProtocolBuffers/CodedInputStream.cs                             \
+  csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs                \
+  csharp/src/ProtocolBuffers/CodedOutputStream.cs                            \
+  csharp/src/ProtocolBuffers/Collections/MapField.cs                         \
+  csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs               \
+  csharp/src/ProtocolBuffers/Collections/RepeatedField.cs                    \
+  csharp/src/ProtocolBuffers/FieldCodec.cs                                   \
+  csharp/src/ProtocolBuffers/FrameworkPortability.cs                         \
+  csharp/src/ProtocolBuffers/Freezable.cs                                    \
+  csharp/src/ProtocolBuffers/Google.Protobuf.nuspec                          \
+  csharp/src/ProtocolBuffers/IMessage.cs                                     \
+  csharp/src/ProtocolBuffers/InvalidProtocolBufferException.cs               \
+  csharp/src/ProtocolBuffers/JsonFormatter.cs                                \
+  csharp/src/ProtocolBuffers/LimitedInputStream.cs                           \
+  csharp/src/ProtocolBuffers/MessageExtensions.cs                            \
+  csharp/src/ProtocolBuffers/MessageParser.cs                                \
+  csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs                      \
+  csharp/src/ProtocolBuffers/ProtocolBuffers.csproj                          \
+  csharp/src/ProtocolBuffers/Reflection/DescriptorBase.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/DescriptorPool.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/DescriptorProtoFile.cs               \
+  csharp/src/ProtocolBuffers/Reflection/DescriptorUtil.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/DescriptorValidationException.cs     \
+  csharp/src/ProtocolBuffers/Reflection/EnumDescriptor.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/EnumValueDescriptor.cs               \
+  csharp/src/ProtocolBuffers/Reflection/FieldAccessorBase.cs                 \
+  csharp/src/ProtocolBuffers/Reflection/FieldAccessorTable.cs                \
+  csharp/src/ProtocolBuffers/Reflection/FieldDescriptor.cs                   \
+  csharp/src/ProtocolBuffers/Reflection/FieldType.cs                         \
+  csharp/src/ProtocolBuffers/Reflection/FileDescriptor.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/IDescriptor.cs                       \
+  csharp/src/ProtocolBuffers/Reflection/IFieldAccessor.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/MapFieldAccessor.cs                  \
+  csharp/src/ProtocolBuffers/Reflection/MessageDescriptor.cs                 \
+  csharp/src/ProtocolBuffers/Reflection/MethodDescriptor.cs                  \
+  csharp/src/ProtocolBuffers/Reflection/OneofAccessor.cs                     \
+  csharp/src/ProtocolBuffers/Reflection/OneofDescriptor.cs                   \
+  csharp/src/ProtocolBuffers/Reflection/PackageDescriptor.cs                 \
+  csharp/src/ProtocolBuffers/Reflection/PartialClasses.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/ReflectionUtil.cs                    \
+  csharp/src/ProtocolBuffers/Reflection/RepeatedFieldAccessor.cs             \
+  csharp/src/ProtocolBuffers/Reflection/ServiceDescriptor.cs                 \
+  csharp/src/ProtocolBuffers/Reflection/SingleFieldAccessor.cs               \
+  csharp/src/ProtocolBuffers/ThrowHelper.cs                                  \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Any.cs                           \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Api.cs                           \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Duration.cs                      \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Empty.cs                         \
+  csharp/src/ProtocolBuffers/WellKnownTypes/FieldMask.cs                     \
+  csharp/src/ProtocolBuffers/WellKnownTypes/SourceContext.cs                 \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Struct.cs                        \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Timestamp.cs                     \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Type.cs                          \
+  csharp/src/ProtocolBuffers/WellKnownTypes/Wrappers.cs                      \
+  csharp/src/ProtocolBuffers/WireFormat.cs                                   \
+  csharp/src/packages/repositories.config
 
 java_EXTRA_DIST=                                                             \
   java/src/main/java/com/google/protobuf/AbstractMessage.java                \
diff --git a/appveyor.bat b/appveyor.bat
new file mode 100644
index 0000000..c50616f
--- /dev/null
+++ b/appveyor.bat
@@ -0,0 +1,29 @@
+setlocal
+
+IF %language%==cpp GOTO build_cpp
+IF %language%==csharp GOTO build_csharp
+
+echo Unsupported language %language%. Exiting.
+goto :error
+
+:build_cpp
+echo Building C++
+mkdir build_msvc
+cd build_msvc
+cmake -G "%generator%" -DBUILD_SHARED_LIBS=%BUILD_DLL% ../cmake
+msbuild protobuf.sln /p:Platform=%vcplatform% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" || goto error
+cd %configuration%
+tests.exe || goto error
+goto :EOF
+
+:build_csharp
+echo Building C#
+cd csharp\src
+nuget restore
+msbuild ProtocolBuffers.sln /p:Platform="Any CPU" /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" || goto error
+nunit-console ProtocolBuffers.Test\bin\%configuration%\Google.Protobuf.Test.dll || goto error
+goto :EOF
+
+:error
+echo Failed!
+EXIT /b %ERRORLEVEL%
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
index 476a117..3447602 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -9,7 +9,10 @@
 

 environment:

   matrix:

-    - BUILD_DLL: ON

+    - language: cpp

+      BUILD_DLL: ON

+

+    - language: csharp

 

 install:

   - ps: Start-FileDownload https://googlemock.googlecode.com/files/gmock-1.7.0.zip

@@ -23,12 +26,7 @@
   - if %platform%==Win64 set vcplatform=x64

 

 build_script:

-  - mkdir build_msvc

-  - cd build_msvc

-  - cmake -G "%generator%" -DBUILD_SHARED_LIBS=%BUILD_DLL% ../cmake

-  - msbuild protobuf.sln /p:Platform=%vcplatform% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"

-  - cd %configuration%

-  - tests.exe

+  - CALL appveyor.bat

 

 skip_commits:

   message: /.*\[skip appveyor\].*/

diff --git a/cmake/extract_includes.bat.in b/cmake/extract_includes.bat.in
index 6b84c37..6ee657b 100644
--- a/cmake/extract_includes.bat.in
+++ b/cmake/extract_includes.bat.in
@@ -21,6 +21,7 @@
 copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\command_line_interface.h include\google\protobuf\compiler\command_line_interface.h
 copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
 copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_generator.h include\google\protobuf\compiler\csharp\csharp_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_names.h include\google\protobuf\compiler\csharp\csharp_names.h
 copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
 copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
 copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_names.h include\google\protobuf\compiler\java\java_names.h
diff --git a/src/Makefile.am b/src/Makefile.am
index 0a7d3a3..865e78d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -147,6 +147,7 @@
   google/protobuf/compiler/python/python_generator.h            \
   google/protobuf/compiler/ruby/ruby_generator.h                \
   google/protobuf/compiler/csharp/csharp_generator.h            \
+  google/protobuf/compiler/csharp/csharp_names.h                \
   google/protobuf/util/type_resolver.h                          \
   google/protobuf/util/type_resolver_util.h                     \
   google/protobuf/util/json_util.h                              \
diff --git a/src/google/protobuf/compiler/csharp/csharp_field_base.cc b/src/google/protobuf/compiler/csharp/csharp_field_base.cc
index 1f583e0..89d4eb1 100644
--- a/src/google/protobuf/compiler/csharp/csharp_field_base.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_field_base.cc
@@ -44,6 +44,7 @@
 
 #include <google/protobuf/compiler/csharp/csharp_field_base.h>
 #include <google/protobuf/compiler/csharp/csharp_helpers.h>
+#include <google/protobuf/compiler/csharp/csharp_names.h>
 
 using google::protobuf::internal::scoped_ptr;
 
diff --git a/src/google/protobuf/compiler/csharp/csharp_helpers.h b/src/google/protobuf/compiler/csharp/csharp_helpers.h
index b6a75b3..653ff99 100644
--- a/src/google/protobuf/compiler/csharp/csharp_helpers.h
+++ b/src/google/protobuf/compiler/csharp/csharp_helpers.h
@@ -69,15 +69,14 @@
 
 std::string StripDotProto(const std::string& proto_file);
 
-std::string GetFileNamespace(const FileDescriptor* descriptor);
 std::string GetFileUmbrellaClassname(const FileDescriptor* descriptor);
+
 std::string GetFileUmbrellaNamespace(const FileDescriptor* descriptor);
 
 std::string GetFullUmbrellaClassName(const FileDescriptor* descriptor);
 
 std::string GetQualifiedUmbrellaClassName(const FileDescriptor* descriptor);
 
-std::string GetClassName(const Descriptor* descriptor);
 std::string GetClassName(const EnumDescriptor* descriptor);
 
 std::string GetFieldName(const FieldDescriptor* descriptor);
diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc
index 79b762d..10cf358 100644
--- a/src/google/protobuf/compiler/csharp/csharp_message.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_message.cc
@@ -43,9 +43,10 @@
 #include <google/protobuf/wire_format_lite.h>
 
 #include <google/protobuf/compiler/csharp/csharp_enum.h>
-#include <google/protobuf/compiler/csharp/csharp_message.h>
-#include <google/protobuf/compiler/csharp/csharp_helpers.h>
 #include <google/protobuf/compiler/csharp/csharp_field_base.h>
+#include <google/protobuf/compiler/csharp/csharp_helpers.h>
+#include <google/protobuf/compiler/csharp/csharp_message.h>
+#include <google/protobuf/compiler/csharp/csharp_names.h>
 
 using google::protobuf::internal::scoped_ptr;
 
diff --git a/src/google/protobuf/compiler/csharp/csharp_names.h b/src/google/protobuf/compiler/csharp/csharp_names.h
new file mode 100644
index 0000000..74466cd
--- /dev/null
+++ b/src/google/protobuf/compiler/csharp/csharp_names.h
@@ -0,0 +1,74 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// Provides a mechanism for mapping a descriptor to the
+// fully-qualified name of the corresponding C# class.
+
+#ifndef GOOGLE_PROTOBUF_COMPILER_CSHARP_NAMES_H__
+#define GOOGLE_PROTOBUF_COMPILER_CSHARP_NAMES_H__
+
+#include <string>
+
+namespace google {
+namespace protobuf {
+
+class Descriptor;
+class EnumDescriptor;
+class FileDescriptor;
+class ServiceDescriptor;
+
+namespace compiler {
+namespace csharp {
+
+// Requires:
+//   descriptor != NULL
+//
+// Returns:
+//   The namespace to use for given file descriptor.
+string GetFileNamespace(const FileDescriptor* descriptor);
+
+// Requires:
+//   descriptor != NULL
+//
+// Returns:
+//   The fully-qualified C# class name.
+string GetClassName(const Descriptor* descriptor);
+
+
+}  // namespace csharp
+}  // namespace compiler
+}  // namespace protobuf
+}  // namespace google
+
+#endif  // GOOGLE_PROTOBUF_COMPILER_CSHARP_NAMES_H__
diff --git a/src/google/protobuf/compiler/csharp/csharp_umbrella_class.cc b/src/google/protobuf/compiler/csharp/csharp_umbrella_class.cc
index b75c68a..57271d1 100644
--- a/src/google/protobuf/compiler/csharp/csharp_umbrella_class.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_umbrella_class.cc
@@ -37,10 +37,12 @@
 #include <google/protobuf/io/printer.h>
 #include <google/protobuf/io/zero_copy_stream.h>
 
-#include <google/protobuf/compiler/csharp/csharp_umbrella_class.h>
+
 #include <google/protobuf/compiler/csharp/csharp_enum.h>
 #include <google/protobuf/compiler/csharp/csharp_helpers.h>
 #include <google/protobuf/compiler/csharp/csharp_message.h>
+#include <google/protobuf/compiler/csharp/csharp_names.h>
+#include <google/protobuf/compiler/csharp/csharp_umbrella_class.h>
 
 namespace google {
 namespace protobuf {