Reverted wrongly pushed commits.
- This reverts commit 876aee506b937d64b1fb035ff65e5e52def04c04.
- This reverts commit b89316d54bb0253493b48446cb510755fb3196d2.
diff --git a/.gitignore b/.gitignore
index eacff5b..d11897e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -184,9 +184,6 @@
 /lib/c_glib/test/testserialization
 /lib/c_glib/thriftc.pc
 /lib/c_glib/thrift_c_glib.pc
-/lib/csharp/**/bin/
-/lib/csharp/**/obj/
-/lib/csharp/src/packages
 /lib/d/test/*.pem
 /lib/d/libthriftd*.a
 /lib/d/test/async_test
@@ -234,8 +231,6 @@
 /lib/js/dist
 /lib/js/doc
 /lib/js/test/build
-/lib/netcore/**/bin
-/lib/netcore/**/obj
 /lib/netstd/**/bin
 /lib/netstd/**/obj
 /lib/nodejs/coverage
@@ -328,8 +323,6 @@
 /test/cpp/StressTestNonBlocking
 /test/cpp/TestClient
 /test/cpp/TestServer
-/test/csharp/obj
-/test/csharp/bin
 /test/dart/**/.dart_tool
 /test/dart/**/.packages
 /test/dart/**/packages
@@ -358,9 +351,6 @@
 /test/php/php_ext_dir/
 /test/py.twisted/_trial_temp/
 /test/rb/Gemfile.lock
-/test/netcore/**/bin
-/test/netcore/**/obj
-/test/netcore/Thrift
 /test/netstd/**/bin
 /test/netstd/**/obj
 /test/netstd/**/launchSettings.json
@@ -393,10 +383,6 @@
 /tutorial/cpp/TutorialServer
 /tutorial/c_glib/tutorial_client
 /tutorial/c_glib/tutorial_server
-/tutorial/csharp/CsharpServer/obj
-/tutorial/csharp/CsharpServer/bin
-/tutorial/csharp/CsharpClient/obj
-/tutorial/csharp/CsharpClient/bin
 /tutorial/d/async_client
 /tutorial/d/client
 /tutorial/d/server
@@ -421,9 +407,6 @@
 /tutorial/hs/dist/
 /tutorial/java/build/
 /tutorial/js/build/
-/tutorial/netcore/**/bin
-/tutorial/netcore/**/obj
-/tutorial/netcore/Thrift
 /tutorial/netstd/**/bin
 /tutorial/netstd/**/obj
 /tutorial/netstd/Interfaces
diff --git a/compiler/cpp/CMakeLists.txt b/compiler/cpp/CMakeLists.txt
index 0d80f79..0675f0e 100644
--- a/compiler/cpp/CMakeLists.txt
+++ b/compiler/cpp/CMakeLists.txt
@@ -76,7 +76,6 @@
 THRIFT_ADD_COMPILER(c_glib  "Enable compiler for C with Glib" ON)
 THRIFT_ADD_COMPILER(cl      "Enable compiler for Common LISP" ON)
 THRIFT_ADD_COMPILER(cpp     "Enable compiler for C++" ON)
-THRIFT_ADD_COMPILER(csharp  "Enable compiler for C#" ON)
 THRIFT_ADD_COMPILER(d       "Enable compiler for D" ON)
 THRIFT_ADD_COMPILER(dart    "Enable compiler for Dart" ON)
 THRIFT_ADD_COMPILER(delphi  "Enable compiler for Delphi" ON)
diff --git a/compiler/cpp/Makefile.am b/compiler/cpp/Makefile.am
index 2f962fe..05c9121 100644
--- a/compiler/cpp/Makefile.am
+++ b/compiler/cpp/Makefile.am
@@ -73,7 +73,6 @@
                   src/thrift/generate/t_c_glib_generator.cc \
                   src/thrift/generate/t_cl_generator.cc \
                   src/thrift/generate/t_cpp_generator.cc \
-                  src/thrift/generate/t_csharp_generator.cc \
                   src/thrift/generate/t_d_generator.cc \
                   src/thrift/generate/t_dart_generator.cc \
                   src/thrift/generate/t_delphi_generator.cc \
diff --git a/compiler/cpp/compiler.vcxproj b/compiler/cpp/compiler.vcxproj
index 6e2bd8a..dc9793f 100644
--- a/compiler/cpp/compiler.vcxproj
+++ b/compiler/cpp/compiler.vcxproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|Win32">
       <Configuration>Debug</Configuration>
@@ -57,7 +57,6 @@
     <ClCompile Include="src\thrift\generate\t_c_glib_generator.cc" />
     <ClCompile Include="src\thrift\generate\t_cl_generator.cc" />
     <ClCompile Include="src\thrift\generate\t_cpp_generator.cc" />
-    <ClCompile Include="src\thrift\generate\t_csharp_generator.cc" />
     <ClCompile Include="src\thrift\generate\t_d_generator.cc" />
     <ClCompile Include="src\thrift\generate\t_dart_generator.cc" />
     <ClCompile Include="src\thrift\generate\t_delphi_generator.cc" />
@@ -99,34 +98,29 @@
     <ProjectGuid>{89975A1A-F799-4556-98B8-64E30AB39A90}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
     <RootNamespace>compiler</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v142</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v142</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v142</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v142</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -149,7 +143,6 @@
     <IncludePath>$(ProjectDir)\src\;$(ProjectDir)\src\windows\;$(IncludePath)</IncludePath>
     <TargetName>thrift</TargetName>
     <ExecutablePath>$(ExecutablePath);C:\Program Files (x86)\Git\bin</ExecutablePath>
-    <OutDir>E:\D\TOOLS\Thrift\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
diff --git a/compiler/cpp/compiler.vcxproj.filters b/compiler/cpp/compiler.vcxproj.filters
index fcb3230..360c446 100644
--- a/compiler/cpp/compiler.vcxproj.filters
+++ b/compiler/cpp/compiler.vcxproj.filters
@@ -101,9 +101,6 @@
     <ClCompile Include="src\generate\t_cpp_generator.cc">
       <Filter>generate</Filter>
     </ClCompile>
-    <ClCompile Include="src\generate\t_csharp_generator.cc">
-      <Filter>generate</Filter>
-    </ClCompile>
     <ClCompile Include="src\generate\t_c_glib_generator.cc">
       <Filter>generate</Filter>
     </ClCompile>
diff --git a/compiler/cpp/src/thrift/generate/t_csharp_generator.cc b/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
deleted file mode 100644
index e4d99b2..0000000
--- a/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
+++ /dev/null
@@ -1,3259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-#include <cassert>
-
-#include <string>
-#include <fstream>
-#include <iostream>
-#include <vector>
-#include <cctype>
-
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sstream>
-
-#include "thrift/platform.h"
-#include "thrift/generate/t_oop_generator.h"
-
-using std::map;
-using std::ostream;
-using std::ostringstream;
-using std::string;
-using std::stringstream;
-using std::vector;
-
-static const string endl = "\n"; // avoid ostream << std::endl flushes
-
-struct member_mapping_scope {
-  void* scope_member;
-  std::map<std::string, std::string> mapping_table;
-};
-
-class t_csharp_generator : public t_oop_generator {
-public:
-  t_csharp_generator(t_program* program,
-                     const std::map<std::string, std::string>& parsed_options,
-                     const std::string& option_string)
-    : t_oop_generator(program) {
-    (void)option_string;
-
-    std::map<std::string, std::string>::const_iterator iter;
-
-    async_ = false;
-    nullable_ = false;
-    hashcode_ = false;
-    union_ = false;
-    serialize_ = false;
-    wcf_ = false;
-    wcf_namespace_.clear();
-    for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      if( iter->first.compare("async") == 0) {
-        async_ = true;
-      } else if( iter->first.compare("nullable") == 0) {
-        nullable_ = true;
-      } else if( iter->first.compare("hashcode") == 0) {
-        hashcode_ = true;
-      } else if( iter->first.compare("union") == 0) {
-        union_ = true;
-      } else if( iter->first.compare("serial") == 0) {
-        serialize_ = true;
-        wcf_namespace_ = iter->second; // since there can be only one namespace
-      } else if( iter->first.compare("wcf") == 0) {
-        wcf_ = true;
-        wcf_namespace_ = iter->second;
-      } else {
-        throw "unknown option csharp:" + iter->first;
-      }
-    }
-
-    out_dir_base_ = "gen-csharp";
-  }
-  void init_generator() override;
-  void close_generator() override;
-
-  void generate_consts(std::vector<t_const*> consts) override;
-
-  void generate_typedef(t_typedef* ttypedef) override;
-  void generate_enum(t_enum* tenum) override;
-  void generate_struct(t_struct* tstruct) override;
-  void generate_union(t_struct* tunion);
-  void generate_xception(t_struct* txception) override;
-  void generate_service(t_service* tservice) override;
-  void generate_property(ostream& out, t_field* tfield, bool isPublic, bool generateIsset);
-  void generate_csharp_property(ostream& out,
-                                t_field* tfield,
-                                bool isPublic,
-                                bool includeIsset = true,
-                                std::string fieldPrefix = "");
-  bool print_const_value(std::ostream& out,
-                         std::string name,
-                         t_type* type,
-                         t_const_value* value,
-                         bool in_static,
-                         bool defval = false,
-                         bool needtype = false);
-  std::string render_const_value(std::ostream& out,
-                                 std::string name,
-                                 t_type* type,
-                                 t_const_value* value);
-  void print_const_constructor(std::ostream& out, std::vector<t_const*> consts);
-  void print_const_def_value(std::ostream& out,
-                             std::string name,
-                             t_type* type,
-                             t_const_value* value);
-
-  void generate_csharp_struct(t_struct* tstruct, bool is_exception);
-  void generate_csharp_union(t_struct* tunion);
-  void generate_csharp_struct_definition(std::ostream& out,
-                                         t_struct* tstruct,
-                                         bool is_xception = false,
-                                         bool in_class = false,
-                                         bool is_result = false);
-  void generate_csharp_union_definition(std::ostream& out, t_struct* tunion);
-  void generate_csharp_union_class(std::ostream& out, t_struct* tunion, t_field* tfield);
-  void generate_csharp_wcffault(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_struct_reader(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_struct_result_writer(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_struct_writer(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_struct_tostring(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_struct_equals(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_struct_hashcode(std::ostream& out, t_struct* tstruct);
-  void generate_csharp_union_reader(std::ostream& out, t_struct* tunion);
-
-  void generate_function_helpers(t_function* tfunction);
-  void generate_service_interface(t_service* tservice);
-  void generate_separate_service_interfaces(t_service* tservice);
-  void generate_sync_service_interface(t_service* tservice);
-  void generate_async_service_interface(t_service* tservice);
-  void generate_combined_service_interface(t_service* tservice);
-  void generate_silverlight_async_methods(t_service* tservice);
-  void generate_service_helpers(t_service* tservice);
-  void generate_service_client(t_service* tservice);
-  void generate_service_server(t_service* tservice);
-  void generate_service_server_sync(t_service* tservice);
-  void generate_service_server_async(t_service* tservice);
-  void generate_process_function(t_service* tservice, t_function* function);
-  void generate_process_function_async(t_service* tservice, t_function* function);
-
-  void generate_deserialize_field(std::ostream& out,
-                                  t_field* tfield,
-                                  std::string prefix = "",
-                                  bool is_propertyless = false);
-  void generate_deserialize_struct(std::ostream& out, t_struct* tstruct, std::string prefix = "");
-  void generate_deserialize_container(std::ostream& out, t_type* ttype, std::string prefix = "");
-  void generate_deserialize_set_element(std::ostream& out, t_set* tset, std::string prefix = "");
-  void generate_deserialize_map_element(std::ostream& out, t_map* tmap, std::string prefix = "");
-  void generate_deserialize_list_element(std::ostream& out, t_list* list, std::string prefix = "");
-  void generate_serialize_field(std::ostream& out,
-                                t_field* tfield,
-                                std::string prefix = "",
-                                bool is_element = false,
-                                bool is_propertyless = false);
-  void generate_serialize_struct(std::ostream& out, t_struct* tstruct, std::string prefix = "");
-  void generate_serialize_container(std::ostream& out, t_type* ttype, std::string prefix = "");
-  void generate_serialize_map_element(std::ostream& out,
-                                      t_map* tmap,
-                                      std::string iter,
-                                      std::string map);
-  void generate_serialize_set_element(std::ostream& out, t_set* tmap, std::string iter);
-  void generate_serialize_list_element(std::ostream& out, t_list* tlist, std::string iter);
-
-  void generate_csharp_doc(std::ostream& out, t_field* field);
-  void generate_csharp_doc(std::ostream& out, t_doc* tdoc);
-  void generate_csharp_doc(std::ostream& out, t_function* tdoc);
-  void generate_csharp_docstring_comment(std::ostream& out, string contents);
-
-  void start_csharp_namespace(std::ostream& out);
-  void end_csharp_namespace(std::ostream& out);
-
-  std::string csharp_type_usings();
-  std::string csharp_thrift_usings();
-
-  std::string type_name(t_type* ttype,
-                        bool in_countainer = false,
-                        bool in_init = false,
-                        bool in_param = false,
-                        bool is_required = false);
-  std::string base_type_name(t_base_type* tbase,
-                             bool in_container = false,
-                             bool in_param = false,
-                             bool is_required = false);
-  std::string declare_field(t_field* tfield, bool init = false, std::string prefix = "");
-  std::string function_signature_async_begin(t_function* tfunction, std::string prefix = "");
-  std::string function_signature_async_end(t_function* tfunction, std::string prefix = "");
-  std::string function_signature_async(t_function* tfunction, std::string prefix = "");
-  std::string function_signature(t_function* tfunction, std::string prefix = "");
-  std::string argument_list(t_struct* tstruct);
-  std::string type_to_enum(t_type* ttype);
-  std::string prop_name(t_field* tfield, bool suppress_mapping = false);
-  std::string get_enum_class_name(t_type* type) override;
-
-  bool field_has_default(t_field* tfield) { return tfield->get_value() != NULL; }
-
-  bool field_is_required(t_field* tfield) { return tfield->get_req() == t_field::T_REQUIRED; }
-
-  bool type_can_be_null(t_type* ttype) {
-    while (ttype->is_typedef()) {
-      ttype = ((t_typedef*)ttype)->get_type();
-    }
-
-    return ttype->is_container() || ttype->is_struct() || ttype->is_xception()
-           || ttype->is_string();
-  }
-
-private:
-  std::string namespace_name_;
-  ofstream_with_content_based_conditional_update f_service_;
-  std::string namespace_dir_;
-  bool async_;
-  bool nullable_;
-  bool union_;
-  bool hashcode_;
-  bool serialize_;
-  bool wcf_;
-  std::string wcf_namespace_;
-
-  std::map<std::string, int> csharp_keywords;
-  std::vector<member_mapping_scope>  member_mapping_scopes;
-
-  void init_keywords();
-  std::string normalize_name(std::string name);
-  std::string make_valid_csharp_identifier(std::string const& fromName);
-  void prepare_member_name_mapping(t_struct* tstruct);
-  void prepare_member_name_mapping(void* scope,
-                                   const vector<t_field*>& members,
-                                   const string& structname);
-  void cleanup_member_name_mapping(void* scope);
-  string get_mapped_member_name(string oldname);
-};
-
-void t_csharp_generator::init_generator() {
-  MKDIR(get_out_dir().c_str());
-  namespace_name_ = program_->get_namespace("csharp");
-
-  string dir = namespace_name_;
-  string subdir = get_out_dir().c_str();
-  string::size_type loc;
-
-  while ((loc = dir.find(".")) != string::npos) {
-    subdir = subdir + "/" + dir.substr(0, loc);
-    MKDIR(subdir.c_str());
-    dir = dir.substr(loc + 1);
-  }
-  if (dir.size() > 0) {
-    subdir = subdir + "/" + dir;
-    MKDIR(subdir.c_str());
-  }
-
-  namespace_dir_ = subdir;
-  init_keywords();
-
-  while( ! member_mapping_scopes.empty()) {
-    cleanup_member_name_mapping( member_mapping_scopes.back().scope_member);
-  }
-
-  pverbose("C# options:\n");
-  pverbose("- async ...... %s\n", (async_ ? "ON" : "off"));
-  pverbose("- nullable ... %s\n", (nullable_ ? "ON" : "off"));
-  pverbose("- union ...... %s\n", (union_ ? "ON" : "off"));
-  pverbose("- hashcode ... %s\n", (hashcode_ ? "ON" : "off"));
-  pverbose("- serialize .. %s\n", (serialize_ ? "ON" : "off"));
-  pverbose("- wcf ........ %s\n", (wcf_ ? "ON" : "off"));
-}
-
-std::string t_csharp_generator::normalize_name(std::string name) {
-  string tmp(name);
-  std::transform(tmp.begin(), tmp.end(), tmp.begin(), static_cast<int (*)(int)>(std::tolower));
-
-  // un-conflict keywords by prefixing with "@"
-  if (csharp_keywords.find(tmp) != csharp_keywords.end()) {
-    return "@" + name;
-  }
-
-  // no changes necessary
-  return name;
-}
-
-void t_csharp_generator::init_keywords() {
-  csharp_keywords.clear();
-
-  // C# keywords
-  csharp_keywords["abstract"] = 1;
-  csharp_keywords["as"] = 1;
-  csharp_keywords["base"] = 1;
-  csharp_keywords["bool"] = 1;
-  csharp_keywords["break"] = 1;
-  csharp_keywords["byte"] = 1;
-  csharp_keywords["case"] = 1;
-  csharp_keywords["catch"] = 1;
-  csharp_keywords["char"] = 1;
-  csharp_keywords["checked"] = 1;
-  csharp_keywords["class"] = 1;
-  csharp_keywords["const"] = 1;
-  csharp_keywords["continue"] = 1;
-  csharp_keywords["decimal"] = 1;
-  csharp_keywords["default"] = 1;
-  csharp_keywords["delegate"] = 1;
-  csharp_keywords["do"] = 1;
-  csharp_keywords["double"] = 1;
-  csharp_keywords["else"] = 1;
-  csharp_keywords["enum"] = 1;
-  csharp_keywords["event"] = 1;
-  csharp_keywords["explicit"] = 1;
-  csharp_keywords["extern"] = 1;
-  csharp_keywords["false"] = 1;
-  csharp_keywords["finally"] = 1;
-  csharp_keywords["fixed"] = 1;
-  csharp_keywords["float"] = 1;
-  csharp_keywords["for"] = 1;
-  csharp_keywords["foreach"] = 1;
-  csharp_keywords["goto"] = 1;
-  csharp_keywords["if"] = 1;
-  csharp_keywords["implicit"] = 1;
-  csharp_keywords["in"] = 1;
-  csharp_keywords["int"] = 1;
-  csharp_keywords["interface"] = 1;
-  csharp_keywords["internal"] = 1;
-  csharp_keywords["is"] = 1;
-  csharp_keywords["lock"] = 1;
-  csharp_keywords["long"] = 1;
-  csharp_keywords["namespace"] = 1;
-  csharp_keywords["new"] = 1;
-  csharp_keywords["null"] = 1;
-  csharp_keywords["object"] = 1;
-  csharp_keywords["operator"] = 1;
-  csharp_keywords["out"] = 1;
-  csharp_keywords["override"] = 1;
-  csharp_keywords["params"] = 1;
-  csharp_keywords["private"] = 1;
-  csharp_keywords["protected"] = 1;
-  csharp_keywords["public"] = 1;
-  csharp_keywords["readonly"] = 1;
-  csharp_keywords["ref"] = 1;
-  csharp_keywords["return"] = 1;
-  csharp_keywords["sbyte"] = 1;
-  csharp_keywords["sealed"] = 1;
-  csharp_keywords["short"] = 1;
-  csharp_keywords["sizeof"] = 1;
-  csharp_keywords["stackalloc"] = 1;
-  csharp_keywords["static"] = 1;
-  csharp_keywords["string"] = 1;
-  csharp_keywords["struct"] = 1;
-  csharp_keywords["switch"] = 1;
-  csharp_keywords["this"] = 1;
-  csharp_keywords["throw"] = 1;
-  csharp_keywords["true"] = 1;
-  csharp_keywords["try"] = 1;
-  csharp_keywords["typeof"] = 1;
-  csharp_keywords["uint"] = 1;
-  csharp_keywords["ulong"] = 1;
-  csharp_keywords["unchecked"] = 1;
-  csharp_keywords["unsafe"] = 1;
-  csharp_keywords["ushort"] = 1;
-  csharp_keywords["using"] = 1;
-  csharp_keywords["virtual"] = 1;
-  csharp_keywords["void"] = 1;
-  csharp_keywords["volatile"] = 1;
-  csharp_keywords["while"] = 1;
-
-  // C# contextual keywords
-  csharp_keywords["add"] = 1;
-  csharp_keywords["alias"] = 1;
-  csharp_keywords["ascending"] = 1;
-  csharp_keywords["async"] = 1;
-  csharp_keywords["await"] = 1;
-  csharp_keywords["descending"] = 1;
-  csharp_keywords["dynamic"] = 1;
-  csharp_keywords["from"] = 1;
-  csharp_keywords["get"] = 1;
-  csharp_keywords["global"] = 1;
-  csharp_keywords["group"] = 1;
-  csharp_keywords["into"] = 1;
-  csharp_keywords["join"] = 1;
-  csharp_keywords["let"] = 1;
-  csharp_keywords["orderby"] = 1;
-  csharp_keywords["partial"] = 1;
-  csharp_keywords["remove"] = 1;
-  csharp_keywords["select"] = 1;
-  csharp_keywords["set"] = 1;
-  csharp_keywords["value"] = 1;
-  csharp_keywords["var"] = 1;
-  csharp_keywords["where"] = 1;
-  csharp_keywords["yield"] = 1;
-}
-
-void t_csharp_generator::start_csharp_namespace(ostream& out) {
-  if (!namespace_name_.empty()) {
-    out << "namespace " << namespace_name_ << "\n";
-    scope_up(out);
-  }
-}
-
-void t_csharp_generator::end_csharp_namespace(ostream& out) {
-  if (!namespace_name_.empty()) {
-    scope_down(out);
-  }
-}
-
-string t_csharp_generator::csharp_type_usings() {
-  return string() + "using System;\n" + "using System.Collections;\n"
-         + "using System.Collections.Generic;\n" + "using System.Text;\n" + "using System.IO;\n"
-         + ((async_) ? "using System.Threading.Tasks;\n" : "") + "using Thrift;\n"
-         + "using Thrift.Collections;\n" + ((serialize_ || wcf_) ? "#if !SILVERLIGHT\n" : "")
-         + ((serialize_ || wcf_) ? "using System.Xml.Serialization;\n" : "")
-         + ((serialize_ || wcf_) ? "#endif\n" : "")
-         + "using System.Runtime.Serialization;\n";
-}
-
-string t_csharp_generator::csharp_thrift_usings() {
-  return string() + "using Thrift.Protocol;\n" + "using Thrift.Transport;\n";
-}
-
-void t_csharp_generator::close_generator() {
-}
-void t_csharp_generator::generate_typedef(t_typedef* ttypedef) {
-  (void)ttypedef;
-}
-
-void t_csharp_generator::generate_enum(t_enum* tenum) {
-  string f_enum_name = namespace_dir_ + "/" + (tenum->get_name()) + ".cs";
-  ofstream_with_content_based_conditional_update f_enum;
-  f_enum.open(f_enum_name.c_str());
-
-  f_enum << autogen_comment() << endl;
-
-  start_csharp_namespace(f_enum);
-
-  generate_csharp_doc(f_enum, tenum);
-
-  indent(f_enum) << "public enum " << tenum->get_name() << "\n";
-  scope_up(f_enum);
-
-  vector<t_enum_value*> constants = tenum->get_constants();
-  vector<t_enum_value*>::iterator c_iter;
-  for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
-    generate_csharp_doc(f_enum, *c_iter);
-
-    int value = (*c_iter)->get_value();
-    indent(f_enum) << (*c_iter)->get_name() << " = " << value << "," << endl;
-  }
-
-  scope_down(f_enum);
-
-  end_csharp_namespace(f_enum);
-
-  f_enum.close();
-}
-
-void t_csharp_generator::generate_consts(std::vector<t_const*> consts) {
-  if (consts.empty()) {
-    return;
-  }
-  string f_consts_name = namespace_dir_ + '/' + program_name_ + ".Constants.cs";
-  ofstream_with_content_based_conditional_update f_consts;
-  f_consts.open(f_consts_name.c_str());
-
-  f_consts << autogen_comment() << csharp_type_usings() << endl;
-
-  start_csharp_namespace(f_consts);
-
-  indent(f_consts) << "public static class " << make_valid_csharp_identifier(program_name_)
-                   << "Constants" << endl;
-  scope_up(f_consts);
-
-  vector<t_const*>::iterator c_iter;
-  bool need_static_constructor = false;
-  for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
-    generate_csharp_doc(f_consts, (*c_iter));
-    if (print_const_value(f_consts,
-                          (*c_iter)->get_name(),
-                          (*c_iter)->get_type(),
-                          (*c_iter)->get_value(),
-                          false)) {
-      need_static_constructor = true;
-    }
-  }
-
-  if (need_static_constructor) {
-    print_const_constructor(f_consts, consts);
-  }
-
-  scope_down(f_consts);
-  end_csharp_namespace(f_consts);
-  f_consts.close();
-}
-
-void t_csharp_generator::print_const_def_value(std::ostream& out,
-                                               string name,
-                                               t_type* type,
-                                               t_const_value* value) {
-  if (type->is_struct() || type->is_xception()) {
-    const vector<t_field*>& fields = ((t_struct*)type)->get_members();
-    vector<t_field*>::const_iterator f_iter;
-    const map<t_const_value*, t_const_value*, t_const_value::value_compare>& val = value->get_map();
-    map<t_const_value*, t_const_value*, t_const_value::value_compare>::const_iterator v_iter;
-    prepare_member_name_mapping((t_struct*)type);
-    for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
-      t_field* field = NULL;
-      for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-        if ((*f_iter)->get_name() == v_iter->first->get_string()) {
-          field = (*f_iter);
-        }
-      }
-      if (field == NULL) {
-        throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
-      }
-      t_type* field_type = field->get_type();
-      string val = render_const_value(out, name, field_type, v_iter->second);
-      indent(out) << name << "." << prop_name(field) << " = " << val << ";" << endl;
-    }
-    cleanup_member_name_mapping((t_struct*)type);
-  } else if (type->is_map()) {
-    t_type* ktype = ((t_map*)type)->get_key_type();
-    t_type* vtype = ((t_map*)type)->get_val_type();
-    const map<t_const_value*, t_const_value*, t_const_value::value_compare>& val = value->get_map();
-    map<t_const_value*, t_const_value*, t_const_value::value_compare>::const_iterator v_iter;
-    for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
-      string key = render_const_value(out, name, ktype, v_iter->first);
-      string val = render_const_value(out, name, vtype, v_iter->second);
-      indent(out) << name << "[" << key << "]"
-                  << " = " << val << ";" << endl;
-    }
-  } else if (type->is_list() || type->is_set()) {
-    t_type* etype;
-    if (type->is_list()) {
-      etype = ((t_list*)type)->get_elem_type();
-    } else {
-      etype = ((t_set*)type)->get_elem_type();
-    }
-
-    const vector<t_const_value*>& val = value->get_list();
-    vector<t_const_value*>::const_iterator v_iter;
-    for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
-      string val = render_const_value(out, name, etype, *v_iter);
-      indent(out) << name << ".Add(" << val << ");" << endl;
-    }
-  }
-}
-
-void t_csharp_generator::print_const_constructor(std::ostream& out, std::vector<t_const*> consts) {
-  indent(out) << "static " << make_valid_csharp_identifier(program_name_).c_str() << "Constants()"
-              << endl;
-  scope_up(out);
-  vector<t_const*>::iterator c_iter;
-  for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
-    string name = (*c_iter)->get_name();
-    t_type* type = (*c_iter)->get_type();
-    t_const_value* value = (*c_iter)->get_value();
-
-    print_const_def_value(out, name, type, value);
-  }
-  scope_down(out);
-}
-
-// it seems like all that methods that call this are using in_static to be the opposite of what it
-// would imply
-bool t_csharp_generator::print_const_value(std::ostream& out,
-                                           string name,
-                                           t_type* type,
-                                           t_const_value* value,
-                                           bool in_static,
-                                           bool defval,
-                                           bool needtype) {
-  indent(out);
-  bool need_static_construction = !in_static;
-  while (type->is_typedef()) {
-    type = ((t_typedef*)type)->get_type();
-  }
-
-  if (!defval || needtype) {
-    out << (in_static ? "" : type->is_base_type() ? "public const " : "public static ")
-        << type_name(type) << " ";
-  }
-  if (type->is_base_type()) {
-    string v2 = render_const_value(out, name, type, value);
-    out << name << " = " << v2 << ";" << endl;
-    need_static_construction = false;
-  } else if (type->is_enum()) {
-    out << name << " = " << type_name(type, false, true) << "." << value->get_identifier_name()
-        << ";" << endl;
-    need_static_construction = false;
-  } else if (type->is_struct() || type->is_xception()) {
-    out << name << " = new " << type_name(type) << "();" << endl;
-  } else if (type->is_map()) {
-    out << name << " = new " << type_name(type, true, true) << "();" << endl;
-  } else if (type->is_list() || type->is_set()) {
-    out << name << " = new " << type_name(type) << "();" << endl;
-  }
-
-  if (defval && !type->is_base_type() && !type->is_enum()) {
-    print_const_def_value(out, name, type, value);
-  }
-
-  return need_static_construction;
-}
-
-std::string t_csharp_generator::render_const_value(ostream& out,
-                                                   string name,
-                                                   t_type* type,
-                                                   t_const_value* value) {
-  (void)name;
-  std::ostringstream render;
-
-  if (type->is_base_type()) {
-    t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
-    switch (tbase) {
-    case t_base_type::TYPE_STRING:
-      render << '"' << get_escaped_string(value) << '"';
-      break;
-    case t_base_type::TYPE_BOOL:
-      render << ((value->get_integer() > 0) ? "true" : "false");
-      break;
-    case t_base_type::TYPE_I8:
-    case t_base_type::TYPE_I16:
-    case t_base_type::TYPE_I32:
-    case t_base_type::TYPE_I64:
-      render << value->get_integer();
-      break;
-    case t_base_type::TYPE_DOUBLE:
-      if (value->get_type() == t_const_value::CV_INTEGER) {
-        render << value->get_integer();
-      } else {
-        render << value->get_double();
-      }
-      break;
-    default:
-      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
-    }
-  } else if (type->is_enum()) {
-    render << type->get_name() << "." << value->get_identifier_name();
-  } else {
-    string t = tmp("tmp");
-    print_const_value(out, t, type, value, true, true, true);
-    render << t;
-  }
-
-  return render.str();
-}
-
-void t_csharp_generator::generate_struct(t_struct* tstruct) {
-  if (union_ && tstruct->is_union()) {
-    generate_csharp_union(tstruct);
-  } else {
-    generate_csharp_struct(tstruct, false);
-  }
-}
-
-void t_csharp_generator::generate_xception(t_struct* txception) {
-  generate_csharp_struct(txception, true);
-}
-
-void t_csharp_generator::generate_csharp_struct(t_struct* tstruct, bool is_exception) {
-  string f_struct_name = namespace_dir_ + "/" + (tstruct->get_name()) + ".cs";
-  ofstream_with_content_based_conditional_update f_struct;
-
-  f_struct.open(f_struct_name.c_str());
-
-  f_struct << autogen_comment() << csharp_type_usings() << csharp_thrift_usings() << endl;
-
-  generate_csharp_struct_definition(f_struct, tstruct, is_exception);
-
-  f_struct.close();
-}
-
-void t_csharp_generator::generate_csharp_struct_definition(ostream& out,
-                                                           t_struct* tstruct,
-                                                           bool is_exception,
-                                                           bool in_class,
-                                                           bool is_result) {
-
-  if (!in_class) {
-    start_csharp_namespace(out);
-  }
-
-  out << endl;
-
-  generate_csharp_doc(out, tstruct);
-  prepare_member_name_mapping(tstruct);
-
-  indent(out) << "#if !SILVERLIGHT" << endl;
-  indent(out) << "[Serializable]" << endl;
-  indent(out) << "#endif" << endl;
-  if ((serialize_ || wcf_) && !is_exception) {
-    indent(out) << "[DataContract(Namespace=\"" << wcf_namespace_ << "\")]"
-                << endl; // do not make exception classes directly WCF serializable, we provide a
-                         // separate "fault" for that
-  }
-  bool is_final = (tstruct->annotations_.find("final") != tstruct->annotations_.end());
-
-  indent(out) << "public " << (is_final ? "sealed " : "") << "partial class "
-              << normalize_name(tstruct->get_name()) << " : ";
-
-  if (is_exception) {
-    out << "TException, ";
-  }
-  out << "TBase";
-
-  out << endl;
-
-  scope_up(out);
-
-  const vector<t_field*>& members = tstruct->get_members();
-  vector<t_field*>::const_iterator m_iter;
-
-  // make private members with public Properties
-  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    // if the field is requied, then we use auto-properties
-    if (!field_is_required((*m_iter)) && (!nullable_ || field_has_default((*m_iter)))) {
-      indent(out) << "private " << declare_field(*m_iter, false, "_") << endl;
-    }
-  }
-  out << endl;
-
-  bool has_non_required_fields = false;
-  bool has_non_required_default_value_fields = false;
-  bool has_required_fields = false;
-  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    generate_csharp_doc(out, *m_iter);
-    generate_property(out, *m_iter, true, true);
-    bool is_required = field_is_required((*m_iter));
-    bool has_default = field_has_default((*m_iter));
-    if (is_required) {
-      has_required_fields = true;
-    } else {
-      if (has_default) {
-        has_non_required_default_value_fields = true;
-      }
-      has_non_required_fields = true;
-    }
-  }
-
-  bool generate_isset = (nullable_ && has_non_required_default_value_fields)
-                        || (!nullable_ && has_non_required_fields);
-  if (generate_isset) {
-    out << endl;
-    if (serialize_ || wcf_) {
-      out << indent() << "[XmlIgnore] // XmlSerializer" << endl << indent()
-          << "[DataMember(Order = 1)]  // XmlObjectSerializer, DataContractJsonSerializer, etc."
-          << endl;
-    }
-    out << indent() << "public Isset __isset;" << endl << indent() << "#if !SILVERLIGHT" << endl
-        << indent() << "[Serializable]" << endl << indent() << "#endif" << endl;
-    if (serialize_ || wcf_) {
-      indent(out) << "[DataContract]" << endl;
-    }
-    indent(out) << "public struct Isset {" << endl;
-    indent_up();
-    for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-      bool is_required = field_is_required((*m_iter));
-      bool has_default = field_has_default((*m_iter));
-      // if it is required, don't need Isset for that variable
-      // if it is not required, if it has a default value, we need to generate Isset
-      // if we are not nullable, then we generate Isset
-      if (!is_required && (!nullable_ || has_default)) {
-        if (serialize_ || wcf_) {
-          indent(out) << "[DataMember]" << endl;
-        }
-        indent(out) << "public bool " << normalize_name((*m_iter)->get_name()) << ";" << endl;
-      }
-    }
-
-    indent_down();
-    indent(out) << "}" << endl << endl;
-
-    if (generate_isset && (serialize_ || wcf_)) {
-      indent(out) << "#region XmlSerializer support" << endl << endl;
-
-      for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-        bool is_required = field_is_required((*m_iter));
-        bool has_default = field_has_default((*m_iter));
-        // if it is required, don't need Isset for that variable
-        // if it is not required, if it has a default value, we need to generate Isset
-        // if we are not nullable, then we generate Isset
-        if (!is_required && (!nullable_ || has_default)) {
-          indent(out) << "public bool ShouldSerialize" << prop_name((*m_iter)) << "()" << endl;
-          indent(out) << "{" << endl;
-          indent_up();
-          indent(out) << "return __isset." << normalize_name((*m_iter)->get_name()) << ";" << endl;
-          indent_down();
-          indent(out) << "}" << endl << endl;
-        }
-      }
-
-      indent(out) << "#endregion XmlSerializer support" << endl << endl;
-    }
-  }
-
-  // We always want a default, no argument constructor for Reading
-  indent(out) << "public " << normalize_name(tstruct->get_name()) << "() {" << endl;
-  indent_up();
-
-  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    t_type* t = (*m_iter)->get_type();
-    while (t->is_typedef()) {
-      t = ((t_typedef*)t)->get_type();
-    }
-    if ((*m_iter)->get_value() != NULL) {
-      if (field_is_required((*m_iter))) {
-        print_const_value(out, "this." + prop_name(*m_iter), t, (*m_iter)->get_value(), true, true);
-      } else {
-        print_const_value(out,
-                          "this._" + (*m_iter)->get_name(),
-                          t,
-                          (*m_iter)->get_value(),
-                          true,
-                          true);
-        // Optionals with defaults are marked set
-        indent(out) << "this.__isset." << normalize_name((*m_iter)->get_name()) << " = true;"
-                    << endl;
-      }
-    }
-  }
-  indent_down();
-  indent(out) << "}" << endl << endl;
-
-  if (has_required_fields) {
-    indent(out) << "public " << tstruct->get_name() << "(";
-    bool first = true;
-    for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-      if (field_is_required((*m_iter))) {
-        if (first) {
-          first = false;
-        } else {
-          out << ", ";
-        }
-        out << type_name((*m_iter)->get_type()) << " " << normalize_name((*m_iter)->get_name());
-      }
-    }
-    out << ") : this() {" << endl;
-    indent_up();
-
-    for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-      if (field_is_required((*m_iter))) {
-        indent(out) << "this." << prop_name((*m_iter)) << " = " << normalize_name((*m_iter)->get_name()) << ";"
-                    << endl;
-      }
-    }
-
-    indent_down();
-    indent(out) << "}" << endl << endl;
-  }
-
-  generate_csharp_struct_reader(out, tstruct);
-  if (is_result) {
-    generate_csharp_struct_result_writer(out, tstruct);
-  } else {
-    generate_csharp_struct_writer(out, tstruct);
-  }
-  if (hashcode_) {
-    generate_csharp_struct_equals(out, tstruct);
-    generate_csharp_struct_hashcode(out, tstruct);
-  }
-  generate_csharp_struct_tostring(out, tstruct);
-  scope_down(out);
-  out << endl;
-
-  // generate a corresponding WCF fault to wrap the exception
-  if ((serialize_ || wcf_) && is_exception) {
-    generate_csharp_wcffault(out, tstruct);
-  }
-
-  cleanup_member_name_mapping(tstruct);
-  if (!in_class) {
-    end_csharp_namespace(out);
-  }
-}
-
-void t_csharp_generator::generate_csharp_wcffault(ostream& out, t_struct* tstruct) {
-  out << endl;
-  indent(out) << "#if !SILVERLIGHT" << endl;
-  indent(out) << "[Serializable]" << endl;
-  indent(out) << "#endif" << endl;
-  indent(out) << "[DataContract]" << endl;
-  bool is_final = (tstruct->annotations_.find("final") != tstruct->annotations_.end());
-
-  indent(out) << "public " << (is_final ? "sealed " : "") << "partial class " << tstruct->get_name()
-              << "Fault" << endl;
-
-  scope_up(out);
-
-  const vector<t_field*>& members = tstruct->get_members();
-  vector<t_field*>::const_iterator m_iter;
-
-  // make private members with public Properties
-  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    // if the field is requied, then we use auto-properties
-    if (!field_is_required((*m_iter)) && (!nullable_ || field_has_default((*m_iter)))) {
-      indent(out) << "private " << declare_field(*m_iter, false, "_") << endl;
-    }
-  }
-  out << endl;
-
-  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    generate_property(out, *m_iter, true, false);
-  }
-
-  scope_down(out);
-  out << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_reader(ostream& out, t_struct* tstruct) {
-  indent(out) << "public void Read (TProtocol iprot)" << endl;
-  scope_up(out);
-
-  out << indent() << "iprot.IncrementRecursionDepth();" << endl;
-  out << indent() << "try" << endl;
-  scope_up(out);
-
-  const vector<t_field*>& fields = tstruct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  // Required variables aren't in __isset, so we need tmp vars to check them
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (field_is_required((*f_iter))) {
-      indent(out) << "bool isset_" << (*f_iter)->get_name() << " = false;" << endl;
-    }
-  }
-
-  indent(out) << "TField field;" << endl << indent() << "iprot.ReadStructBegin();" << endl;
-
-  indent(out) << "while (true)" << endl;
-  scope_up(out);
-
-  indent(out) << "field = iprot.ReadFieldBegin();" << endl;
-
-  indent(out) << "if (field.Type == TType.Stop) { " << endl;
-  indent_up();
-  indent(out) << "break;" << endl;
-  indent_down();
-  indent(out) << "}" << endl;
-
-  indent(out) << "switch (field.ID)" << endl;
-
-  scope_up(out);
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    bool is_required = field_is_required((*f_iter));
-    indent(out) << "case " << (*f_iter)->get_key() << ":" << endl;
-    indent_up();
-    indent(out) << "if (field.Type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl;
-    indent_up();
-
-    generate_deserialize_field(out, *f_iter);
-    if (is_required) {
-      indent(out) << "isset_" << (*f_iter)->get_name() << " = true;" << endl;
-    }
-
-    indent_down();
-    out << indent() << "} else { " << endl << indent() << "  TProtocolUtil.Skip(iprot, field.Type);"
-        << endl << indent() << "}" << endl << indent() << "break;" << endl;
-    indent_down();
-  }
-
-  indent(out) << "default: " << endl;
-  indent_up();
-  indent(out) << "TProtocolUtil.Skip(iprot, field.Type);" << endl;
-  indent(out) << "break;" << endl;
-  indent_down();
-
-  scope_down(out);
-
-  indent(out) << "iprot.ReadFieldEnd();" << endl;
-
-  scope_down(out);
-
-  indent(out) << "iprot.ReadStructEnd();" << endl;
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (field_is_required((*f_iter))) {
-      indent(out) << "if (!isset_" << (*f_iter)->get_name() << ")" << endl;
-      indent_up();
-      out << indent()
-          << "throw new TProtocolException(TProtocolException.INVALID_DATA, "
-          << "\"required field " << prop_name((*f_iter)) << " not set\");"
-          << endl;
-      indent_down();
-    }
-  }
-
-  scope_down(out);
-  out << indent() << "finally" << endl;
-  scope_up(out);
-  out << indent() << "iprot.DecrementRecursionDepth();" << endl;
-  scope_down(out);
-
-  indent_down();
-
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_writer(ostream& out, t_struct* tstruct) {
-  out << indent() << "public void Write(TProtocol oprot) {" << endl;
-  indent_up();
-
-  out << indent() << "oprot.IncrementRecursionDepth();" << endl;
-  out << indent() << "try" << endl;
-  scope_up(out);
-
-  string name = tstruct->get_name();
-  const vector<t_field*>& fields = tstruct->get_sorted_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  indent(out) << "TStruct struc = new TStruct(\"" << name << "\");" << endl;
-  indent(out) << "oprot.WriteStructBegin(struc);" << endl;
-
-  if (fields.size() > 0) {
-    indent(out) << "TField field = new TField();" << endl;
-    for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-      bool is_required = field_is_required((*f_iter));
-      bool has_default = field_has_default((*f_iter));
-      bool null_allowed = type_can_be_null((*f_iter)->get_type());
-
-      if (is_required)
-      {
-        if (null_allowed) {
-          indent(out) << "if (" << prop_name((*f_iter)) << " == null)" << endl;
-          indent_up();
-          out << indent()
-              << "throw new TProtocolException(TProtocolException.INVALID_DATA, "
-              << "\"required field " << prop_name((*f_iter)) << " not set\");"
-              << endl;
-          indent_down();
-        }
-      }
-      else
-      {
-        if (nullable_ && !has_default) {
-            indent(out) << "if (" << prop_name((*f_iter)) << " != null) {" << endl;
-        }
-        else if (null_allowed) {
-          out << indent()
-              << "if (" << prop_name((*f_iter)) << " != null && __isset."
-              << normalize_name((*f_iter)->get_name()) << ") {"
-              << endl;
-        }
-        else {
-           indent(out) << "if (__isset." << normalize_name((*f_iter)->get_name()) << ") {" << endl;
-        }
-        indent_up();
-      }
-      indent(out) << "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
-      indent(out) << "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
-      indent(out) << "field.ID = " << (*f_iter)->get_key() << ";" << endl;
-      indent(out) << "oprot.WriteFieldBegin(field);" << endl;
-
-      generate_serialize_field(out, *f_iter);
-
-      indent(out) << "oprot.WriteFieldEnd();" << endl;
-      if (!is_required) {
-        indent_down();
-        indent(out) << "}" << endl;
-      }
-    }
-  }
-
-  indent(out) << "oprot.WriteFieldStop();" << endl;
-  indent(out) << "oprot.WriteStructEnd();" << endl;
-
-  scope_down(out);
-  out << indent() << "finally" << endl;
-  scope_up(out);
-  out << indent() << "oprot.DecrementRecursionDepth();" << endl;
-  scope_down(out);
-
-  indent_down();
-
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_result_writer(ostream& out, t_struct* tstruct) {
-  indent(out) << "public void Write(TProtocol oprot) {" << endl;
-  indent_up();
-
-  out << indent() << "oprot.IncrementRecursionDepth();" << endl;
-  out << indent() << "try" << endl;
-  scope_up(out);
-
-  string name = tstruct->get_name();
-  const vector<t_field*>& fields = tstruct->get_sorted_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  indent(out) << "TStruct struc = new TStruct(\"" << name << "\");" << endl;
-  indent(out) << "oprot.WriteStructBegin(struc);" << endl;
-
-  if (fields.size() > 0) {
-    indent(out) << "TField field = new TField();" << endl;
-    bool first = true;
-    for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-      if (first) {
-        first = false;
-        out << endl << indent() << "if ";
-      } else {
-        out << " else if ";
-      }
-
-      if (nullable_) {
-        out << "(this." << prop_name((*f_iter)) << " != null) {" << endl;
-      } else {
-        out << "(this.__isset." << normalize_name((*f_iter)->get_name()) << ") {" << endl;
-      }
-      indent_up();
-
-      bool null_allowed = !nullable_ && type_can_be_null((*f_iter)->get_type());
-      if (null_allowed) {
-        indent(out) << "if (" << prop_name(*f_iter) << " != null) {" << endl;
-        indent_up();
-      }
-
-      indent(out) << "field.Name = \"" << prop_name(*f_iter) << "\";" << endl;
-      indent(out) << "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
-      indent(out) << "field.ID = " << (*f_iter)->get_key() << ";" << endl;
-      indent(out) << "oprot.WriteFieldBegin(field);" << endl;
-
-      generate_serialize_field(out, *f_iter);
-
-      indent(out) << "oprot.WriteFieldEnd();" << endl;
-
-      if (null_allowed) {
-        indent_down();
-        indent(out) << "}" << endl;
-      }
-
-      indent_down();
-      indent(out) << "}";
-    }
-  }
-
-  out << endl << indent() << "oprot.WriteFieldStop();" << endl << indent()
-      << "oprot.WriteStructEnd();" << endl;
-
-  scope_down(out);
-  out << indent() << "finally" << endl;
-  scope_up(out);
-  out << indent() << "oprot.DecrementRecursionDepth();" << endl;
-  scope_down(out);
-
-  indent_down();
-
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_tostring(ostream& out, t_struct* tstruct) {
-  indent(out) << "public override string ToString() {" << endl;
-  indent_up();
-
-  indent(out) << "StringBuilder __sb = new StringBuilder(\"" << tstruct->get_name() << "(\");"
-              << endl;
-
-  const vector<t_field*>& fields = tstruct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  bool useFirstFlag = false;
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (!field_is_required((*f_iter))) {
-      indent(out) << "bool __first = true;" << endl;
-      useFirstFlag = true;
-    }
-    break;
-  }
-
-  bool had_required = false; // set to true after first required field has been processed
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    bool is_required = field_is_required((*f_iter));
-    bool has_default = field_has_default((*f_iter));
-    if (nullable_ && !has_default && !is_required) {
-      indent(out) << "if (" << prop_name((*f_iter)) << " != null) {" << endl;
-      indent_up();
-    } else if (!is_required) {
-      bool null_allowed = type_can_be_null((*f_iter)->get_type());
-      if (null_allowed) {
-        indent(out) << "if (" << prop_name((*f_iter)) << " != null && __isset."
-                    << normalize_name((*f_iter)->get_name()) << ") {" << endl;
-        indent_up();
-      } else {
-        indent(out) << "if (__isset." << normalize_name((*f_iter)->get_name()) << ") {" << endl;
-        indent_up();
-      }
-    }
-
-    if (useFirstFlag && (!had_required)) {
-      indent(out) << "if(!__first) { __sb.Append(\", \"); }" << endl;
-      if (!is_required) {
-        indent(out) << "__first = false;" << endl;
-      }
-      indent(out) << "__sb.Append(\"" << prop_name((*f_iter)) << ": \");" << endl;
-    } else {
-      indent(out) << "__sb.Append(\", " << prop_name((*f_iter)) << ": \");" << endl;
-    }
-
-    t_type* ttype = (*f_iter)->get_type();
-    if (ttype->is_xception() || ttype->is_struct()) {
-      indent(out) << "__sb.Append(" << prop_name((*f_iter))
-                  << "== null ? \"<null>\" : " << prop_name((*f_iter)) << ".ToString());" << endl;
-    } else {
-      indent(out) << "__sb.Append(" << prop_name((*f_iter)) << ");" << endl;
-    }
-
-    if (!is_required) {
-      indent_down();
-      indent(out) << "}" << endl;
-    } else {
-      had_required = true; // now __first must be false, so we don't need to check it anymore
-    }
-  }
-
-  indent(out) << "__sb.Append(\")\");" << endl;
-  indent(out) << "return __sb.ToString();" << endl;
-
-  indent_down();
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_union(t_struct* tunion) {
-  string f_union_name = namespace_dir_ + "/" + (tunion->get_name()) + ".cs";
-  ofstream_with_content_based_conditional_update f_union;
-
-  f_union.open(f_union_name.c_str());
-
-  f_union << autogen_comment() << csharp_type_usings() << csharp_thrift_usings() << endl;
-
-  generate_csharp_union_definition(f_union, tunion);
-
-  f_union.close();
-}
-
-void t_csharp_generator::generate_csharp_union_definition(std::ostream& out, t_struct* tunion) {
-  // Let's define the class first
-  start_csharp_namespace(out);
-
-  indent(out) << "public abstract partial class " << tunion->get_name() << " : TAbstractBase {"
-              << endl;
-
-  indent_up();
-
-  indent(out) << "public abstract void Write(TProtocol protocol);" << endl;
-  indent(out) << "public readonly int Isset;" << endl;
-  indent(out) << "public abstract object Data { get; }" << endl;
-
-  indent(out) << "protected " << tunion->get_name() << "(int isset) {" << endl;
-  indent_up();
-  indent(out) << "Isset = isset;" << endl;
-  indent_down();
-  indent(out) << "}" << endl << endl;
-
-  indent(out) << "public class ___undefined : " << tunion->get_name() << " {" << endl;
-  indent_up();
-
-  indent(out) << "public override object Data { get { return null; } }" << endl;
-
-  indent(out) << "public ___undefined() : base(0) {}" << endl << endl;
-
-  indent(out) << "public override void Write(TProtocol protocol) {" << endl;
-  indent_up();
-  indent(out) << "throw new TProtocolException( TProtocolException.INVALID_DATA, \"Cannot persist "
-                 "an union type which is not set.\");" << endl;
-  indent_down();
-  indent(out) << "}" << endl << endl;
-
-  indent_down();
-  indent(out) << "}" << endl << endl;
-
-  const vector<t_field*>& fields = tunion->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    generate_csharp_union_class(out, tunion, (*f_iter));
-  }
-
-  generate_csharp_union_reader(out, tunion);
-
-  indent_down();
-  indent(out) << "}" << endl << endl;
-
-  end_csharp_namespace(out);
-}
-
-void t_csharp_generator::generate_csharp_union_class(std::ostream& out,
-                                                     t_struct* tunion,
-                                                     t_field* tfield) {
-  indent(out) << "public " << type_name(tfield->get_type()) << " As_" << tfield->get_name() << endl;
-  indent(out) << "{" << endl;
-  indent_up();
-  indent(out) << "get" << endl;
-  indent(out) << "{" << endl;
-  indent_up();
-  indent(out) << "return (" << tfield->get_key() << " == Isset) ? (" << type_name(tfield->get_type()) << ")Data : default(" << type_name(tfield->get_type()) << ");" << endl;
-  indent_down();
-  indent(out) << "}" << endl;
-  indent_down();
-  indent(out) << "}" << endl
-      << endl;
-	
-	
-  indent(out) << "public class " << tfield->get_name() << " : " << tunion->get_name() << " {"
-              << endl;
-  indent_up();
-  indent(out) << "private " << type_name(tfield->get_type()) << " _data;" << endl;
-  indent(out) << "public override object Data { get { return _data; } }" << endl;
-  indent(out) << "public " << tfield->get_name() << "(" << type_name(tfield->get_type())
-              << " data) : base("<< tfield->get_key() <<") {" << endl;
-  indent_up();
-  indent(out) << "this._data = data;" << endl;
-  indent_down();
-  indent(out) << "}" << endl;
-  indent(out) << "public override void Write(TProtocol oprot) {" << endl;
-  indent_up();
-
-  out << indent() << "oprot.IncrementRecursionDepth();" << endl;
-  out << indent() << "try" << endl;
-  scope_up(out);
-
-  indent(out) << "TStruct struc = new TStruct(\"" << tunion->get_name() << "\");" << endl;
-  indent(out) << "oprot.WriteStructBegin(struc);" << endl;
-
-  indent(out) << "TField field = new TField();" << endl;
-  indent(out) << "field.Name = \"" << tfield->get_name() << "\";" << endl;
-  indent(out) << "field.Type = " << type_to_enum(tfield->get_type()) << ";" << endl;
-  indent(out) << "field.ID = " << tfield->get_key() << ";" << endl;
-  indent(out) << "oprot.WriteFieldBegin(field);" << endl;
-
-  generate_serialize_field(out, tfield, "_data", true, true);
-
-  indent(out) << "oprot.WriteFieldEnd();" << endl;
-  indent(out) << "oprot.WriteFieldStop();" << endl;
-  indent(out) << "oprot.WriteStructEnd();" << endl;
-  indent_down();
-
-  scope_down(out);
-  out << indent() << "finally" << endl;
-  scope_up(out);
-  out << indent() << "oprot.DecrementRecursionDepth();" << endl;
-  scope_down(out);
-
-  indent(out) << "}" << endl;
-
-  indent_down();
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_equals(ostream& out, t_struct* tstruct) {
-  indent(out) << "public override bool Equals(object that) {" << endl;
-  indent_up();
-
-  indent(out) << "var other = that as " << type_name(tstruct) << ";" << endl;
-  indent(out) << "if (other == null) return false;" << endl;
-  indent(out) << "if (ReferenceEquals(this, other)) return true;" << endl;
-
-  const vector<t_field*>& fields = tstruct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  bool first = true;
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (first) {
-      first = false;
-      indent(out) << "return ";
-      indent_up();
-    } else {
-      out << endl;
-      indent(out) << "&& ";
-    }
-    if (!field_is_required((*f_iter)) && !(nullable_ && !field_has_default((*f_iter)))) {
-      out << "((__isset." << normalize_name((*f_iter)->get_name()) << " == other.__isset."
-          << normalize_name((*f_iter)->get_name()) << ") && ((!__isset."
-          << normalize_name((*f_iter)->get_name()) << ") || (";
-    }
-    t_type* ttype = (*f_iter)->get_type();
-    if (ttype->is_container() || ttype->is_binary()) {
-      out << "TCollections.Equals(";
-    } else {
-      out << "System.Object.Equals(";
-    }
-    out << prop_name((*f_iter)) << ", other." << prop_name((*f_iter)) << ")";
-    if (!field_is_required((*f_iter)) && !(nullable_ && !field_has_default((*f_iter)))) {
-      out << ")))";
-    }
-  }
-  if (first) {
-    indent(out) << "return true;" << endl;
-  } else {
-    out << ";" << endl;
-    indent_down();
-  }
-
-  indent_down();
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_hashcode(ostream& out, t_struct* tstruct) {
-  indent(out) << "public override int GetHashCode() {" << endl;
-  indent_up();
-
-  indent(out) << "int hashcode = 0;" << endl;
-  indent(out) << "unchecked {" << endl;
-  indent_up();
-
-  const vector<t_field*>& fields = tstruct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    t_type* ttype = (*f_iter)->get_type();
-    indent(out) << "hashcode = (hashcode * 397) ^ ";
-    if (field_is_required((*f_iter))) {
-      out << "(";
-    } else if (nullable_) {
-      out << "(" << prop_name((*f_iter)) << " == null ? 0 : ";
-    } else {
-      out << "(!__isset." << normalize_name((*f_iter)->get_name()) << " ? 0 : ";
-    }
-    if (ttype->is_container()) {
-      out << "(TCollections.GetHashCode(" << prop_name((*f_iter)) << "))";
-    } else {
-      out << "(" << prop_name((*f_iter)) << ".GetHashCode())";
-    }
-    out << ");" << endl;
-  }
-
-  indent_down();
-  indent(out) << "}" << endl;
-  indent(out) << "return hashcode;" << endl;
-
-  indent_down();
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_service(t_service* tservice) {
-  string f_service_name = namespace_dir_ + "/" + service_name_ + ".cs";
-  f_service_.open(f_service_name.c_str());
-
-  f_service_ << autogen_comment() << csharp_type_usings() << csharp_thrift_usings() << endl;
-
-  start_csharp_namespace(f_service_);
-
-  indent(f_service_) << "public partial class " << normalize_name(service_name_) << " {" << endl;
-  indent_up();
-
-  generate_service_interface(tservice);
-  generate_service_client(tservice);
-  generate_service_server(tservice);
-  generate_service_helpers(tservice);
-
-  indent_down();
-
-  indent(f_service_) << "}" << endl;
-  end_csharp_namespace(f_service_);
-  f_service_.close();
-}
-
-void t_csharp_generator::generate_service_interface(t_service* tservice) {
-  generate_separate_service_interfaces(tservice);
-}
-
-void t_csharp_generator::generate_separate_service_interfaces(t_service* tservice) {
-  generate_sync_service_interface(tservice);
-
-  if (async_) {
-    generate_async_service_interface(tservice);
-  }
-
-  generate_combined_service_interface(tservice);
-}
-
-void t_csharp_generator::generate_sync_service_interface(t_service* tservice) {
-  string extends = "";
-  string extends_iface = "";
-  if (tservice->get_extends() != NULL) {
-    extends = type_name(tservice->get_extends());
-    extends_iface = " : " + extends + ".ISync";
-  }
-
-  generate_csharp_doc(f_service_, tservice);
-
-  if (wcf_) {
-    indent(f_service_) << "[System.ServiceModel.ServiceContract(Namespace=\"" << wcf_namespace_ << "\")]" << endl;
-  }
-  indent(f_service_) << "public interface ISync" << extends_iface << " {" << endl;
-
-  indent_up();
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter;
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    generate_csharp_doc(f_service_, *f_iter);
-
-    // if we're using WCF, add the corresponding attributes
-    if (wcf_) {
-      indent(f_service_) << "[System.ServiceModel.OperationContract]" << endl;
-
-      const std::vector<t_field*>& xceptions = (*f_iter)->get_xceptions()->get_members();
-      vector<t_field*>::const_iterator x_iter;
-      for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
-        indent(f_service_) << "[System.ServiceModel.FaultContract(typeof("
-          + type_name((*x_iter)->get_type(), false, false) + "Fault))]" << endl;
-      }
-    }
-
-    indent(f_service_) << function_signature(*f_iter) << ";" << endl;
-  }
-  indent_down();
-  f_service_ << indent() << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_async_service_interface(t_service* tservice) {
-  string extends = "";
-  string extends_iface = "";
-  if (tservice->get_extends() != NULL) {
-    extends = type_name(tservice->get_extends());
-    extends_iface = " : " + extends + ".IAsync";
-  }
-
-  generate_csharp_doc(f_service_, tservice);
-
-  if (wcf_) {
-    indent(f_service_) << "[System.ServiceModel.ServiceContract(Namespace=\"" << wcf_namespace_ << "\")]" << endl;
-  }
-  indent(f_service_) << "public interface IAsync" << extends_iface << " {" << endl;
-
-  indent_up();
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter;
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    generate_csharp_doc(f_service_, *f_iter);
-
-    // if we're using WCF, add the corresponding attributes
-    if (wcf_) {
-      indent(f_service_) << "[System.ServiceModel.OperationContract]" << endl;
-
-      const std::vector<t_field*>& xceptions = (*f_iter)->get_xceptions()->get_members();
-      vector<t_field*>::const_iterator x_iter;
-      for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
-        indent(f_service_) << "[System.ServiceModel.FaultContract(typeof("
-          + type_name((*x_iter)->get_type(), false, false) + "Fault))]" << endl;
-      }
-    }
-
-    indent(f_service_) << function_signature_async(*f_iter) << ";" << endl;
-  }
-  indent_down();
-  f_service_ << indent() << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_combined_service_interface(t_service* tservice) {
-  string extends_iface = " : ISync";
-
-  if (async_) {
-    extends_iface += ", IAsync";
-  }
-
-  generate_csharp_doc(f_service_, tservice);
-
-  if (wcf_) {
-    indent(f_service_) << "[System.ServiceModel.ServiceContract(Namespace=\"" << wcf_namespace_ << "\")]" << endl;
-  }
-
-  indent(f_service_) << "public interface Iface" << extends_iface << " {" << endl;
-
-  indent_up();
-
-  // We need to generate extra old style async methods for silverlight. Since
-  // this isn't something you'd want to implement server-side, just put them into
-  // the main Iface interface.
-  generate_silverlight_async_methods(tservice);
-
-  indent_down();
-
-  f_service_ << indent() << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_silverlight_async_methods(t_service* tservice) {
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter;
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    generate_csharp_doc(f_service_, *f_iter);
-
-    // For backwards compatibility, include the Begin_, End_ methods if we're generating
-    // with the async flag. I'm not sure this is necessary, so someone with more knowledge
-    // can maybe remove these checks if they know it's safe.
-    if (!async_) {
-      indent(f_service_) << "#if SILVERLIGHT" << endl;
-    }
-
-    indent(f_service_) << function_signature_async_begin(*f_iter, "Begin_") << ";" << endl;
-    indent(f_service_) << function_signature_async_end(*f_iter, "End_") << ";" << endl;
-
-    if (!async_) {
-      indent(f_service_) << "#endif" << endl;
-    }
-  }
-}
-
-void t_csharp_generator::generate_service_helpers(t_service* tservice) {
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter;
-
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    t_struct* ts = (*f_iter)->get_arglist();
-    generate_csharp_struct_definition(f_service_, ts, false, true);
-    generate_function_helpers(*f_iter);
-  }
-}
-
-void t_csharp_generator::generate_service_client(t_service* tservice) {
-  string extends = "";
-  string extends_client = "";
-  if (tservice->get_extends() != NULL) {
-    extends = type_name(tservice->get_extends());
-    extends_client = extends + ".Client, ";
-  } else {
-    extends_client = "IDisposable, ";
-  }
-
-  generate_csharp_doc(f_service_, tservice);
-
-  indent(f_service_) << "public class Client : " << extends_client << "Iface {" << endl;
-  indent_up();
-  indent(f_service_) << "public Client(TProtocol prot) : this(prot, prot)" << endl;
-  scope_up(f_service_);
-  scope_down(f_service_);
-  f_service_ << endl;
-
-  indent(f_service_) << "public Client(TProtocol iprot, TProtocol oprot)";
-  if (!extends.empty()) {
-    f_service_ << " : base(iprot, oprot)";
-  }
-  f_service_ << endl;
-
-  scope_up(f_service_);
-  if (extends.empty()) {
-    f_service_ << indent() << "iprot_ = iprot;" << endl << indent() << "oprot_ = oprot;" << endl;
-  }
-  scope_down(f_service_);
-
-  f_service_ << endl;
-
-  if (extends.empty()) {
-    f_service_ << indent() << "protected TProtocol iprot_;" << endl << indent()
-               << "protected TProtocol oprot_;" << endl << indent() << "protected int seqid_;"
-               << endl << endl;
-
-    f_service_ << indent() << "public TProtocol InputProtocol" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "get { return iprot_; }" << endl;
-    scope_down(f_service_);
-
-    f_service_ << indent() << "public TProtocol OutputProtocol" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "get { return oprot_; }" << endl;
-    scope_down(f_service_);
-    f_service_ << endl << endl;
-
-    indent(f_service_) << "#region \" IDisposable Support \"" << endl;
-    indent(f_service_) << "private bool _IsDisposed;" << endl << endl;
-    indent(f_service_) << "// IDisposable" << endl;
-    indent(f_service_) << "public void Dispose()" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "Dispose(true);" << endl;
-    scope_down(f_service_);
-    indent(f_service_) << endl << endl;
-    indent(f_service_) << "protected virtual void Dispose(bool disposing)" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "if (!_IsDisposed)" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "if (disposing)" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "if (iprot_ != null)" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "((IDisposable)iprot_).Dispose();" << endl;
-    scope_down(f_service_);
-    indent(f_service_) << "if (oprot_ != null)" << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "((IDisposable)oprot_).Dispose();" << endl;
-    scope_down(f_service_);
-    scope_down(f_service_);
-    scope_down(f_service_);
-    indent(f_service_) << "_IsDisposed = true;" << endl;
-    scope_down(f_service_);
-    indent(f_service_) << "#endregion" << endl;
-    f_service_ << endl << endl;
-  }
-
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::const_iterator f_iter;
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    string funname = (*f_iter)->get_name();
-
-    indent(f_service_) << endl;
-
-    if (!async_) {
-      indent(f_service_) << "#if SILVERLIGHT" << endl;
-      indent(f_service_) << endl;
-    }
-    // Begin_
-    indent(f_service_) << "public " << function_signature_async_begin(*f_iter, "Begin_") << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "return "
-                       << "send_" << funname << "(callback, state";
-
-    t_struct* arg_struct = (*f_iter)->get_arglist();
-    prepare_member_name_mapping(arg_struct);
-
-    const vector<t_field*>& fields = arg_struct->get_members();
-    vector<t_field*>::const_iterator fld_iter;
-    for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-      f_service_ << ", ";
-      f_service_ << normalize_name((*fld_iter)->get_name());
-    }
-    f_service_ << ");" << endl;
-    scope_down(f_service_);
-    f_service_ << endl;
-
-    // End
-    indent(f_service_) << "public " << function_signature_async_end(*f_iter, "End_") << endl;
-    scope_up(f_service_);
-    indent(f_service_) << "oprot_.Transport.EndFlush(asyncResult);" << endl;
-    if (!(*f_iter)->is_oneway()) {
-      f_service_ << indent();
-      if (!(*f_iter)->get_returntype()->is_void()) {
-        f_service_ << "return ";
-      }
-      f_service_ << "recv_" << funname << "();" << endl;
-    }
-    scope_down(f_service_);
-    f_service_ << endl;
-
-    // async
-    bool first;
-    if (async_) {
-      indent(f_service_) << "public async " << function_signature_async(*f_iter, "") << endl;
-      scope_up(f_service_);
-
-      if (!(*f_iter)->get_returntype()->is_void()) {
-        indent(f_service_) << type_name((*f_iter)->get_returntype()) << " retval;" << endl;
-        indent(f_service_) << "retval = ";
-      } else {
-        indent(f_service_);
-      }
-      f_service_ << "await Task.Run(() =>" << endl;
-      scope_up(f_service_);
-      indent(f_service_);
-      if (!(*f_iter)->get_returntype()->is_void()) {
-        f_service_ << "return ";
-      }
-      f_service_ << funname << "(";
-      first = true;
-      for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-        if (first) {
-          first = false;
-        } else {
-          f_service_ << ", ";
-        }
-        f_service_ << (*fld_iter)->get_name();
-      }
-      f_service_ << ");" << endl;
-      indent_down();
-      indent(f_service_) << "});" << endl;
-      if (!(*f_iter)->get_returntype()->is_void()) {
-        indent(f_service_) << "return retval;" << endl;
-      }
-      scope_down(f_service_);
-      f_service_ << endl;
-    }
-
-    if (!async_) {
-      indent(f_service_) << "#endif" << endl << endl;
-    }
-
-    generate_csharp_doc(f_service_, *f_iter);
-    indent(f_service_) << "public " << function_signature(*f_iter) << endl;
-    scope_up(f_service_);
-
-    // silverlight invoke
-    if (!async_) {
-      indent(f_service_) << "#if SILVERLIGHT" << endl;
-
-      indent(f_service_) << "var asyncResult = Begin_" << funname << "(null, null";
-      for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-        f_service_ << ", " << normalize_name((*fld_iter)->get_name());
-      }
-      f_service_ << ");" << endl;
-      
-      if (!(*f_iter)->is_oneway()) {
-        f_service_ << indent();
-        if (!(*f_iter)->get_returntype()->is_void()) {
-          f_service_ << "return ";
-        }
-        f_service_ << "End_" << funname << "(asyncResult);" << endl;
-      }
-      f_service_ << endl;
-
-      indent(f_service_) << "#else" << endl;
-    }
-
-    // synchronous invoke
-    indent(f_service_) << "send_" << funname << "(";
-  
-    first = true;
-    for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-      if (first) {
-        first = false;
-      } else {
-        f_service_ << ", ";
-      }
-      f_service_ << normalize_name((*fld_iter)->get_name());
-    }
-    f_service_ << ");" << endl;
-  
-    if (!(*f_iter)->is_oneway()) {
-      f_service_ << indent();
-      if (!(*f_iter)->get_returntype()->is_void()) {
-        f_service_ << "return ";
-      }
-      f_service_ << "recv_" << funname << "();" << endl;
-    }
-    f_service_ << endl;
-
-    if (!async_) {
-      indent(f_service_) << "#endif" << endl;
-    }
-    scope_down(f_service_);
-
-    // Send
-    t_function send_function(g_type_void,
-                             string("send_") + (*f_iter)->get_name(),
-                             (*f_iter)->get_arglist());
-
-    string argsname = (*f_iter)->get_name() + "_args";
-
-    if (!async_) {
-      indent(f_service_) << "#if SILVERLIGHT" << endl;
-    }
-
-    indent(f_service_) << "public " << function_signature_async_begin(&send_function) << endl;
-    scope_up(f_service_);
-
-    f_service_ << indent() << "oprot_.WriteMessageBegin(new TMessage(\"" << funname << "\", "
-               << ((*f_iter)->is_oneway() ? "TMessageType.Oneway" : "TMessageType.Call")
-               << ", seqid_));" << endl << indent() << argsname << " args = new " << argsname
-               << "();" << endl;
-
-    for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-      f_service_ << indent() << "args." << prop_name(*fld_iter) << " = "
-                 << normalize_name((*fld_iter)->get_name()) << ";" << endl;
-    }
-
-    f_service_ << indent() << "args.Write(oprot_);" << endl << indent()
-               << "oprot_.WriteMessageEnd();" << endl;
-    indent(f_service_) << "return oprot_.Transport.BeginFlush(callback, state);" << endl;
-      
-    scope_down(f_service_);
-    f_service_ << endl;
-
-    if (!async_) {
-      indent(f_service_) << "#else" << endl;
-      f_service_ << endl;
-    }
-
-    indent(f_service_) << "public " << function_signature(&send_function) << endl;
-    scope_up(f_service_);
-
-    f_service_ << indent() << "oprot_.WriteMessageBegin(new TMessage(\"" << funname << "\", "
-               << ((*f_iter)->is_oneway() ? "TMessageType.Oneway" : "TMessageType.Call")
-               << ", seqid_));" << endl << indent() << argsname << " args = new " << argsname
-               << "();" << endl;
-
-    for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-      f_service_ << indent() << "args." << prop_name(*fld_iter) << " = "
-                 << normalize_name((*fld_iter)->get_name()) << ";" << endl;
-    }
-
-    f_service_ << indent() << "args.Write(oprot_);" << endl << indent()
-               << "oprot_.WriteMessageEnd();" << endl;
-
-    indent(f_service_) << "oprot_.Transport.Flush();" << endl;
-    cleanup_member_name_mapping(arg_struct);
-    scope_down(f_service_);
-
-    if (!async_) {
-      indent(f_service_) << "#endif" << endl;
-    }
-
-    f_service_ << endl;
-
-    if (!(*f_iter)->is_oneway()) {
-      string resultname = (*f_iter)->get_name() + "_result";
-
-      t_struct noargs(program_);
-      t_function recv_function((*f_iter)->get_returntype(),
-                               string("recv_") + (*f_iter)->get_name(),
-                               &noargs,
-                               (*f_iter)->get_xceptions());
-      indent(f_service_) << "public " << function_signature(&recv_function) << endl;
-      scope_up(f_service_);
-
-      t_struct* xs = (*f_iter)->get_xceptions();
-      prepare_member_name_mapping(xs, xs->get_members(), resultname);
-
-      f_service_ << indent() << "TMessage msg = iprot_.ReadMessageBegin();" << endl << indent()
-                 << "if (msg.Type == TMessageType.Exception) {" << endl;
-      indent_up();
-      f_service_ << indent() << "TApplicationException x = TApplicationException.Read(iprot_);"
-                 << endl << indent() << "iprot_.ReadMessageEnd();" << endl << indent() << "throw x;"
-                 << endl;
-      indent_down();
-      f_service_ << indent() << "}" << endl << indent() << resultname << " result = new "
-                 << resultname << "();" << endl << indent() << "result.Read(iprot_);" << endl
-                 << indent() << "iprot_.ReadMessageEnd();" << endl;
-
-      if (!(*f_iter)->get_returntype()->is_void()) {
-        if (nullable_) {
-          if (type_can_be_null((*f_iter)->get_returntype())) {
-            f_service_ << indent() << "if (result.Success != null) {" << endl << indent()
-                       << "  return result.Success;" << endl << indent() << "}" << endl;
-          } else {
-            f_service_ << indent() << "if (result.Success.HasValue) {" << endl << indent()
-                       << "  return result.Success.Value;" << endl << indent() << "}" << endl;
-          }
-        } else {
-          f_service_ << indent() << "if (result.__isset.success) {" << endl << indent()
-                     << "  return result.Success;" << endl << indent() << "}" << endl;
-        }
-      }
-
-      const std::vector<t_field*>& xceptions = xs->get_members();
-      vector<t_field*>::const_iterator x_iter;
-      for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
-        if (nullable_) {
-          f_service_ << indent() << "if (result." << prop_name(*x_iter) << " != null) {" << endl
-                     << indent() << "  throw result." << prop_name(*x_iter) << ";" << endl
-                     << indent() << "}" << endl;
-        } else {
-          f_service_ << indent() << "if (result.__isset." << normalize_name((*x_iter)->get_name())
-                     << ") {" << endl << indent() << "  throw result." << prop_name(*x_iter) << ";"
-                     << endl << indent() << "}" << endl;
-        }
-      }
-
-      if ((*f_iter)->get_returntype()->is_void()) {
-        indent(f_service_) << "return;" << endl;
-      } else {
-        f_service_ << indent()
-                   << "throw new "
-                      "TApplicationException(TApplicationException.ExceptionType.MissingResult, \""
-                   << (*f_iter)->get_name() << " failed: unknown result\");" << endl;
-      }
-
-      cleanup_member_name_mapping((*f_iter)->get_xceptions());
-      scope_down(f_service_);
-      f_service_ << endl;
-    }
-  }
-
-  indent_down();
-  indent(f_service_) << "}" << endl;
-}
-
-void t_csharp_generator::generate_service_server(t_service* tservice) {
-  if (async_) {
-    generate_service_server_async(tservice);
-    generate_service_server_sync(tservice);
-  }
-  else {
-    generate_service_server_sync(tservice);
-  }
-}
-
-void t_csharp_generator::generate_service_server_sync(t_service* tservice) {
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter;
-
-  string extends = "";
-  string extends_processor = "";
-  if (tservice->get_extends() != NULL) {
-    extends = type_name(tservice->get_extends());
-    extends_processor = extends + ".Processor, ";
-  }
-
-  indent(f_service_) << "public class Processor : " << extends_processor << "TProcessor {" << endl;
-  indent_up();
-
-  indent(f_service_) << "public Processor(ISync iface)";
-
-  if (!extends.empty()) {
-    f_service_ << " : base(iface)";
-  }
-  f_service_ << endl;
-  scope_up(f_service_);
-  f_service_ << indent() << "iface_ = iface;" << endl;
-
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    f_service_ << indent() << "processMap_[\"" << (*f_iter)->get_name()
-      << "\"] = " << (*f_iter)->get_name() << "_Process;" << endl;
-  }
-
-  scope_down(f_service_);
-  f_service_ << endl;
-
-  if (extends.empty()) {
-    f_service_
-      << indent()
-      << "protected delegate void ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot);"
-      << endl;
-  }
-
-  f_service_ << indent() << "private ISync iface_;" << endl;
-
-  if (extends.empty()) {
-    f_service_ << indent() << "protected Dictionary<string, ProcessFunction> processMap_ = new "
-      "Dictionary<string, ProcessFunction>();" << endl;
-  }
-
-  f_service_ << endl;
-
-  if (extends.empty()) {
-    indent(f_service_) << "public bool Process(TProtocol iprot, TProtocol oprot)" << endl;
-  }
-  else {
-    indent(f_service_) << "public new bool Process(TProtocol iprot, TProtocol oprot)" << endl;
-  }
-  scope_up(f_service_);
-
-  f_service_ << indent() << "try" << endl;
-  scope_up(f_service_);
-
-  f_service_ << indent() << "TMessage msg = iprot.ReadMessageBegin();" << endl;
-
-  f_service_
-    << indent() << "ProcessFunction fn;" << endl << indent()
-    << "processMap_.TryGetValue(msg.Name, out fn);" << endl << indent() << "if (fn == null) {"
-    << endl << indent() << "  TProtocolUtil.Skip(iprot, TType.Struct);" << endl << indent()
-    << "  iprot.ReadMessageEnd();" << endl << indent()
-    << "  TApplicationException x = new TApplicationException "
-    "(TApplicationException.ExceptionType.UnknownMethod, \"Invalid method name: '\" + "
-    "msg.Name + \"'\");" << endl << indent()
-    << "  oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));"
-    << endl << indent() << "  x.Write(oprot);" << endl << indent() << "  oprot.WriteMessageEnd();"
-    << endl << indent() << "  oprot.Transport.Flush();" << endl << indent() << "  return true;"
-    << endl << indent() << "}" << endl << indent() << "fn(msg.SeqID, iprot, oprot);" << endl;
-
-  scope_down(f_service_);
-
-  f_service_ << indent() << "catch (IOException)" << endl;
-  scope_up(f_service_);
-  f_service_ << indent() << "return false;" << endl;
-  scope_down(f_service_);
-
-  f_service_ << indent() << "return true;" << endl;
-
-  scope_down(f_service_);
-  f_service_ << endl;
-
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    generate_process_function(tservice, *f_iter);
-  }
-
-  indent_down();
-  indent(f_service_) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_service_server_async(t_service* tservice) {
-  vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter;
-
-  string extends = "";
-  string extends_processor = "";
-  if (tservice->get_extends() != NULL) {
-    extends = type_name(tservice->get_extends());
-    extends_processor = extends + ".AsyncProcessor, ";
-  }
-
-  indent(f_service_) << "public class AsyncProcessor : " << extends_processor << "TAsyncProcessor {" << endl;
-  indent_up();
-
-  indent(f_service_) << "public AsyncProcessor(IAsync iface)";
-  if (!extends.empty()) {
-    f_service_ << " : base(iface)";
-  }
-  f_service_ << endl;
-  scope_up(f_service_);
-  f_service_ << indent() << "iface_ = iface;" << endl;
-
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    f_service_ << indent() << "processMap_[\"" << (*f_iter)->get_name()
-      << "\"] = " << (*f_iter)->get_name() << "_ProcessAsync;" << endl;
-  }
-
-  scope_down(f_service_);
-  f_service_ << endl;
-
-  if (extends.empty()) {
-    f_service_
-      << indent()
-      << "protected delegate Task ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot);"
-      << endl;
-  }
-
-  f_service_ << indent() << "private IAsync iface_;" << endl;
-
-  if (extends.empty()) {
-    f_service_ << indent() << "protected Dictionary<string, ProcessFunction> processMap_ = new "
-      "Dictionary<string, ProcessFunction>();" << endl;
-  }
-
-  f_service_ << endl;
-
-  if (extends.empty()) {
-    indent(f_service_) << "public async Task<bool> ProcessAsync(TProtocol iprot, TProtocol oprot)" << endl;
-  }
-  else {
-    indent(f_service_) << "public new async Task<bool> ProcessAsync(TProtocol iprot, TProtocol oprot)" << endl;
-  }
-  scope_up(f_service_);
-
-  f_service_ << indent() << "try" << endl;
-  scope_up(f_service_);
-
-  f_service_ << indent() << "TMessage msg = iprot.ReadMessageBegin();" << endl;
-
-  f_service_
-    << indent() << "ProcessFunction fn;" << endl << indent()
-    << "processMap_.TryGetValue(msg.Name, out fn);" << endl << indent() << "if (fn == null) {"
-    << endl << indent() << "  TProtocolUtil.Skip(iprot, TType.Struct);" << endl << indent()
-    << "  iprot.ReadMessageEnd();" << endl << indent()
-    << "  TApplicationException x = new TApplicationException "
-    "(TApplicationException.ExceptionType.UnknownMethod, \"Invalid method name: '\" + "
-    "msg.Name + \"'\");" << endl << indent()
-    << "  oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));"
-    << endl << indent() << "  x.Write(oprot);" << endl << indent() << "  oprot.WriteMessageEnd();"
-    << endl << indent() << "  oprot.Transport.Flush();" << endl << indent() << "  return true;"
-    << endl << indent() << "}" << endl << indent() << "await fn(msg.SeqID, iprot, oprot);" << endl;
-
-  scope_down(f_service_);
-
-  f_service_ << indent() << "catch (IOException)" << endl;
-  scope_up(f_service_);
-  f_service_ << indent() << "return false;" << endl;
-  scope_down(f_service_);
-
-  f_service_ << indent() << "return true;" << endl;
-
-  scope_down(f_service_);
-  f_service_ << endl;
-
-  for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    generate_process_function_async(tservice, *f_iter);
-  }
-
-  indent_down();
-  indent(f_service_) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_function_helpers(t_function* tfunction) {
-  if (tfunction->is_oneway()) {
-    return;
-  }
-
-  t_struct result(program_, tfunction->get_name() + "_result");
-  t_field success(tfunction->get_returntype(), "success", 0);
-  if (!tfunction->get_returntype()->is_void()) {
-    result.append(&success);
-  }
-
-  t_struct* xs = tfunction->get_xceptions();
-  const vector<t_field*>& fields = xs->get_members();
-  vector<t_field*>::const_iterator f_iter;
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    result.append(*f_iter);
-  }
-
-  generate_csharp_struct_definition(f_service_, &result, false, true, true);
-}
-
-void t_csharp_generator::generate_process_function(t_service* tservice, t_function* tfunction) {
-  (void)tservice;
-  indent(f_service_) << "public void " << tfunction->get_name()
-                     << "_Process(int seqid, TProtocol iprot, TProtocol oprot)" << endl;
-  scope_up(f_service_);
-
-  string argsname = tfunction->get_name() + "_args";
-  string resultname = tfunction->get_name() + "_result";
-
-  f_service_ << indent() << argsname << " args = new " << argsname << "();" << endl
-             << indent() << "args.Read(iprot);" << endl
-             << indent() << "iprot.ReadMessageEnd();" << endl;
-
-  t_struct* xs = tfunction->get_xceptions();
-  const std::vector<t_field*>& xceptions = xs->get_members();
-  vector<t_field*>::const_iterator x_iter;
-
-  if (!tfunction->is_oneway()) {
-    f_service_ << indent() << resultname << " result = new " << resultname << "();" << endl;
-  }
-
-  f_service_ << indent() << "try" << endl
-             << indent() << "{" << endl;
-  indent_up();
-
-  if (xceptions.size() > 0) {
-    f_service_ << indent() << "try" << endl
-               << indent() << "{" << endl;
-    indent_up();
-  }
-
-  t_struct* arg_struct = tfunction->get_arglist();
-  const std::vector<t_field*>& fields = arg_struct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  f_service_ << indent();
-  if (!tfunction->is_oneway() && !tfunction->get_returntype()->is_void()) {
-    f_service_ << "result.Success = ";
-  }
-  f_service_ << "iface_." << normalize_name(tfunction->get_name()) << "(";
-  bool first = true;
-  prepare_member_name_mapping(arg_struct);
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (first) {
-      first = false;
-    } else {
-      f_service_ << ", ";
-    }
-    f_service_ << "args." << prop_name(*f_iter);
-    if (nullable_ && !type_can_be_null((*f_iter)->get_type())) {
-      f_service_ << ".Value";
-    }
-  }
-  cleanup_member_name_mapping(arg_struct);
-  f_service_ << ");" << endl;
-
-  prepare_member_name_mapping(xs, xs->get_members(), resultname);
-  if (xceptions.size() > 0) {
-    indent_down();
-    f_service_ << indent() << "}" << endl;
-    for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
-      f_service_ << indent() << "catch (" << type_name((*x_iter)->get_type(), false, false) << " "
-                 << (*x_iter)->get_name() << ")" << endl
-                 << indent() << "{" << endl;
-      if (!tfunction->is_oneway()) {
-        indent_up();
-        f_service_ << indent() << "result." << prop_name(*x_iter) << " = " << (*x_iter)->get_name()
-                   << ";" << endl;
-        indent_down();
-      }
-      f_service_ << indent() << "}" << endl;
-    }
-  }
-  if (!tfunction->is_oneway()) {
-    f_service_ << indent() << "oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
-               << "\", TMessageType.Reply, seqid)); " << endl;
-    f_service_ << indent() << "result.Write(oprot);" << endl;
-  }
-  indent_down();
-
-  cleanup_member_name_mapping(xs);
-
-  f_service_ << indent() << "}" << endl
-             << indent() << "catch (TTransportException)" << endl
-             << indent() << "{" << endl
-             << indent() << "  throw;" << endl
-             << indent() << "}" << endl
-             << indent() << "catch (Exception ex)" << endl
-             << indent() << "{" << endl
-             << indent() << "  Console.Error.WriteLine(\"Error occurred in processor:\");" << endl
-             << indent() << "  Console.Error.WriteLine(ex.ToString());" << endl;
-
-  if (tfunction->is_oneway()) {
-    f_service_ << indent() << "}" << endl;
-  } else {
-    f_service_ << indent() << "  TApplicationException x = new TApplicationException" << indent()
-               << "(TApplicationException.ExceptionType.InternalError,\" Internal error.\");"
-               << endl
-               << indent() << "  oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
-               << "\", TMessageType.Exception, seqid));" << endl
-               << indent() << "  x.Write(oprot);" << endl
-               << indent() << "}" << endl;
-    f_service_ << indent() << "oprot.WriteMessageEnd();" << endl
-               << indent() << "oprot.Transport.Flush();" << endl;
-  }
-
-  scope_down(f_service_);
-
-  f_service_ << endl;
-}
-
-void t_csharp_generator::generate_process_function_async(t_service* tservice, t_function* tfunction) {
-  (void)tservice;
-  indent(f_service_) << "public async Task " << tfunction->get_name()
-    << "_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot)" << endl;
-  scope_up(f_service_);
-
-  string argsname = tfunction->get_name() + "_args";
-  string resultname = tfunction->get_name() + "_result";
-
-  f_service_ << indent() << argsname << " args = new " << argsname << "();" << endl
-    << indent() << "args.Read(iprot);" << endl
-    << indent() << "iprot.ReadMessageEnd();" << endl;
-
-  t_struct* xs = tfunction->get_xceptions();
-  const std::vector<t_field*>& xceptions = xs->get_members();
-  vector<t_field*>::const_iterator x_iter;
-
-  if (!tfunction->is_oneway()) {
-    f_service_ << indent() << resultname << " result = new " << resultname << "();" << endl;
-  }
-
-  f_service_ << indent() << "try" << endl
-    << indent() << "{" << endl;
-  indent_up();
-
-  if (xceptions.size() > 0) {
-    f_service_ << indent() << "try" << endl
-      << indent() << "{" << endl;
-    indent_up();
-  }
-
-  t_struct* arg_struct = tfunction->get_arglist();
-  const std::vector<t_field*>& fields = arg_struct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  f_service_ << indent();
-  if (!tfunction->is_oneway() && !tfunction->get_returntype()->is_void()) {
-    f_service_ << "result.Success = ";
-  }
-  f_service_ << "await iface_." << normalize_name(tfunction->get_name()) << "Async(";
-  bool first = true;
-  prepare_member_name_mapping(arg_struct);
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (first) {
-      first = false;
-    }
-    else {
-      f_service_ << ", ";
-    }
-    f_service_ << "args." << prop_name(*f_iter);
-    if (nullable_ && !type_can_be_null((*f_iter)->get_type())) {
-      f_service_ << ".Value";
-    }
-  }
-  cleanup_member_name_mapping(arg_struct);
-  f_service_ << ");" << endl;
-
-  prepare_member_name_mapping(xs, xs->get_members(), resultname);
-  if (xceptions.size() > 0) {
-    indent_down();
-    f_service_ << indent() << "}" << endl;
-    for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
-      f_service_ << indent() << "catch (" << type_name((*x_iter)->get_type(), false, false) << " "
-        << (*x_iter)->get_name() << ")" << endl
-        << indent() << "{" << endl;
-      if (!tfunction->is_oneway()) {
-        indent_up();
-        f_service_ << indent() << "result." << prop_name(*x_iter) << " = " << (*x_iter)->get_name()
-          << ";" << endl;
-        indent_down();
-      }
-      f_service_ << indent() << "}" << endl;
-    }
-  }
-  if (!tfunction->is_oneway()) {
-    f_service_ << indent() << "oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
-      << "\", TMessageType.Reply, seqid)); " << endl;
-    f_service_ << indent() << "result.Write(oprot);" << endl;
-  }
-  indent_down();
-
-  cleanup_member_name_mapping(xs);
-
-  f_service_ << indent() << "}" << endl
-    << indent() << "catch (TTransportException)" << endl
-    << indent() << "{" << endl
-    << indent() << "  throw;" << endl
-    << indent() << "}" << endl
-    << indent() << "catch (Exception ex)" << endl
-    << indent() << "{" << endl
-    << indent() << "  Console.Error.WriteLine(\"Error occurred in processor:\");" << endl
-    << indent() << "  Console.Error.WriteLine(ex.ToString());" << endl;
-
-  if (tfunction->is_oneway()) {
-    f_service_ << indent() << "}" << endl;
-  }
-  else {
-    f_service_ << indent() << "  TApplicationException x = new TApplicationException" << indent()
-      << "(TApplicationException.ExceptionType.InternalError,\" Internal error.\");"
-      << endl
-      << indent() << "  oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
-      << "\", TMessageType.Exception, seqid));" << endl
-      << indent() << "  x.Write(oprot);" << endl
-      << indent() << "}" << endl;
-    f_service_ << indent() << "oprot.WriteMessageEnd();" << endl
-      << indent() << "oprot.Transport.Flush();" << endl;
-  }
-
-  scope_down(f_service_);
-
-  f_service_ << endl;
-}
-
-void t_csharp_generator::generate_csharp_union_reader(std::ostream& out, t_struct* tunion) {
-  // Thanks to THRIFT-1768, we don't need to check for required fields in the union
-  const vector<t_field*>& fields = tunion->get_members();
-  vector<t_field*>::const_iterator f_iter;
-
-  indent(out) << "public static " << tunion->get_name() << " Read(TProtocol iprot)" << endl;
-  scope_up(out);
-
-  out << indent() << "iprot.IncrementRecursionDepth();" << endl;
-  out << indent() << "try" << endl;
-  scope_up(out);
-
-  indent(out) << tunion->get_name() << " retval;" << endl;
-  indent(out) << "iprot.ReadStructBegin();" << endl;
-  indent(out) << "TField field = iprot.ReadFieldBegin();" << endl;
-  // we cannot have the first field be a stop -- we must have a single field defined
-  indent(out) << "if (field.Type == TType.Stop)" << endl;
-  scope_up(out);
-  indent(out) << "iprot.ReadFieldEnd();" << endl;
-  indent(out) << "retval = new ___undefined();" << endl;
-  scope_down(out);
-  indent(out) << "else" << endl;
-  scope_up(out);
-  indent(out) << "switch (field.ID)" << endl;
-  scope_up(out);
-
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    indent(out) << "case " << (*f_iter)->get_key() << ":" << endl;
-    indent_up();
-    indent(out) << "if (field.Type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl;
-    indent_up();
-
-    indent(out) << type_name((*f_iter)->get_type()) << " temp;" << endl;
-    generate_deserialize_field(out, (*f_iter), "temp", true);
-    indent(out) << "retval = new " << (*f_iter)->get_name() << "(temp);" << endl;
-
-    indent_down();
-    out << indent() << "} else { " << endl << indent() << "  TProtocolUtil.Skip(iprot, field.Type);"
-        << endl << indent() << "  retval = new ___undefined();" << endl << indent() << "}" << endl
-        << indent() << "break;" << endl;
-    indent_down();
-  }
-
-  indent(out) << "default: " << endl;
-  indent_up();
-  indent(out) << "TProtocolUtil.Skip(iprot, field.Type);" << endl << indent()
-              << "retval = new ___undefined();" << endl;
-  indent(out) << "break;" << endl;
-  indent_down();
-
-  scope_down(out);
-
-  indent(out) << "iprot.ReadFieldEnd();" << endl;
-
-  indent(out) << "if (iprot.ReadFieldBegin().Type != TType.Stop)" << endl;
-  scope_up(out);
-  indent(out) << "throw new TProtocolException(TProtocolException.INVALID_DATA);" << endl;
-  scope_down(out);
-
-  // end of else for TStop
-  scope_down(out);
-  indent(out) << "iprot.ReadStructEnd();" << endl;
-  indent(out) << "return retval;" << endl;
-  indent_down();
-
-  scope_down(out);
-  out << indent() << "finally" << endl;
-  scope_up(out);
-  out << indent() << "iprot.DecrementRecursionDepth();" << endl;
-  scope_down(out);
-
-  indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_deserialize_field(ostream& out,
-                                                    t_field* tfield,
-                                                    string prefix,
-                                                    bool is_propertyless) {
-  t_type* type = tfield->get_type();
-  while (type->is_typedef()) {
-    type = ((t_typedef*)type)->get_type();
-  }
-
-  if (type->is_void()) {
-    throw "CANNOT GENERATE DESERIALIZE CODE FOR void TYPE: " + prefix + tfield->get_name();
-  }
-
-  string name = prefix + (is_propertyless ? "" : prop_name(tfield));
-
-  if (type->is_struct() || type->is_xception()) {
-    generate_deserialize_struct(out, (t_struct*)type, name);
-  } else if (type->is_container()) {
-    generate_deserialize_container(out, type, name);
-  } else if (type->is_base_type() || type->is_enum()) {
-    indent(out) << name << " = ";
-
-    if (type->is_enum()) {
-      out << "(" << type_name(type, false, true) << ")";
-    }
-
-    out << "iprot.";
-
-    if (type->is_base_type()) {
-      t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
-      switch (tbase) {
-      case t_base_type::TYPE_VOID:
-        throw "compiler error: cannot serialize void field in a struct: " + name;
-        break;
-      case t_base_type::TYPE_STRING:
-        if (type->is_binary()) {
-          out << "ReadBinary();";
-        } else {
-          out << "ReadString();";
-        }
-        break;
-      case t_base_type::TYPE_BOOL:
-        out << "ReadBool();";
-        break;
-      case t_base_type::TYPE_I8:
-        out << "ReadByte();";
-        break;
-      case t_base_type::TYPE_I16:
-        out << "ReadI16();";
-        break;
-      case t_base_type::TYPE_I32:
-        out << "ReadI32();";
-        break;
-      case t_base_type::TYPE_I64:
-        out << "ReadI64();";
-        break;
-      case t_base_type::TYPE_DOUBLE:
-        out << "ReadDouble();";
-        break;
-      default:
-        throw "compiler error: no C# name for base type " + t_base_type::t_base_name(tbase);
-      }
-    } else if (type->is_enum()) {
-      out << "ReadI32();";
-    }
-    out << endl;
-  } else {
-    printf("DO NOT KNOW HOW TO DESERIALIZE FIELD '%s' TYPE '%s'\n",
-           tfield->get_name().c_str(),
-           type_name(type).c_str());
-  }
-}
-
-void t_csharp_generator::generate_deserialize_struct(ostream& out,
-                                                     t_struct* tstruct,
-                                                     string prefix) {
-  if (union_ && tstruct->is_union()) {
-    out << indent() << prefix << " = " << type_name(tstruct) << ".Read(iprot);" << endl;
-  } else {
-    out << indent() << prefix << " = new " << type_name(tstruct) << "();" << endl << indent()
-        << prefix << ".Read(iprot);" << endl;
-  }
-}
-
-void t_csharp_generator::generate_deserialize_container(ostream& out,
-                                                        t_type* ttype,
-                                                        string prefix) {
-  scope_up(out);
-
-  string obj;
-
-  if (ttype->is_map()) {
-    obj = tmp("_map");
-  } else if (ttype->is_set()) {
-    obj = tmp("_set");
-  } else if (ttype->is_list()) {
-    obj = tmp("_list");
-  }
-
-  indent(out) << prefix << " = new " << type_name(ttype, false, true) << "();" << endl;
-  if (ttype->is_map()) {
-    out << indent() << "TMap " << obj << " = iprot.ReadMapBegin();" << endl;
-  } else if (ttype->is_set()) {
-    out << indent() << "TSet " << obj << " = iprot.ReadSetBegin();" << endl;
-  } else if (ttype->is_list()) {
-    out << indent() << "TList " << obj << " = iprot.ReadListBegin();" << endl;
-  }
-
-  string i = tmp("_i");
-  indent(out) << "for( int " << i << " = 0; " << i << " < " << obj << ".Count"
-              << "; "
-              << "++" << i << ")" << endl;
-  scope_up(out);
-
-  if (ttype->is_map()) {
-    generate_deserialize_map_element(out, (t_map*)ttype, prefix);
-  } else if (ttype->is_set()) {
-    generate_deserialize_set_element(out, (t_set*)ttype, prefix);
-  } else if (ttype->is_list()) {
-    generate_deserialize_list_element(out, (t_list*)ttype, prefix);
-  }
-
-  scope_down(out);
-
-  if (ttype->is_map()) {
-    indent(out) << "iprot.ReadMapEnd();" << endl;
-  } else if (ttype->is_set()) {
-    indent(out) << "iprot.ReadSetEnd();" << endl;
-  } else if (ttype->is_list()) {
-    indent(out) << "iprot.ReadListEnd();" << endl;
-  }
-
-  scope_down(out);
-}
-
-void t_csharp_generator::generate_deserialize_map_element(ostream& out,
-                                                          t_map* tmap,
-                                                          string prefix) {
-  string key = tmp("_key");
-  string val = tmp("_val");
-
-  t_field fkey(tmap->get_key_type(), key);
-  t_field fval(tmap->get_val_type(), val);
-
-  indent(out) << declare_field(&fkey) << endl;
-  indent(out) << declare_field(&fval) << endl;
-
-  generate_deserialize_field(out, &fkey);
-  generate_deserialize_field(out, &fval);
-
-  indent(out) << prefix << "[" << key << "] = " << val << ";" << endl;
-}
-
-void t_csharp_generator::generate_deserialize_set_element(ostream& out,
-                                                          t_set* tset,
-                                                          string prefix) {
-  string elem = tmp("_elem");
-  t_field felem(tset->get_elem_type(), elem);
-
-  indent(out) << declare_field(&felem) << endl;
-
-  generate_deserialize_field(out, &felem);
-
-  indent(out) << prefix << ".Add(" << elem << ");" << endl;
-}
-
-void t_csharp_generator::generate_deserialize_list_element(ostream& out,
-                                                           t_list* tlist,
-                                                           string prefix) {
-  string elem = tmp("_elem");
-  t_field felem(tlist->get_elem_type(), elem);
-
-  indent(out) << declare_field(&felem) << endl;
-
-  generate_deserialize_field(out, &felem);
-
-  indent(out) << prefix << ".Add(" << elem << ");" << endl;
-}
-
-void t_csharp_generator::generate_serialize_field(ostream& out,
-                                                  t_field* tfield,
-                                                  string prefix,
-                                                  bool is_element,
-                                                  bool is_propertyless) {
-  t_type* type = tfield->get_type();
-  while (type->is_typedef()) {
-    type = ((t_typedef*)type)->get_type();
-  }
-
-  string name = prefix + (is_propertyless ? "" : prop_name(tfield));
-
-  if (type->is_void()) {
-    throw "CANNOT GENERATE SERIALIZE CODE FOR void TYPE: " + name;
-  }
-
-  if (type->is_struct() || type->is_xception()) {
-    generate_serialize_struct(out, (t_struct*)type, name);
-  } else if (type->is_container()) {
-    generate_serialize_container(out, type, name);
-  } else if (type->is_base_type() || type->is_enum()) {
-    indent(out) << "oprot.";
-
-    string nullable_name = nullable_ && !is_element && !field_is_required(tfield) ? name + ".Value"
-                                                                                  : name;
-
-    if (type->is_base_type()) {
-      t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
-      switch (tbase) {
-      case t_base_type::TYPE_VOID:
-        throw "compiler error: cannot serialize void field in a struct: " + name;
-        break;
-      case t_base_type::TYPE_STRING:
-        if (type->is_binary()) {
-          out << "WriteBinary(";
-        } else {
-          out << "WriteString(";
-        }
-        out << name << ");";
-        break;
-      case t_base_type::TYPE_BOOL:
-        out << "WriteBool(" << nullable_name << ");";
-        break;
-      case t_base_type::TYPE_I8:
-        out << "WriteByte(" << nullable_name << ");";
-        break;
-      case t_base_type::TYPE_I16:
-        out << "WriteI16(" << nullable_name << ");";
-        break;
-      case t_base_type::TYPE_I32:
-        out << "WriteI32(" << nullable_name << ");";
-        break;
-      case t_base_type::TYPE_I64:
-        out << "WriteI64(" << nullable_name << ");";
-        break;
-      case t_base_type::TYPE_DOUBLE:
-        out << "WriteDouble(" << nullable_name << ");";
-        break;
-      default:
-        throw "compiler error: no C# name for base type " + t_base_type::t_base_name(tbase);
-      }
-    } else if (type->is_enum()) {
-      out << "WriteI32((int)" << nullable_name << ");";
-    }
-    out << endl;
-  } else {
-    printf("DO NOT KNOW HOW TO SERIALIZE '%s%s' TYPE '%s'\n",
-           prefix.c_str(),
-           tfield->get_name().c_str(),
-           type_name(type).c_str());
-  }
-}
-
-void t_csharp_generator::generate_serialize_struct(ostream& out,
-                                                   t_struct* tstruct,
-                                                   string prefix) {
-  (void)tstruct;
-  out << indent() << prefix << ".Write(oprot);" << endl;
-}
-
-void t_csharp_generator::generate_serialize_container(ostream& out, t_type* ttype, string prefix) {
-  scope_up(out);
-
-  if (ttype->is_map()) {
-    indent(out) << "oprot.WriteMapBegin(new TMap(" << type_to_enum(((t_map*)ttype)->get_key_type())
-                << ", " << type_to_enum(((t_map*)ttype)->get_val_type()) << ", " << prefix
-                << ".Count));" << endl;
-  } else if (ttype->is_set()) {
-    indent(out) << "oprot.WriteSetBegin(new TSet(" << type_to_enum(((t_set*)ttype)->get_elem_type())
-                << ", " << prefix << ".Count));" << endl;
-  } else if (ttype->is_list()) {
-    indent(out) << "oprot.WriteListBegin(new TList("
-                << type_to_enum(((t_list*)ttype)->get_elem_type()) << ", " << prefix << ".Count));"
-                << endl;
-  }
-
-  string iter = tmp("_iter");
-  if (ttype->is_map()) {
-    indent(out) << "foreach (" << type_name(((t_map*)ttype)->get_key_type()) << " " << iter
-                << " in " << prefix << ".Keys)";
-  } else if (ttype->is_set()) {
-    indent(out) << "foreach (" << type_name(((t_set*)ttype)->get_elem_type()) << " " << iter
-                << " in " << prefix << ")";
-  } else if (ttype->is_list()) {
-    indent(out) << "foreach (" << type_name(((t_list*)ttype)->get_elem_type()) << " " << iter
-                << " in " << prefix << ")";
-  }
-
-  out << endl;
-  scope_up(out);
-
-  if (ttype->is_map()) {
-    generate_serialize_map_element(out, (t_map*)ttype, iter, prefix);
-  } else if (ttype->is_set()) {
-    generate_serialize_set_element(out, (t_set*)ttype, iter);
-  } else if (ttype->is_list()) {
-    generate_serialize_list_element(out, (t_list*)ttype, iter);
-  }
-
-  scope_down(out);
-
-  if (ttype->is_map()) {
-    indent(out) << "oprot.WriteMapEnd();" << endl;
-  } else if (ttype->is_set()) {
-    indent(out) << "oprot.WriteSetEnd();" << endl;
-  } else if (ttype->is_list()) {
-    indent(out) << "oprot.WriteListEnd();" << endl;
-  }
-
-  scope_down(out);
-}
-
-void t_csharp_generator::generate_serialize_map_element(ostream& out,
-                                                        t_map* tmap,
-                                                        string iter,
-                                                        string map) {
-  t_field kfield(tmap->get_key_type(), iter);
-  generate_serialize_field(out, &kfield, "", true);
-  t_field vfield(tmap->get_val_type(), map + "[" + iter + "]");
-  generate_serialize_field(out, &vfield, "", true);
-}
-
-void t_csharp_generator::generate_serialize_set_element(ostream& out, t_set* tset, string iter) {
-  t_field efield(tset->get_elem_type(), iter);
-  generate_serialize_field(out, &efield, "", true);
-}
-
-void t_csharp_generator::generate_serialize_list_element(ostream& out,
-                                                         t_list* tlist,
-                                                         string iter) {
-  t_field efield(tlist->get_elem_type(), iter);
-  generate_serialize_field(out, &efield, "", true);
-}
-
-void t_csharp_generator::generate_property(ostream& out,
-                                           t_field* tfield,
-                                           bool isPublic,
-                                           bool generateIsset) {
-  generate_csharp_property(out, tfield, isPublic, generateIsset, "_");
-}
-void t_csharp_generator::generate_csharp_property(ostream& out,
-                                                  t_field* tfield,
-                                                  bool isPublic,
-                                                  bool generateIsset,
-                                                  std::string fieldPrefix) {
-  if ((serialize_ || wcf_) && isPublic) {
-    indent(out) << "[DataMember(Order = 0)]" << endl;
-  }
-  bool has_default = field_has_default(tfield);
-  bool is_required = field_is_required(tfield);
-  if ((nullable_ && !has_default) || (is_required)) {
-    indent(out) << (isPublic ? "public " : "private ")
-                << type_name(tfield->get_type(), false, false, true, is_required) << " "
-                << prop_name(tfield) << " { get; set; }" << endl;
-  } else {
-    indent(out) << (isPublic ? "public " : "private ")
-                << type_name(tfield->get_type(), false, false, true) << " " << prop_name(tfield)
-                << endl;
-    scope_up(out);
-    indent(out) << "get" << endl;
-    scope_up(out);
-    bool use_nullable = false;
-    if (nullable_) {
-      t_type* ttype = tfield->get_type();
-      while (ttype->is_typedef()) {
-        ttype = ((t_typedef*)ttype)->get_type();
-      }
-      if (ttype->is_base_type()) {
-        use_nullable = ((t_base_type*)ttype)->get_base() != t_base_type::TYPE_STRING;
-      } else if (ttype->is_enum()) {
-        use_nullable = true;
-      }
-    }
-    indent(out) << "return " << fieldPrefix + tfield->get_name() << ";" << endl;
-    scope_down(out);
-    indent(out) << "set" << endl;
-    scope_up(out);
-    if (use_nullable) {
-      if (generateIsset) {
-        indent(out) << "__isset." << normalize_name(tfield->get_name()) << " = value.HasValue;"
-                    << endl;
-      }
-      indent(out) << "if (value.HasValue) this." << fieldPrefix + tfield->get_name()
-                  << " = value.Value;" << endl;
-    } else {
-      if (generateIsset) {
-        indent(out) << "__isset." << normalize_name(tfield->get_name()) << " = true;" << endl;
-      }
-      indent(out) << "this." << fieldPrefix + tfield->get_name() << " = value;" << endl;
-    }
-    scope_down(out);
-    scope_down(out);
-  }
-  out << endl;
-}
-
-std::string t_csharp_generator::make_valid_csharp_identifier(std::string const& fromName) {
-  std::string str = fromName;
-  if (str.empty()) {
-    return str;
-  }
-
-  // tests rely on this
-  assert(('A' < 'Z') && ('a' < 'z') && ('0' < '9'));
-
-  // if the first letter is a number, we add an additional underscore in front of it
-  char c = str.at(0);
-  if (('0' <= c) && (c <= '9')) {
-    str = "_" + str;
-  }
-
-  // following chars: letter, number or underscore
-  for (size_t i = 0; i < str.size(); ++i) {
-    c = str.at(i);
-    if ((('A' > c) || (c > 'Z')) && (('a' > c) || (c > 'z')) && (('0' > c) || (c > '9'))
-        && ('_' != c)) {
-      str.replace(i, 1, "_");
-    }
-  }
-
-  return str;
-}
-
-void t_csharp_generator::cleanup_member_name_mapping(void* scope) {
-  if( member_mapping_scopes.empty()) {
-    throw "internal error: cleanup_member_name_mapping() no scope active";
-  }
-
-  member_mapping_scope& active = member_mapping_scopes.back();
-  if (active.scope_member != scope) {
-    throw "internal error: cleanup_member_name_mapping() called for wrong struct";
-  }
-
-  member_mapping_scopes.pop_back();
-}
-
-string t_csharp_generator::get_mapped_member_name(string name) {
-  if( ! member_mapping_scopes.empty()) {
-    member_mapping_scope& active = member_mapping_scopes.back();
-    map<string, string>::iterator iter = active.mapping_table.find(name);
-    if (active.mapping_table.end() != iter) {
-      return iter->second;
-    }
-  }
-
-  pverbose("no mapping for member %s\n", name.c_str());
-  return name;
-}
-
-void t_csharp_generator::prepare_member_name_mapping(t_struct* tstruct) {
-  prepare_member_name_mapping(tstruct, tstruct->get_members(), tstruct->get_name());
-}
-
-void t_csharp_generator::prepare_member_name_mapping(void* scope,
-                                                     const vector<t_field*>& members,
-                                                     const string& structname) {
-  // begin new scope
-  member_mapping_scope dummy;
-  dummy.scope_member = 0;
-  member_mapping_scopes.push_back(dummy);
-  member_mapping_scope& active = member_mapping_scopes.back();
-  active.scope_member = scope;
-
-  // current C# generator policy:
-  // - prop names are always rendered with an Uppercase first letter
-  // - struct names are used as given
-  std::set<std::string> used_member_names;
-  vector<t_field*>::const_iterator iter;
-
-  // prevent name conflicts with struct (CS0542 error)
-  used_member_names.insert(structname);
-
-  // prevent name conflicts with known methods (THRIFT-2942)
-  used_member_names.insert("Read");
-  used_member_names.insert("Write");
-
-  for (iter = members.begin(); iter != members.end(); ++iter) {
-    string oldname = (*iter)->get_name();
-    string newname = prop_name(*iter, true);
-    while (true) {
-
-      // new name conflicts with another member
-      if (used_member_names.find(newname) != used_member_names.end()) {
-        pverbose("struct %s: member %s conflicts with another member\n",
-                 structname.c_str(),
-                 newname.c_str());
-        newname += '_';
-        continue;
-      }
-
-      // add always, this helps us to detect edge cases like
-      // different spellings ("foo" and "Foo") within the same struct
-      pverbose("struct %s: member mapping %s => %s\n",
-               structname.c_str(),
-               oldname.c_str(),
-               newname.c_str());
-      active.mapping_table[oldname] = newname;
-      used_member_names.insert(newname);
-      break;
-    }
-  }
-}
-
-std::string t_csharp_generator::prop_name(t_field* tfield, bool suppress_mapping) {
-  string name(tfield->get_name());
-  if (suppress_mapping) {
-    name[0] = toupper(name[0]);
-  } else {
-    name = get_mapped_member_name(name);
-  }
-  return name;
-}
-
-string t_csharp_generator::type_name(t_type* ttype,
-                                     bool in_container,
-                                     bool in_init,
-                                     bool in_param,
-                                     bool is_required) {
-  (void)in_init;
-  while (ttype->is_typedef()) {
-    ttype = ((t_typedef*)ttype)->get_type();
-  }
-
-  if (ttype->is_base_type()) {
-    return base_type_name((t_base_type*)ttype, in_container, in_param, is_required);
-  } else if (ttype->is_map()) {
-    t_map* tmap = (t_map*)ttype;
-    return "Dictionary<" + type_name(tmap->get_key_type(), true) + ", "
-           + type_name(tmap->get_val_type(), true) + ">";
-  } else if (ttype->is_set()) {
-    t_set* tset = (t_set*)ttype;
-    return "THashSet<" + type_name(tset->get_elem_type(), true) + ">";
-  } else if (ttype->is_list()) {
-    t_list* tlist = (t_list*)ttype;
-    return "List<" + type_name(tlist->get_elem_type(), true) + ">";
-  }
-
-  t_program* program = ttype->get_program();
-  string postfix = (!is_required && nullable_ && in_param && ttype->is_enum()) ? "?" : "";
-  if (program != NULL && program != program_) {
-    string ns = program->get_namespace("csharp");
-    if (!ns.empty()) {
-      return ns + "." + normalize_name(ttype->get_name()) + postfix;
-    }
-  }
-
-  return normalize_name(ttype->get_name()) + postfix;
-}
-
-string t_csharp_generator::base_type_name(t_base_type* tbase,
-                                          bool in_container,
-                                          bool in_param,
-                                          bool is_required) {
-  (void)in_container;
-  string postfix = (!is_required && nullable_ && in_param) ? "?" : "";
-  switch (tbase->get_base()) {
-  case t_base_type::TYPE_VOID:
-    return "void";
-  case t_base_type::TYPE_STRING:
-    if (tbase->is_binary()) {
-      return "byte[]";
-    } else {
-      return "string";
-    }
-  case t_base_type::TYPE_BOOL:
-    return "bool" + postfix;
-  case t_base_type::TYPE_I8:
-    return "sbyte" + postfix;
-  case t_base_type::TYPE_I16:
-    return "short" + postfix;
-  case t_base_type::TYPE_I32:
-    return "int" + postfix;
-  case t_base_type::TYPE_I64:
-    return "long" + postfix;
-  case t_base_type::TYPE_DOUBLE:
-    return "double" + postfix;
-  default:
-    throw "compiler error: no C# name for base type " + t_base_type::t_base_name(tbase->get_base());
-  }
-}
-
-string t_csharp_generator::declare_field(t_field* tfield, bool init, std::string prefix) {
-  string result = type_name(tfield->get_type()) + " " + prefix + tfield->get_name();
-  if (init) {
-    t_type* ttype = tfield->get_type();
-    while (ttype->is_typedef()) {
-      ttype = ((t_typedef*)ttype)->get_type();
-    }
-    if (ttype->is_base_type() && field_has_default(tfield)) {
-      std::ofstream dummy;
-      result += " = " + render_const_value(dummy, tfield->get_name(), ttype, tfield->get_value());
-    } else if (ttype->is_base_type()) {
-      t_base_type::t_base tbase = ((t_base_type*)ttype)->get_base();
-      switch (tbase) {
-      case t_base_type::TYPE_VOID:
-        throw "NO T_VOID CONSTRUCT";
-      case t_base_type::TYPE_STRING:
-        result += " = null";
-        break;
-      case t_base_type::TYPE_BOOL:
-        result += " = false";
-        break;
-      case t_base_type::TYPE_I8:
-      case t_base_type::TYPE_I16:
-      case t_base_type::TYPE_I32:
-      case t_base_type::TYPE_I64:
-        result += " = 0";
-        break;
-      case t_base_type::TYPE_DOUBLE:
-        result += " = (double)0";
-        break;
-      }
-    } else if (ttype->is_enum()) {
-      result += " = (" + type_name(ttype, false, true) + ")0";
-    } else if (ttype->is_container()) {
-      result += " = new " + type_name(ttype, false, true) + "()";
-    } else {
-      result += " = new " + type_name(ttype, false, true) + "()";
-    }
-  }
-  return result + ";";
-}
-
-string t_csharp_generator::function_signature(t_function* tfunction, string prefix) {
-  t_type* ttype = tfunction->get_returntype();
-  return type_name(ttype) + " " + normalize_name(prefix + tfunction->get_name()) + "("
-         + argument_list(tfunction->get_arglist()) + ")";
-}
-
-string t_csharp_generator::function_signature_async_begin(t_function* tfunction, string prefix) {
-  string comma = (tfunction->get_arglist()->get_members().size() > 0 ? ", " : "");
-  return "IAsyncResult " + normalize_name(prefix + tfunction->get_name())
-         + "(AsyncCallback callback, object state" + comma + argument_list(tfunction->get_arglist())
-         + ")";
-}
-
-string t_csharp_generator::function_signature_async_end(t_function* tfunction, string prefix) {
-  t_type* ttype = tfunction->get_returntype();
-  return type_name(ttype) + " " + normalize_name(prefix + tfunction->get_name())
-         + "(IAsyncResult asyncResult)";
-}
-
-string t_csharp_generator::function_signature_async(t_function* tfunction, string prefix) {
-  t_type* ttype = tfunction->get_returntype();
-  string task = "Task";
-  if (!ttype->is_void())
-    task += "<" + type_name(ttype) + ">";
-  return task + " " + normalize_name(prefix + tfunction->get_name()) + "Async("
-         + argument_list(tfunction->get_arglist()) + ")";
-}
-
-string t_csharp_generator::argument_list(t_struct* tstruct) {
-  string result = "";
-  const vector<t_field*>& fields = tstruct->get_members();
-  vector<t_field*>::const_iterator f_iter;
-  bool first = true;
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if (first) {
-      first = false;
-    } else {
-      result += ", ";
-    }
-    result += type_name((*f_iter)->get_type()) + " " + normalize_name((*f_iter)->get_name());
-  }
-  return result;
-}
-
-string t_csharp_generator::type_to_enum(t_type* type) {
-  while (type->is_typedef()) {
-    type = ((t_typedef*)type)->get_type();
-  }
-
-  if (type->is_base_type()) {
-    t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
-    switch (tbase) {
-    case t_base_type::TYPE_VOID:
-      throw "NO T_VOID CONSTRUCT";
-    case t_base_type::TYPE_STRING:
-      return "TType.String";
-    case t_base_type::TYPE_BOOL:
-      return "TType.Bool";
-    case t_base_type::TYPE_I8:
-      return "TType.Byte";
-    case t_base_type::TYPE_I16:
-      return "TType.I16";
-    case t_base_type::TYPE_I32:
-      return "TType.I32";
-    case t_base_type::TYPE_I64:
-      return "TType.I64";
-    case t_base_type::TYPE_DOUBLE:
-      return "TType.Double";
-    }
-  } else if (type->is_enum()) {
-    return "TType.I32";
-  } else if (type->is_struct() || type->is_xception()) {
-    return "TType.Struct";
-  } else if (type->is_map()) {
-    return "TType.Map";
-  } else if (type->is_set()) {
-    return "TType.Set";
-  } else if (type->is_list()) {
-    return "TType.List";
-  }
-
-  throw "INVALID TYPE IN type_to_enum: " + type->get_name();
-}
-
-void t_csharp_generator::generate_csharp_docstring_comment(ostream& out, string contents) {
-  generate_docstring_comment(out, "/// <summary>\n", "/// ", contents, "/// </summary>\n");
-}
-
-void t_csharp_generator::generate_csharp_doc(ostream& out, t_field* field) {
-  if (field->get_type()->is_enum()) {
-    string combined_message = field->get_doc() + "\n<seealso cref=\""
-                              + get_enum_class_name(field->get_type()) + "\"/>";
-    generate_csharp_docstring_comment(out, combined_message);
-  } else {
-    generate_csharp_doc(out, (t_doc*)field);
-  }
-}
-
-void t_csharp_generator::generate_csharp_doc(ostream& out, t_doc* tdoc) {
-  if (tdoc->has_doc()) {
-    generate_csharp_docstring_comment(out, tdoc->get_doc());
-  }
-}
-
-void t_csharp_generator::generate_csharp_doc(ostream& out, t_function* tfunction) {
-  if (tfunction->has_doc()) {
-    stringstream ps;
-    const vector<t_field*>& fields = tfunction->get_arglist()->get_members();
-    vector<t_field*>::const_iterator p_iter;
-    for (p_iter = fields.begin(); p_iter != fields.end(); ++p_iter) {
-      t_field* p = *p_iter;
-      ps << "\n<param name=\"" << p->get_name() << "\">";
-      if (p->has_doc()) {
-        std::string str = p->get_doc();
-        str.erase(std::remove(str.begin(), str.end(), '\n'),
-                  str.end()); // remove the newlines that appear from the parser
-        ps << str;
-      }
-      ps << "</param>";
-    }
-    generate_docstring_comment(out,
-                               "",
-                               "/// ",
-                               "<summary>\n" + tfunction->get_doc() + "</summary>" + ps.str(),
-                               "");
-  }
-}
-
-std::string t_csharp_generator::get_enum_class_name(t_type* type) {
-  string package = "";
-  t_program* program = type->get_program();
-  if (program != NULL && program != program_) {
-    package = program->get_namespace("csharp") + ".";
-  }
-  return package + type->get_name();
-}
-
-
-THRIFT_REGISTER_GENERATOR(
-    csharp,
-    "C#",
-    "    async:           Adds Async support using Task.Run.\n"
-    "    wcf:             Adds bindings for WCF to generated classes.\n"
-    "    serial:          Add serialization support to generated classes.\n"
-    "    nullable:        Use nullable types for properties.\n"
-    "    hashcode:        Generate a hashcode and equals implementation for classes.\n"
-    "    union:           Use new union typing, which includes a static read function for union "
-    "types.\n")
diff --git a/compiler/cpp/src/thrift/generate/t_generator.cc b/compiler/cpp/src/thrift/generate/t_generator.cc
index 77afeba..3059fb1 100644
--- a/compiler/cpp/src/thrift/generate/t_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_generator.cc
@@ -234,10 +234,7 @@
   gen_map_t& the_map = get_generator_map();
   gen_map_t::iterator iter = the_map.find(language);
 
-  if (language == "csharp") {
-    pwarning(1, "The '%s' target is deprecated. Consider moving to 'netstd' instead.", language.c_str());
-  }
-  else if (language == "netcore") {
+  if ((language == "csharp") || (language == "netcore")) {
     failure("The '%s' target is no longer available. Use 'netstd' instead.", language.c_str());
   }
   else if (language == "as3") {
diff --git a/compiler/cpp/src/thrift/main.cc b/compiler/cpp/src/thrift/main.cc
index 1ba8234..50bdcea 100644
--- a/compiler/cpp/src/thrift/main.cc
+++ b/compiler/cpp/src/thrift/main.cc
@@ -656,7 +656,7 @@
  * Prints the version number
  */
 void version() {
-  printf("Thrift version %s (custom build)\n", THRIFT_VERSION);
+  printf("Thrift version %s\n", THRIFT_VERSION);
 }
 
 /**
diff --git a/compiler/cpp/src/thrift/thriftl.ll b/compiler/cpp/src/thrift/thriftl.ll
index bdb4fb0..3773516 100644
--- a/compiler/cpp/src/thrift/thriftl.ll
+++ b/compiler/cpp/src/thrift/thriftl.ll
@@ -207,7 +207,6 @@
 "cpp_include"        { return tok_cpp_include;          }
 "cpp_type"           { return tok_cpp_type;             }
 "java_package"       { error_unsupported_namespace_decl("java_package", "java"); /* do nothing */ }
-"csharp_namespace"   { error_unsupported_namespace_decl("csharp"); /* do nothing */ }
 "delphi_namespace"   { error_unsupported_namespace_decl("delphi"); /* do nothing */ }
 "php_namespace"      { error_unsupported_namespace_decl("php"); /* do nothing */ }
 "py_module"          { error_unsupported_namespace_decl("py_module", "py"); /* do nothing */ }
diff --git a/compiler/cpp/tests/CMakeLists.txt b/compiler/cpp/tests/CMakeLists.txt
index 7798c15..924e167 100644
--- a/compiler/cpp/tests/CMakeLists.txt
+++ b/compiler/cpp/tests/CMakeLists.txt
@@ -101,7 +101,6 @@
 THRIFT_ADD_COMPILER(c_glib  "Enable compiler for C with Glib" OFF)
 THRIFT_ADD_COMPILER(cl      "Enable compiler for Common LISP" OFF)
 THRIFT_ADD_COMPILER(cpp     "Enable compiler for C++" OFF)
-THRIFT_ADD_COMPILER(csharp  "Enable compiler for C#" OFF)
 THRIFT_ADD_COMPILER(d       "Enable compiler for D" OFF)
 THRIFT_ADD_COMPILER(dart    "Enable compiler for Dart" OFF)
 THRIFT_ADD_COMPILER(delphi  "Enable compiler for Delphi" OFF)
diff --git a/lib/csharp/Makefile.am b/lib/csharp/Makefile.am
deleted file mode 100644
index cc2bbc9..0000000
--- a/lib/csharp/Makefile.am
+++ /dev/null
@@ -1,114 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-SUBDIRS = . test/Multiplex
-
-THRIFTCODE = \
-            src/Collections/THashSet.cs \
-            src/Collections/TCollections.cs \
-            src/Properties/AssemblyInfo.cs \
-            src/Protocol/TAbstractBase.cs \
-            src/Protocol/TBase.cs \
-            src/Protocol/TBase64Utils.cs \
-            src/Protocol/TJSONProtocol.cs \
-            src/Protocol/TProtocolException.cs \
-            src/Protocol/TProtocolFactory.cs \
-            src/Protocol/TList.cs \
-            src/Protocol/TSet.cs \
-            src/Protocol/TMap.cs \
-            src/Protocol/TProtocolUtil.cs \
-            src/Protocol/TMessageType.cs \
-            src/Protocol/TProtocol.cs \
-            src/Protocol/TProtocolDecorator.cs \
-            src/Protocol/TMultiplexedProtocol.cs \
-            src/Protocol/TMultiplexedProcessor.cs \
-            src/Protocol/TType.cs \
-            src/Protocol/TField.cs \
-            src/Protocol/TMessage.cs \
-            src/Protocol/TStruct.cs \
-            src/Protocol/TBinaryProtocol.cs \
-            src/Protocol/TCompactProtocol.cs \
-            src/Server/TThreadedServer.cs \
-            src/Server/TThreadPoolServer.cs \
-            src/Server/TSimpleServer.cs \
-            src/Server/TServer.cs \
-            src/Server/TServerEventHandler.cs \
-            src/Transport/TBufferedTransport.cs \
-            src/Transport/TTransport.cs \
-            src/Transport/TSocket.cs \
-            src/Transport/TSocketVersionizer.cs \
-            src/Transport/TTransportException.cs \
-            src/Transport/TStreamTransport.cs \
-            src/Transport/TFramedTransport.cs \
-            src/Transport/TServerTransport.cs \
-            src/Transport/TServerSocket.cs \
-            src/Transport/TTransportFactory.cs \
-            src/Transport/THttpClient.cs \
-            src/Transport/THttpHandler.cs \
-            src/Transport/TMemoryBuffer.cs \
-            src/Transport/TNamedPipeClientTransport.cs \
-            src/Transport/TNamedPipeServerTransport.cs \
-            src/Transport/TTLSSocket.cs \
-            src/Transport/TTLSServerSocket.cs \
-            src/TProcessor.cs \
-            src/TProcessorFactory.cs \
-            src/TSingletonProcessorFactory.cs \
-            src/TPrototypeProcessorFactory.cs \
-            src/TControllingHandler.cs \
-            src/TException.cs \
-            src/TApplicationException.cs
-
-if MONO_MCS
-export CSC = mcs
-else
-export CSC = gmcs
-endif
-
-if NET_2_0
-export CSC_DEFINES = -d:NET_2_0
-endif
-
-all-local: Thrift.dll Thrift.45.dll
-
-Thrift.dll: $(THRIFTCODE)
-	$(CSC) $(CSC_DEFINES) -out:$@ -target:library -reference:System.Web $(THRIFTCODE)
-
-Thrift.45.dll: $(THRIFTCODE)
-	$(CSC) $(CSC_DEFINES) -out:$@ -target:library -reference:System.Web $(THRIFTCODE)
-
-CLEANFILES = \
-	Thrift.dll \
-	Thrift.45.dll
-
-DISTCLEANFILES = \
-	Makefile.in
-
-EXTRA_DIST = \
-	$(THRIFTCODE) \
-	ThriftMSBuildTask \
-	src/Thrift.csproj \
-	src/Thrift.45.csproj \
-	src/Thrift.sln \
-	src/Net35/ExtensionsNet35.cs \
-	src/Transport/TSilverlightSocket.cs \
-	src/Transport/THttpTaskAsyncHandler.cs \
-	src/TAsyncProcessor.cs \
-	test \
-	coding_standards.md \
-	README.md
diff --git a/lib/csharp/README.md b/lib/csharp/README.md
deleted file mode 100644
index 5fc14cb..0000000
--- a/lib/csharp/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Thrift C# Software Library
-
-Deprecation notice
-=======
-
-Per [THRIFT-4723](https://issues.apache.org/jira/browse/THRIFT-4723), both CSharp and Netcore targets are deprecated 
-and will be removed with the next release. Migrate to the [NetStd language target](../netstd/README.md) instead.
-
-License
-=======
-
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-
-Using Thrift with C#
-====================
-
-Thrift requires Mono >= 1.2.6 or .NET framework >= 3.5
diff --git a/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs b/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
deleted file mode 100644
index f5f0000..0000000
--- a/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ThriftMSBuildTask")]
-[assembly: AssemblyDescription("MSBuild Task to generate csharp from .thrift files, and compile the code into a library: ThriftImpl.dll")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("ThriftMSBuildTask")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-//@TODO where to put License information?
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("5095e09d-7b95-4be1-b250-e1c1db1c485e")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.14.0.*")]
-[assembly: AssemblyFileVersion("0.14.0.*")]
diff --git a/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs b/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs
deleted file mode 100644
index 4e6d301..0000000
--- a/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-using Microsoft.Build.Tasks;
-using System.IO;
-using System.Diagnostics;
-
-namespace ThriftMSBuildTask
-{
-    /// <summary>
-    /// MSBuild Task to generate csharp from .thrift files, and compile the code into a library: ThriftImpl.dll
-    /// </summary>
-    public class ThriftBuild : Task
-    {
-        /// <summary>
-        /// The full path to the thrift.exe compiler
-        /// </summary>
-        [Required]
-        public ITaskItem ThriftExecutable
-        {
-            get;
-            set;
-        }
-
-        /// <summary>
-        /// The full path to a thrift.dll C# library
-        /// </summary>
-        [Required]
-        public ITaskItem ThriftLibrary
-        {
-            get;
-            set;
-        }
-
-        /// <summary>
-        /// A direcotry containing .thrift files
-        /// </summary>
-        [Required]
-        public ITaskItem ThriftDefinitionDir
-        {
-            get;
-            set;
-        }
-
-        /// <summary>
-        /// The name of the auto-gen and compiled thrift library. It will placed in
-        /// the same directory as ThriftLibrary
-        /// </summary>
-        [Required]
-        public ITaskItem OutputName
-        {
-            get;
-            set;
-        }
-
-        /// <summary>
-        /// The full path to the compiled ThriftLibrary. This allows msbuild tasks to use this
-        /// output as a variable for use elsewhere.
-        /// </summary>
-        [Output]
-        public ITaskItem ThriftImplementation
-        {
-            get { return thriftImpl; }
-        }
-
-        private ITaskItem thriftImpl;
-        private const string lastCompilationName = "LAST_COMP_TIMESTAMP";
-
-        //use the Message Build Task to write something to build log
-        private void LogMessage(string text, MessageImportance importance)
-        {
-            Message m = new Message();
-            m.Text = text;
-            m.Importance = importance.ToString();
-            m.BuildEngine = this.BuildEngine;
-            m.Execute();
-        }
-
-        //recursively find .cs files in srcDir, paths should initially be non-null and empty
-        private void FindSourcesHelper(string srcDir, List<string> paths)
-        {
-            string[] files = Directory.GetFiles(srcDir, "*.cs");
-            foreach (string f in files)
-            {
-                paths.Add(f);
-            }
-            string[] dirs = Directory.GetDirectories(srcDir);
-            foreach (string dir in dirs)
-            {
-                FindSourcesHelper(dir, paths);
-            }
-        }
-
-        /// <summary>
-        /// Quote paths with spaces
-        /// </summary>
-        private string SafePath(string path)
-        {
-            if (path.Contains(' ') && !path.StartsWith("\""))
-            {
-                return "\"" + path + "\"";
-            }
-            return path;
-        }
-
-        private ITaskItem[] FindSources(string srcDir)
-        {
-            List<string> files = new List<string>();
-            FindSourcesHelper(srcDir, files);
-            ITaskItem[] items = new ITaskItem[files.Count];
-            for (int i = 0; i < items.Length; i++)
-            {
-                items[i] = new TaskItem(files[i]);
-            }
-            return items;
-        }
-
-        private string LastWriteTime(string defDir)
-        {
-            string[] files = Directory.GetFiles(defDir, "*.thrift");
-            DateTime d = (new DirectoryInfo(defDir)).LastWriteTime;
-            foreach(string file in files)
-            {
-                FileInfo f = new FileInfo(file);
-                DateTime curr = f.LastWriteTime;
-                if (DateTime.Compare(curr, d) > 0)
-                {
-                    d = curr;
-                }
-            }
-            return d.ToFileTimeUtc().ToString();
-        }
-
-        public override bool Execute()
-        {
-            string defDir = SafePath(ThriftDefinitionDir.ItemSpec);
-            //look for last compilation timestamp
-            string lastBuildPath = Path.Combine(defDir, lastCompilationName);
-            DirectoryInfo defDirInfo = new DirectoryInfo(defDir);
-            string lastWrite = LastWriteTime(defDir);
-            if (File.Exists(lastBuildPath))
-            {
-                string lastComp = File.ReadAllText(lastBuildPath);
-                //don't recompile if the thrift library has been updated since lastComp
-                FileInfo f = new FileInfo(ThriftLibrary.ItemSpec);
-                string thriftLibTime = f.LastWriteTimeUtc.ToFileTimeUtc().ToString();
-                if (lastComp.CompareTo(thriftLibTime) < 0)
-                {
-                    //new thrift library, do a compile
-                    lastWrite = thriftLibTime;
-                }
-                else if (lastComp == lastWrite || (lastComp == thriftLibTime && lastComp.CompareTo(lastWrite) > 0))
-                {
-                    //the .thrift dir hasn't been written to since last compilation, don't need to do anything
-                    LogMessage("ThriftImpl up-to-date", MessageImportance.High);
-                    return true;
-                }
-            }
-
-            //find the directory of the thriftlibrary (that's where output will go)
-            FileInfo thriftLibInfo = new FileInfo(SafePath(ThriftLibrary.ItemSpec));
-            string thriftDir = thriftLibInfo.Directory.FullName;
-
-            string genDir = Path.Combine(thriftDir, "gen-csharp");
-            if (Directory.Exists(genDir))
-            {
-                try
-                {
-                    Directory.Delete(genDir, true);
-                }
-                catch { /*eh i tried, just over-write now*/}
-            }
-
-            //run the thrift executable to generate C#
-            foreach (string thriftFile in Directory.GetFiles(defDir, "*.thrift"))
-            {
-                LogMessage("Generating code for: " + thriftFile, MessageImportance.Normal);
-                Process p = new Process();
-                p.StartInfo.FileName = SafePath(ThriftExecutable.ItemSpec);
-                p.StartInfo.Arguments = "--gen csharp -o " + SafePath(thriftDir) + " -r " + thriftFile;
-                p.StartInfo.UseShellExecute = false;
-                p.StartInfo.CreateNoWindow = true;
-                p.StartInfo.RedirectStandardOutput = false;
-                p.Start();
-                p.WaitForExit();
-                if (p.ExitCode != 0)
-                {
-                    LogMessage("thrift.exe failed to compile " + thriftFile, MessageImportance.High);
-                    return false;
-                }
-                if (p.ExitCode != 0)
-                {
-                    LogMessage("thrift.exe failed to compile " + thriftFile, MessageImportance.High);
-                    return false;
-                }
-            }
-
-            Csc csc = new Csc();
-            csc.TargetType = "library";
-            csc.References = new ITaskItem[] { new TaskItem(ThriftLibrary.ItemSpec) };
-            csc.EmitDebugInformation = true;
-            string outputPath = Path.Combine(thriftDir, OutputName.ItemSpec);
-            csc.OutputAssembly = new TaskItem(outputPath);
-            csc.Sources = FindSources(Path.Combine(thriftDir, "gen-csharp"));
-            csc.BuildEngine = this.BuildEngine;
-            LogMessage("Compiling generated cs...", MessageImportance.Normal);
-            if (!csc.Execute())
-            {
-                return false;
-            }
-
-            //write file to defDir to indicate a build was successfully completed
-            File.WriteAllText(lastBuildPath, lastWrite);
-
-            thriftImpl = new TaskItem(outputPath);
-
-            return true;
-        }
-    }
-}
diff --git a/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj b/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj
deleted file mode 100644
index 2589970..0000000
--- a/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{EC0A0231-66EA-4593-A792-C6CA3BB8668E}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>ThriftMSBuildTask</RootNamespace>
-    <AssemblyName>ThriftMSBuildTask</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>0.14.0.0</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Microsoft.Build.Framework" />
-    <Reference Include="Microsoft.Build.Tasks" />
-    <Reference Include="Microsoft.Build.Utilities" />
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Xml.Linq">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.DataSetExtensions">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="ThriftBuild.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
diff --git a/lib/csharp/coding_standards.md b/lib/csharp/coding_standards.md
deleted file mode 100644
index dc87190..0000000
--- a/lib/csharp/coding_standards.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## C# Coding Standards
-
-Please follow:
- * [Thrift General Coding Standards](/doc/coding_standards.md)
- * [MSDN C# Coding Conventions](http://msdn.microsoft.com/en-us/library/ff926074.aspx)
- * [C# Coding Guidelines](http://csharpguidelines.codeplex.com/)
diff --git a/lib/csharp/src/Collections/TCollections.cs b/lib/csharp/src/Collections/TCollections.cs
deleted file mode 100644
index 84afb6a..0000000
--- a/lib/csharp/src/Collections/TCollections.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-using System;
-using System.Collections;
-
-namespace Thrift.Collections
-{
-    public class TCollections
-    {
-        /// <summary>
-        /// This will return true if the two collections are value-wise the same.
-        /// If the collection contains a collection, the collections will be compared using this method.
-        /// </summary>
-        public static bool Equals (IEnumerable first, IEnumerable second)
-        {
-            if (first == null && second == null)
-            {
-                return true;
-            }
-            if (first == null || second == null)
-            {
-                return false;
-            }
-            IEnumerator fiter = first.GetEnumerator ();
-            IEnumerator siter = second.GetEnumerator ();
-
-            bool fnext = fiter.MoveNext ();
-            bool snext = siter.MoveNext ();
-            while (fnext && snext)
-            {
-                IEnumerable fenum = fiter.Current as IEnumerable;
-                IEnumerable senum = siter.Current as IEnumerable;
-                if (fenum != null && senum != null)
-                {
-                    if (!Equals(fenum, senum))
-                    {
-                        return false;
-                    }
-                }
-                else if (fenum == null ^ senum == null)
-                {
-                    return false;
-                }
-                else if (!Equals(fiter.Current, siter.Current))
-                {
-                    return false;
-                }
-                fnext = fiter.MoveNext();
-                snext = siter.MoveNext();
-            }
-
-            return fnext == snext;
-        }
-
-        /// <summary>
-        /// This returns a hashcode based on the value of the enumerable.
-        /// </summary>
-        public static int GetHashCode (IEnumerable enumerable)
-        {
-            if (enumerable == null)
-            {
-                return 0;
-            }
-
-            int hashcode = 0;
-            foreach (object obj in enumerable)
-            {
-                IEnumerable enum2 = obj as IEnumerable;
-                int objHash = enum2 == null ? obj.GetHashCode () : GetHashCode (enum2);
-                unchecked
-                {
-                    hashcode = (hashcode * 397) ^ (objHash);
-                }
-            }
-            return hashcode;
-        }
-    }
-}
diff --git a/lib/csharp/src/Collections/THashSet.cs b/lib/csharp/src/Collections/THashSet.cs
deleted file mode 100644
index e29271a..0000000
--- a/lib/csharp/src/Collections/THashSet.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-#if SILVERLIGHT
-using System.Runtime.Serialization;
-#endif
-
-namespace Thrift.Collections
-{
-#if SILVERLIGHT
-    [DataContract]
-#else
-    [Serializable]
-#endif
-    public class THashSet<T> : ICollection<T>
-    {
-#if NET_2_0 || SILVERLIGHT
-#if SILVERLIGHT
-        [DataMember]
-#endif
-        TDictSet<T> set = new TDictSet<T>();
-#else
-        HashSet<T> set = new HashSet<T>();
-#endif
-        public int Count
-        {
-            get { return set.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return false; }
-        }
-
-        public void Add(T item)
-        {
-            set.Add(item);
-        }
-
-        public void Clear()
-        {
-            set.Clear();
-        }
-
-        public bool Contains(T item)
-        {
-            return set.Contains(item);
-        }
-
-        public void CopyTo(T[] array, int arrayIndex)
-        {
-            set.CopyTo(array, arrayIndex);
-        }
-
-        public IEnumerator GetEnumerator()
-        {
-            return set.GetEnumerator();
-        }
-
-        IEnumerator<T> IEnumerable<T>.GetEnumerator()
-        {
-            return ((IEnumerable<T>)set).GetEnumerator();
-        }
-
-        public bool Remove(T item)
-        {
-            return set.Remove(item);
-        }
-
-#if NET_2_0 || SILVERLIGHT
-#if SILVERLIGHT
-        [DataContract]
-#endif
-        private class TDictSet<V> : ICollection<V>
-        {
-#if SILVERLIGHT
-            [DataMember]
-#endif
-            Dictionary<V, TDictSet<V>> dict = new Dictionary<V, TDictSet<V>>();
-
-            public int Count
-            {
-                get { return dict.Count; }
-            }
-
-            public bool IsReadOnly
-            {
-                get { return false; }
-            }
-
-            public IEnumerator GetEnumerator()
-            {
-                return ((IEnumerable)dict.Keys).GetEnumerator();
-            }
-
-            IEnumerator<V> IEnumerable<V>.GetEnumerator()
-            {
-                return dict.Keys.GetEnumerator();
-            }
-
-            public bool Add(V item)
-            {
-                if (!dict.ContainsKey(item))
-                {
-                    dict[item] = this;
-                    return true;
-                }
-
-                return false;
-            }
-
-            void ICollection<V>.Add(V item)
-            {
-                Add(item);
-            }
-
-            public void Clear()
-            {
-                dict.Clear();
-            }
-
-            public bool Contains(V item)
-            {
-                return dict.ContainsKey(item);
-            }
-
-            public void CopyTo(V[] array, int arrayIndex)
-            {
-                dict.Keys.CopyTo(array, arrayIndex);
-            }
-
-            public bool Remove(V item)
-            {
-                return dict.Remove(item);
-            }
-        }
-#endif
-    }
-
-}
diff --git a/lib/csharp/src/Net35/ExtensionsNet35.cs b/lib/csharp/src/Net35/ExtensionsNet35.cs
deleted file mode 100644
index 73a4232..0000000
--- a/lib/csharp/src/Net35/ExtensionsNet35.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-#if (!NET45)
-namespace Thrift
-{
-    static class StreamExtensionsNet35
-    {
-        // CopyTo() has been added in 4.0
-        public static long CopyTo(this Stream source, Stream target)
-        {
-            byte[] buffer = new byte[8192];  // multiple of 4096
-            long nTotal = 0;
-            while (true)
-            {
-                int nRead = source.Read(buffer, 0, buffer.Length);
-                if (nRead <= 0)  // done?
-                    return nTotal;
-
-                target.Write(buffer, 0, nRead);
-                nTotal += nRead;
-            }
-        }
-    }
-
-}
-#endif
-
diff --git a/lib/csharp/src/Properties/AssemblyInfo.cs b/lib/csharp/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index c8f51b5..0000000
--- a/lib/csharp/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Thrift")]
-[assembly: AssemblyDescription("C# bindings for the Apache Thrift RPC system")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-//@TODO where to put License information?
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("df3f8ef0-e0a3-4c86-a65b-8ec84e016b1d")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/src/Protocol/TAbstractBase.cs b/lib/csharp/src/Protocol/TAbstractBase.cs
deleted file mode 100644
index f5a61cd..0000000
--- a/lib/csharp/src/Protocol/TAbstractBase.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-namespace Thrift.Protocol
-{
-    public interface TAbstractBase
-    {
-        /// <summary>
-        /// Writes the objects out to the protocol.
-        /// </summary>
-        void Write(TProtocol tProtocol);
-    }
-}
diff --git a/lib/csharp/src/Protocol/TBase.cs b/lib/csharp/src/Protocol/TBase.cs
deleted file mode 100644
index 411e4d9..0000000
--- a/lib/csharp/src/Protocol/TBase.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-namespace Thrift.Protocol
-{
-    public interface TBase : TAbstractBase
-    {
-        /// <summary>
-        /// Reads the TObject from the given input protocol.
-        /// </summary>
-        void Read(TProtocol tProtocol);
-    }
-}
diff --git a/lib/csharp/src/Protocol/TBase64Utils.cs b/lib/csharp/src/Protocol/TBase64Utils.cs
deleted file mode 100644
index 9eaaebd..0000000
--- a/lib/csharp/src/Protocol/TBase64Utils.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
-    internal static class TBase64Utils
-    {
-        internal const string ENCODE_TABLE =
-            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-        internal static void encode(byte[] src, int srcOff, int len, byte[] dst,
-                                int dstOff)
-        {
-            dst[dstOff] = (byte)ENCODE_TABLE[(src[srcOff] >> 2) & 0x3F];
-            if (len == 3)
-            {
-                dst[dstOff + 1] =
-                    (byte)ENCODE_TABLE[
-                        ((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F)];
-                dst[dstOff + 2] =
-                    (byte)ENCODE_TABLE[
-                        ((src[srcOff + 1] << 2) & 0x3C) | ((src[srcOff + 2] >> 6) & 0x03)];
-                dst[dstOff + 3] =
-                    (byte)ENCODE_TABLE[src[srcOff + 2] & 0x3F];
-            }
-            else if (len == 2)
-            {
-                dst[dstOff + 1] =
-                    (byte)ENCODE_TABLE[
-                        ((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F)];
-                dst[dstOff + 2] =
-                    (byte)ENCODE_TABLE[(src[srcOff + 1] << 2) & 0x3C];
-
-            }
-            else
-            { // len == 1) {
-                dst[dstOff + 1] =
-                    (byte)ENCODE_TABLE[(src[srcOff] << 4) & 0x30];
-            }
-        }
-
-        private static int[] DECODE_TABLE = {
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
-            52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,
-            -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
-            15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
-            -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
-            41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        };
-
-        internal static void decode(byte[] src, int srcOff, int len, byte[] dst,
-                                 int dstOff)
-        {
-            dst[dstOff] = (byte)
-                ((DECODE_TABLE[src[srcOff] & 0x0FF] << 2) |
-                (DECODE_TABLE[src[srcOff + 1] & 0x0FF] >> 4));
-            if (len > 2)
-            {
-                dst[dstOff + 1] = (byte)
-                    (((DECODE_TABLE[src[srcOff + 1] & 0x0FF] << 4) & 0xF0) |
-                    (DECODE_TABLE[src[srcOff + 2] & 0x0FF] >> 2));
-                if (len > 3)
-                {
-                    dst[dstOff + 2] = (byte)
-                        (((DECODE_TABLE[src[srcOff + 2] & 0x0FF] << 6) & 0xC0) |
-                        DECODE_TABLE[src[srcOff + 3] & 0x0FF]);
-                }
-            }
-        }
-
-    }
-}
diff --git a/lib/csharp/src/Protocol/TBinaryProtocol.cs b/lib/csharp/src/Protocol/TBinaryProtocol.cs
deleted file mode 100644
index a4faa94..0000000
--- a/lib/csharp/src/Protocol/TBinaryProtocol.cs
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-
-namespace Thrift.Protocol
-{
-    public class TBinaryProtocol : TProtocol
-    {
-        protected const uint VERSION_MASK = 0xffff0000;
-        protected const uint VERSION_1 = 0x80010000;
-
-        protected bool strictRead_ = false;
-        protected bool strictWrite_ = true;
-
-        #region BinaryProtocol Factory
-
-        public class Factory : TProtocolFactory
-        {
-            protected bool strictRead_ = false;
-            protected bool strictWrite_ = true;
-
-            public Factory()
-                : this(false, true)
-            {
-            }
-
-            public Factory(bool strictRead, bool strictWrite)
-            {
-                strictRead_ = strictRead;
-                strictWrite_ = strictWrite;
-            }
-
-            public TProtocol GetProtocol(TTransport trans)
-            {
-                return new TBinaryProtocol(trans, strictRead_, strictWrite_);
-            }
-        }
-
-        #endregion
-
-        public TBinaryProtocol(TTransport trans)
-            : this(trans, false, true)
-        {
-        }
-
-        public TBinaryProtocol(TTransport trans, bool strictRead, bool strictWrite)
-            : base(trans)
-        {
-            strictRead_ = strictRead;
-            strictWrite_ = strictWrite;
-        }
-
-        #region Write Methods
-
-        public override void WriteMessageBegin(TMessage message)
-        {
-            if (strictWrite_)
-            {
-                uint version = VERSION_1 | (uint)(message.Type);
-                WriteI32((int)version);
-                WriteString(message.Name);
-                WriteI32(message.SeqID);
-            }
-            else
-            {
-                WriteString(message.Name);
-                WriteByte((sbyte)message.Type);
-                WriteI32(message.SeqID);
-            }
-        }
-
-        public override void WriteMessageEnd()
-        {
-        }
-
-        public override void WriteStructBegin(TStruct struc)
-        {
-        }
-
-        public override void WriteStructEnd()
-        {
-        }
-
-        public override void WriteFieldBegin(TField field)
-        {
-            WriteByte((sbyte)field.Type);
-            WriteI16(field.ID);
-        }
-
-        public override void WriteFieldEnd()
-        {
-        }
-
-        public override void WriteFieldStop()
-        {
-            WriteByte((sbyte)TType.Stop);
-        }
-
-        public override void WriteMapBegin(TMap map)
-        {
-            WriteByte((sbyte)map.KeyType);
-            WriteByte((sbyte)map.ValueType);
-            WriteI32(map.Count);
-        }
-
-        public override void WriteMapEnd()
-        {
-        }
-
-        public override void WriteListBegin(TList list)
-        {
-            WriteByte((sbyte)list.ElementType);
-            WriteI32(list.Count);
-        }
-
-        public override void WriteListEnd()
-        {
-        }
-
-        public override void WriteSetBegin(TSet set)
-        {
-            WriteByte((sbyte)set.ElementType);
-            WriteI32(set.Count);
-        }
-
-        public override void WriteSetEnd()
-        {
-        }
-
-        public override void WriteBool(bool b)
-        {
-            WriteByte(b ? (sbyte)1 : (sbyte)0);
-        }
-
-        private byte[] bout = new byte[1];
-        public override void WriteByte(sbyte b)
-        {
-            bout[0] = (byte)b;
-            trans.Write(bout, 0, 1);
-        }
-
-        private byte[] i16out = new byte[2];
-        public override void WriteI16(short s)
-        {
-            i16out[0] = (byte)(0xff & (s >> 8));
-            i16out[1] = (byte)(0xff & s);
-            trans.Write(i16out, 0, 2);
-        }
-
-        private byte[] i32out = new byte[4];
-        public override void WriteI32(int i32)
-        {
-            i32out[0] = (byte)(0xff & (i32 >> 24));
-            i32out[1] = (byte)(0xff & (i32 >> 16));
-            i32out[2] = (byte)(0xff & (i32 >> 8));
-            i32out[3] = (byte)(0xff & i32);
-            trans.Write(i32out, 0, 4);
-        }
-
-        private byte[] i64out = new byte[8];
-        public override void WriteI64(long i64)
-        {
-            i64out[0] = (byte)(0xff & (i64 >> 56));
-            i64out[1] = (byte)(0xff & (i64 >> 48));
-            i64out[2] = (byte)(0xff & (i64 >> 40));
-            i64out[3] = (byte)(0xff & (i64 >> 32));
-            i64out[4] = (byte)(0xff & (i64 >> 24));
-            i64out[5] = (byte)(0xff & (i64 >> 16));
-            i64out[6] = (byte)(0xff & (i64 >> 8));
-            i64out[7] = (byte)(0xff & i64);
-            trans.Write(i64out, 0, 8);
-        }
-
-        public override void WriteDouble(double d)
-        {
-#if !SILVERLIGHT
-            WriteI64(BitConverter.DoubleToInt64Bits(d));
-#else
-            var bytes = BitConverter.GetBytes(d);
-            WriteI64(BitConverter.ToInt64(bytes, 0));
-#endif
-        }
-
-        public override void WriteBinary(byte[] b)
-        {
-            WriteI32(b.Length);
-            trans.Write(b, 0, b.Length);
-        }
-
-        #endregion
-
-        #region ReadMethods
-
-        public override TMessage ReadMessageBegin()
-        {
-            TMessage message = new TMessage();
-            int size = ReadI32();
-            if (size < 0)
-            {
-                uint version = (uint)size & VERSION_MASK;
-                if (version != VERSION_1)
-                {
-                    throw new TProtocolException(TProtocolException.BAD_VERSION, "Bad version in ReadMessageBegin: " + version);
-                }
-                message.Type = (TMessageType)(size & 0x000000ff);
-                message.Name = ReadString();
-                message.SeqID = ReadI32();
-            }
-            else
-            {
-                if (strictRead_)
-                {
-                    throw new TProtocolException(TProtocolException.BAD_VERSION, "Missing version in readMessageBegin, old client?");
-                }
-                message.Name = ReadStringBody(size);
-                message.Type = (TMessageType)ReadByte();
-                message.SeqID = ReadI32();
-            }
-            return message;
-        }
-
-        public override void ReadMessageEnd()
-        {
-        }
-
-        public override TStruct ReadStructBegin()
-        {
-            return new TStruct();
-        }
-
-        public override void ReadStructEnd()
-        {
-        }
-
-        public override TField ReadFieldBegin()
-        {
-            TField field = new TField();
-            field.Type = (TType)ReadByte();
-
-            if (field.Type != TType.Stop)
-            {
-                field.ID = ReadI16();
-            }
-
-            return field;
-        }
-
-        public override void ReadFieldEnd()
-        {
-        }
-
-        public override TMap ReadMapBegin()
-        {
-            TMap map = new TMap();
-            map.KeyType = (TType)ReadByte();
-            map.ValueType = (TType)ReadByte();
-            map.Count = ReadI32();
-
-            return map;
-        }
-
-        public override void ReadMapEnd()
-        {
-        }
-
-        public override TList ReadListBegin()
-        {
-            TList list = new TList();
-            list.ElementType = (TType)ReadByte();
-            list.Count = ReadI32();
-
-            return list;
-        }
-
-        public override void ReadListEnd()
-        {
-        }
-
-        public override TSet ReadSetBegin()
-        {
-            TSet set = new TSet();
-            set.ElementType = (TType)ReadByte();
-            set.Count = ReadI32();
-
-            return set;
-        }
-
-        public override void ReadSetEnd()
-        {
-        }
-
-        public override bool ReadBool()
-        {
-            return ReadByte() == 1;
-        }
-
-        private byte[] bin = new byte[1];
-        public override sbyte ReadByte()
-        {
-            ReadAll(bin, 0, 1);
-            return (sbyte)bin[0];
-        }
-
-        private byte[] i16in = new byte[2];
-        public override short ReadI16()
-        {
-            ReadAll(i16in, 0, 2);
-            return (short)(((i16in[0] & 0xff) << 8) | ((i16in[1] & 0xff)));
-        }
-
-        private byte[] i32in = new byte[4];
-        public override int ReadI32()
-        {
-            ReadAll(i32in, 0, 4);
-            return (int)(((i32in[0] & 0xff) << 24) | ((i32in[1] & 0xff) << 16) | ((i32in[2] & 0xff) << 8) | ((i32in[3] & 0xff)));
-        }
-
-#pragma warning disable 675
-
-        private byte[] i64in = new byte[8];
-        public override long ReadI64()
-        {
-            ReadAll(i64in, 0, 8);
-            unchecked
-            {
-                return (long)(
-                    ((long)(i64in[0] & 0xff) << 56) |
-                    ((long)(i64in[1] & 0xff) << 48) |
-                    ((long)(i64in[2] & 0xff) << 40) |
-                    ((long)(i64in[3] & 0xff) << 32) |
-                    ((long)(i64in[4] & 0xff) << 24) |
-                    ((long)(i64in[5] & 0xff) << 16) |
-                    ((long)(i64in[6] & 0xff) << 8) |
-                    ((long)(i64in[7] & 0xff)));
-            }
-        }
-
-#pragma warning restore 675
-
-        public override double ReadDouble()
-        {
-#if !SILVERLIGHT
-            return BitConverter.Int64BitsToDouble(ReadI64());
-#else
-            var value = ReadI64();
-            var bytes = BitConverter.GetBytes(value);
-            return BitConverter.ToDouble(bytes, 0);
-#endif
-        }
-
-        public override byte[] ReadBinary()
-        {
-            int size = ReadI32();
-            byte[] buf = new byte[size];
-            trans.ReadAll(buf, 0, size);
-            return buf;
-        }
-        private string ReadStringBody(int size)
-        {
-            byte[] buf = new byte[size];
-            trans.ReadAll(buf, 0, size);
-            return Encoding.UTF8.GetString(buf, 0, buf.Length);
-        }
-
-        private int ReadAll(byte[] buf, int off, int len)
-        {
-            return trans.ReadAll(buf, off, len);
-        }
-
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Protocol/TCompactProtocol.cs b/lib/csharp/src/Protocol/TCompactProtocol.cs
deleted file mode 100644
index ff67397..0000000
--- a/lib/csharp/src/Protocol/TCompactProtocol.cs
+++ /dev/null
@@ -1,849 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections;
-using System.IO;
-using System.Collections.Generic;
-
-namespace Thrift.Protocol
-{
-    public class TCompactProtocol : TProtocol
-    {
-        private static TStruct ANONYMOUS_STRUCT = new TStruct("");
-        private static TField TSTOP = new TField("", TType.Stop, (short)0);
-
-        private static byte[] ttypeToCompactType = new byte[16];
-
-        private const byte PROTOCOL_ID = 0x82;
-        private const byte VERSION = 1;
-        private const byte VERSION_MASK = 0x1f; // 0001 1111
-        private const byte TYPE_MASK = 0xE0; // 1110 0000
-        private const byte TYPE_BITS = 0x07; // 0000 0111
-        private const int TYPE_SHIFT_AMOUNT = 5;
-
-        /// <summary>
-        /// All of the on-wire type codes.
-        /// </summary>
-        private static class Types
-        {
-            public const byte STOP = 0x00;
-            public const byte BOOLEAN_TRUE = 0x01;
-            public const byte BOOLEAN_FALSE = 0x02;
-            public const byte BYTE = 0x03;
-            public const byte I16 = 0x04;
-            public const byte I32 = 0x05;
-            public const byte I64 = 0x06;
-            public const byte DOUBLE = 0x07;
-            public const byte BINARY = 0x08;
-            public const byte LIST = 0x09;
-            public const byte SET = 0x0A;
-            public const byte MAP = 0x0B;
-            public const byte STRUCT = 0x0C;
-        }
-
-        /// <summary>
-        /// Used to keep track of the last field for the current and previous structs,
-        /// so we can do the delta stuff.
-        /// </summary>
-        private Stack<short> lastField_ = new Stack<short>(15);
-
-        private short lastFieldId_ = 0;
-
-        /// <summary>
-        /// If we encounter a boolean field begin, save the TField here so it can
-        /// have the value incorporated.
-        /// </summary>
-        private Nullable<TField> booleanField_;
-
-        /// <summary>
-        /// If we Read a field header, and it's a boolean field, save the boolean
-        /// value here so that ReadBool can use it.
-        /// </summary>
-        private Nullable<Boolean> boolValue_;
-
-
-        #region CompactProtocol Factory
-
-        public class Factory : TProtocolFactory
-        {
-            public Factory() { }
-
-            public TProtocol GetProtocol(TTransport trans)
-            {
-                return new TCompactProtocol(trans);
-            }
-        }
-
-        #endregion
-
-        public TCompactProtocol(TTransport trans)
-            : base(trans)
-        {
-            ttypeToCompactType[(int)TType.Stop] = Types.STOP;
-            ttypeToCompactType[(int)TType.Bool] = Types.BOOLEAN_TRUE;
-            ttypeToCompactType[(int)TType.Byte] = Types.BYTE;
-            ttypeToCompactType[(int)TType.I16] = Types.I16;
-            ttypeToCompactType[(int)TType.I32] = Types.I32;
-            ttypeToCompactType[(int)TType.I64] = Types.I64;
-            ttypeToCompactType[(int)TType.Double] = Types.DOUBLE;
-            ttypeToCompactType[(int)TType.String] = Types.BINARY;
-            ttypeToCompactType[(int)TType.List] = Types.LIST;
-            ttypeToCompactType[(int)TType.Set] = Types.SET;
-            ttypeToCompactType[(int)TType.Map] = Types.MAP;
-            ttypeToCompactType[(int)TType.Struct] = Types.STRUCT;
-        }
-
-        public void reset()
-        {
-            lastField_.Clear();
-            lastFieldId_ = 0;
-        }
-
-        #region Write Methods
-
-        /// <summary>
-        /// Writes a byte without any possibility of all that field header nonsense.
-        /// Used internally by other writing methods that know they need to Write a byte.
-        /// </summary>
-        private byte[] byteDirectBuffer = new byte[1];
-
-        private void WriteByteDirect(byte b)
-        {
-            byteDirectBuffer[0] = b;
-            trans.Write(byteDirectBuffer);
-        }
-
-        /// <summary>
-        /// Writes a byte without any possibility of all that field header nonsense.
-        /// </summary>
-        private void WriteByteDirect(int n)
-        {
-            WriteByteDirect((byte)n);
-        }
-
-        /// <summary>
-        /// Write an i32 as a varint. Results in 1-5 bytes on the wire.
-        /// TODO: make a permanent buffer like WriteVarint64?
-        /// </summary>
-        byte[] i32buf = new byte[5];
-
-        private void WriteVarint32(uint n)
-        {
-            int idx = 0;
-            while (true)
-            {
-                if ((n & ~0x7F) == 0)
-                {
-                    i32buf[idx++] = (byte)n;
-                    // WriteByteDirect((byte)n);
-                    break;
-                    // return;
-                }
-                else
-                {
-                    i32buf[idx++] = (byte)((n & 0x7F) | 0x80);
-                    // WriteByteDirect((byte)((n & 0x7F) | 0x80));
-                    n >>= 7;
-                }
-            }
-            trans.Write(i32buf, 0, idx);
-        }
-
-        /// <summary>
-        /// Write a message header to the wire. Compact Protocol messages contain the
-        /// protocol version so we can migrate forwards in the future if need be.
-        /// </summary>
-        public override void WriteMessageBegin(TMessage message)
-        {
-            WriteByteDirect(PROTOCOL_ID);
-            WriteByteDirect((byte)((VERSION & VERSION_MASK) | ((((uint)message.Type) << TYPE_SHIFT_AMOUNT) & TYPE_MASK)));
-            WriteVarint32((uint)message.SeqID);
-            WriteString(message.Name);
-        }
-
-        /// <summary>
-        /// Write a struct begin. This doesn't actually put anything on the wire. We
-        /// use it as an opportunity to put special placeholder markers on the field
-        /// stack so we can get the field id deltas correct.
-        /// </summary>
-        public override void WriteStructBegin(TStruct strct)
-        {
-            lastField_.Push(lastFieldId_);
-            lastFieldId_ = 0;
-        }
-
-        /// <summary>
-        /// Write a struct end. This doesn't actually put anything on the wire. We use
-        /// this as an opportunity to pop the last field from the current struct off
-        /// of the field stack.
-        /// </summary>
-        public override void WriteStructEnd()
-        {
-            lastFieldId_ = lastField_.Pop();
-        }
-
-        /// <summary>
-        /// Write a field header containing the field id and field type. If the
-        /// difference between the current field id and the last one is small (&lt; 15),
-        /// then the field id will be encoded in the 4 MSB as a delta. Otherwise, the
-        /// field id will follow the type header as a zigzag varint.
-        /// </summary>
-        public override void WriteFieldBegin(TField field)
-        {
-            if (field.Type == TType.Bool)
-            {
-                // we want to possibly include the value, so we'll wait.
-                booleanField_ = field;
-            }
-            else
-            {
-                WriteFieldBeginInternal(field, 0xFF);
-            }
-        }
-
-        /// <summary>
-        /// The workhorse of WriteFieldBegin. It has the option of doing a
-        /// 'type override' of the type header. This is used specifically in the
-        /// boolean field case.
-        /// </summary>
-        private void WriteFieldBeginInternal(TField field, byte typeOverride)
-        {
-            // short lastField = lastField_.Pop();
-
-            // if there's a type override, use that.
-            byte typeToWrite = typeOverride == 0xFF ? getCompactType(field.Type) : typeOverride;
-
-            // check if we can use delta encoding for the field id
-            if (field.ID > lastFieldId_ && field.ID - lastFieldId_ <= 15)
-            {
-                // Write them together
-                WriteByteDirect((field.ID - lastFieldId_) << 4 | typeToWrite);
-            }
-            else
-            {
-                // Write them separate
-                WriteByteDirect(typeToWrite);
-                WriteI16(field.ID);
-            }
-
-            lastFieldId_ = field.ID;
-            // lastField_.push(field.id);
-        }
-
-        /// <summary>
-        /// Write the STOP symbol so we know there are no more fields in this struct.
-        /// </summary>
-        public override void WriteFieldStop()
-        {
-            WriteByteDirect(Types.STOP);
-        }
-
-        /// <summary>
-        /// Write a map header. If the map is empty, omit the key and value type
-        /// headers, as we don't need any additional information to skip it.
-        /// </summary>
-        public override void WriteMapBegin(TMap map)
-        {
-            if (map.Count == 0)
-            {
-                WriteByteDirect(0);
-            }
-            else
-            {
-                WriteVarint32((uint)map.Count);
-                WriteByteDirect(getCompactType(map.KeyType) << 4 | getCompactType(map.ValueType));
-            }
-        }
-
-        /// <summary>
-        /// Write a list header.
-        /// </summary>
-        public override void WriteListBegin(TList list)
-        {
-            WriteCollectionBegin(list.ElementType, list.Count);
-        }
-
-        /// <summary>
-        /// Write a set header.
-        /// </summary>
-        public override void WriteSetBegin(TSet set)
-        {
-            WriteCollectionBegin(set.ElementType, set.Count);
-        }
-
-        /// <summary>
-        /// Write a boolean value. Potentially, this could be a boolean field, in
-        /// which case the field header info isn't written yet. If so, decide what the
-        /// right type header is for the value and then Write the field header.
-        /// Otherwise, Write a single byte.
-        /// </summary>
-        public override void WriteBool(Boolean b)
-        {
-            if (booleanField_ != null)
-            {
-                // we haven't written the field header yet
-                WriteFieldBeginInternal(booleanField_.Value, b ? Types.BOOLEAN_TRUE : Types.BOOLEAN_FALSE);
-                booleanField_ = null;
-            }
-            else
-            {
-                // we're not part of a field, so just Write the value.
-                WriteByteDirect(b ? Types.BOOLEAN_TRUE : Types.BOOLEAN_FALSE);
-            }
-        }
-
-        /// <summary>
-        /// Write a byte. Nothing to see here!
-        /// </summary>
-        public override void WriteByte(sbyte b)
-        {
-            WriteByteDirect((byte)b);
-        }
-
-        /// <summary>
-        /// Write an I16 as a zigzag varint.
-        /// </summary>
-        public override void WriteI16(short i16)
-        {
-            WriteVarint32(intToZigZag(i16));
-        }
-
-        /// <summary>
-        /// Write an i32 as a zigzag varint.
-        /// </summary>
-        public override void WriteI32(int i32)
-        {
-            WriteVarint32(intToZigZag(i32));
-        }
-
-        /// <summary>
-        /// Write an i64 as a zigzag varint.
-        /// </summary>
-        public override void WriteI64(long i64)
-        {
-            WriteVarint64(longToZigzag(i64));
-        }
-
-        /// <summary>
-        /// Write a double to the wire as 8 bytes.
-        /// </summary>
-        public override void WriteDouble(double dub)
-        {
-            byte[] data = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
-            fixedLongToBytes(BitConverter.DoubleToInt64Bits(dub), data, 0);
-            trans.Write(data);
-        }
-
-        /// <summary>
-        /// Write a string to the wire with a varint size preceding.
-        /// </summary>
-        public override void WriteString(string str)
-        {
-            byte[] bytes = UTF8Encoding.UTF8.GetBytes(str);
-            WriteBinary(bytes, 0, bytes.Length);
-        }
-
-        /// <summary>
-        /// Write a byte array, using a varint for the size.
-        /// </summary>
-        public override void WriteBinary(byte[] bin)
-        {
-            WriteBinary(bin, 0, bin.Length);
-        }
-
-        private void WriteBinary(byte[] buf, int offset, int length)
-        {
-            WriteVarint32((uint)length);
-            trans.Write(buf, offset, length);
-        }
-
-        //
-        // These methods are called by structs, but don't actually have any wire
-        // output or purpose.
-        //
-
-        public override void WriteMessageEnd() { }
-        public override void WriteMapEnd() { }
-        public override void WriteListEnd() { }
-        public override void WriteSetEnd() { }
-        public override void WriteFieldEnd() { }
-
-        //
-        // Internal writing methods
-        //
-
-        /// <summary>
-        /// Abstract method for writing the start of lists and sets. List and sets on
-        /// the wire differ only by the type indicator.
-        /// </summary>
-        protected void WriteCollectionBegin(TType elemType, int size)
-        {
-            if (size <= 14)
-            {
-                WriteByteDirect(size << 4 | getCompactType(elemType));
-            }
-            else
-            {
-                WriteByteDirect(0xf0 | getCompactType(elemType));
-                WriteVarint32((uint)size);
-            }
-        }
-
-        /// <summary>
-        /// Write an i64 as a varint. Results in 1-10 bytes on the wire.
-        /// </summary>
-        byte[] varint64out = new byte[10];
-        private void WriteVarint64(ulong n)
-        {
-            int idx = 0;
-            while (true)
-            {
-                if ((n & ~(ulong)0x7FL) == 0)
-                {
-                    varint64out[idx++] = (byte)n;
-                    break;
-                }
-                else
-                {
-                    varint64out[idx++] = ((byte)((n & 0x7F) | 0x80));
-                    n >>= 7;
-                }
-            }
-            trans.Write(varint64out, 0, idx);
-        }
-
-        /// <summary>
-        /// Convert l into a zigzag long. This allows negative numbers to be
-        /// represented compactly as a varint.
-        /// </summary>
-        private ulong longToZigzag(long n)
-        {
-            return (ulong)(n << 1) ^ (ulong)(n >> 63);
-        }
-
-        /// <summary>
-        /// Convert n into a zigzag int. This allows negative numbers to be
-        /// represented compactly as a varint.
-        /// </summary>
-        private uint intToZigZag(int n)
-        {
-            return (uint)(n << 1) ^ (uint)(n >> 31);
-        }
-
-        /// <summary>
-        /// Convert a long into little-endian bytes in buf starting at off and going
-        /// until off+7.
-        /// </summary>
-        private void fixedLongToBytes(long n, byte[] buf, int off)
-        {
-            buf[off + 0] = (byte)(n & 0xff);
-            buf[off + 1] = (byte)((n >> 8) & 0xff);
-            buf[off + 2] = (byte)((n >> 16) & 0xff);
-            buf[off + 3] = (byte)((n >> 24) & 0xff);
-            buf[off + 4] = (byte)((n >> 32) & 0xff);
-            buf[off + 5] = (byte)((n >> 40) & 0xff);
-            buf[off + 6] = (byte)((n >> 48) & 0xff);
-            buf[off + 7] = (byte)((n >> 56) & 0xff);
-        }
-
-        #endregion
-
-        #region ReadMethods
-
-        /// <summary>
-        /// Read a message header.
-        /// </summary>
-        public override TMessage ReadMessageBegin()
-        {
-            byte protocolId = (byte)ReadByte();
-            if (protocolId != PROTOCOL_ID)
-            {
-                throw new TProtocolException("Expected protocol id " + PROTOCOL_ID.ToString("X") + " but got " + protocolId.ToString("X"));
-            }
-            byte versionAndType = (byte)ReadByte();
-            byte version = (byte)(versionAndType & VERSION_MASK);
-            if (version != VERSION)
-            {
-                throw new TProtocolException("Expected version " + VERSION + " but got " + version);
-            }
-            byte type = (byte)((versionAndType >> TYPE_SHIFT_AMOUNT) & TYPE_BITS);
-            int seqid = (int)ReadVarint32();
-            string messageName = ReadString();
-            return new TMessage(messageName, (TMessageType)type, seqid);
-        }
-
-        /// <summary>
-        /// Read a struct begin. There's nothing on the wire for this, but it is our
-        /// opportunity to push a new struct begin marker onto the field stack.
-        /// </summary>
-        public override TStruct ReadStructBegin()
-        {
-            lastField_.Push(lastFieldId_);
-            lastFieldId_ = 0;
-            return ANONYMOUS_STRUCT;
-        }
-
-        /// <summary>
-        /// Doesn't actually consume any wire data, just removes the last field for
-        /// this struct from the field stack.
-        /// </summary>
-        public override void ReadStructEnd()
-        {
-            // consume the last field we Read off the wire.
-            lastFieldId_ = lastField_.Pop();
-        }
-
-        /// <summary>
-        /// Read a field header off the wire.
-        /// </summary>
-        public override TField ReadFieldBegin()
-        {
-            byte type = (byte)ReadByte();
-
-            // if it's a stop, then we can return immediately, as the struct is over.
-            if (type == Types.STOP)
-            {
-                return TSTOP;
-            }
-
-            short fieldId;
-
-            // mask off the 4 MSB of the type header. it could contain a field id delta.
-            short modifier = (short)((type & 0xf0) >> 4);
-            if (modifier == 0)
-            {
-                // not a delta. look ahead for the zigzag varint field id.
-                fieldId = ReadI16();
-            }
-            else
-            {
-                // has a delta. add the delta to the last Read field id.
-                fieldId = (short)(lastFieldId_ + modifier);
-            }
-
-            TField field = new TField("", getTType((byte)(type & 0x0f)), fieldId);
-
-            // if this happens to be a boolean field, the value is encoded in the type
-            if (isBoolType(type))
-            {
-                // save the boolean value in a special instance variable.
-                boolValue_ = (byte)(type & 0x0f) == Types.BOOLEAN_TRUE ? true : false;
-            }
-
-            // push the new field onto the field stack so we can keep the deltas going.
-            lastFieldId_ = field.ID;
-            return field;
-        }
-
-        /// <summary>
-        /// Read a map header off the wire. If the size is zero, skip Reading the key
-        /// and value type. This means that 0-length maps will yield TMaps without the
-        /// "correct" types.
-        /// </summary>
-        public override TMap ReadMapBegin()
-        {
-            int size = (int)ReadVarint32();
-            byte keyAndValueType = size == 0 ? (byte)0 : (byte)ReadByte();
-            return new TMap(getTType((byte)(keyAndValueType >> 4)), getTType((byte)(keyAndValueType & 0xf)), size);
-        }
-
-        /// <summary>
-        /// Read a list header off the wire. If the list size is 0-14, the size will
-        /// be packed into the element type header. If it's a longer list, the 4 MSB
-        /// of the element type header will be 0xF, and a varint will follow with the
-        /// true size.
-        /// </summary>
-        public override TList ReadListBegin()
-        {
-            byte size_and_type = (byte)ReadByte();
-            int size = (size_and_type >> 4) & 0x0f;
-            if (size == 15)
-            {
-                size = (int)ReadVarint32();
-            }
-            TType type = getTType(size_and_type);
-            return new TList(type, size);
-        }
-
-        /// <summary>
-        /// Read a set header off the wire. If the set size is 0-14, the size will
-        /// be packed into the element type header. If it's a longer set, the 4 MSB
-        /// of the element type header will be 0xF, and a varint will follow with the
-        /// true size.
-        /// </summary>
-        public override TSet ReadSetBegin()
-        {
-            return new TSet(ReadListBegin());
-        }
-
-        /// <summary>
-        /// Read a boolean off the wire. If this is a boolean field, the value should
-        /// already have been Read during ReadFieldBegin, so we'll just consume the
-        /// pre-stored value. Otherwise, Read a byte.
-        /// </summary>
-        public override Boolean ReadBool()
-        {
-            if (boolValue_ != null)
-            {
-                bool result = boolValue_.Value;
-                boolValue_ = null;
-                return result;
-            }
-            return ReadByte() == Types.BOOLEAN_TRUE;
-        }
-
-        byte[] byteRawBuf = new byte[1];
-        /// <summary>
-        /// Read a single byte off the wire. Nothing interesting here.
-        /// </summary>
-        public override sbyte ReadByte()
-        {
-            trans.ReadAll(byteRawBuf, 0, 1);
-            return (sbyte)byteRawBuf[0];
-        }
-
-        /// <summary>
-        /// Read an i16 from the wire as a zigzag varint.
-        /// </summary>
-        public override short ReadI16()
-        {
-            return (short)zigzagToInt(ReadVarint32());
-        }
-
-        /// <summary>
-        /// Read an i32 from the wire as a zigzag varint.
-        /// </summary>
-        public override int ReadI32()
-        {
-            return zigzagToInt(ReadVarint32());
-        }
-
-        /// <summary>
-        /// Read an i64 from the wire as a zigzag varint.
-        /// </summary>
-        public override long ReadI64()
-        {
-            return zigzagToLong(ReadVarint64());
-        }
-
-        /// <summary>
-        /// No magic here - just Read a double off the wire.
-        /// </summary>
-        public override double ReadDouble()
-        {
-            byte[] longBits = new byte[8];
-            trans.ReadAll(longBits, 0, 8);
-            return BitConverter.Int64BitsToDouble(bytesToLong(longBits));
-        }
-
-        /// <summary>
-        /// Reads a byte[] (via ReadBinary), and then UTF-8 decodes it.
-        /// </summary>
-        public override string ReadString()
-        {
-            int length = (int)ReadVarint32();
-
-            if (length == 0)
-            {
-                return "";
-            }
-
-            return Encoding.UTF8.GetString(ReadBinary(length));
-        }
-
-        /// <summary>
-        /// Read a byte[] from the wire.
-        /// </summary>
-        public override byte[] ReadBinary()
-        {
-            int length = (int)ReadVarint32();
-            if (length == 0) return new byte[0];
-
-            byte[] buf = new byte[length];
-            trans.ReadAll(buf, 0, length);
-            return buf;
-        }
-
-        /// <summary>
-        /// Read a byte[] of a known length from the wire.
-        /// </summary>
-        private byte[] ReadBinary(int length)
-        {
-            if (length == 0) return new byte[0];
-
-            byte[] buf = new byte[length];
-            trans.ReadAll(buf, 0, length);
-            return buf;
-        }
-
-        //
-        // These methods are here for the struct to call, but don't have any wire
-        // encoding.
-        //
-        public override void ReadMessageEnd() { }
-        public override void ReadFieldEnd() { }
-        public override void ReadMapEnd() { }
-        public override void ReadListEnd() { }
-        public override void ReadSetEnd() { }
-
-        //
-        // Internal Reading methods
-        //
-
-        /// <summary>
-        /// Read an i32 from the wire as a varint. The MSB of each byte is set
-        /// if there is another byte to follow. This can Read up to 5 bytes.
-        /// </summary>
-        private uint ReadVarint32()
-        {
-            uint result = 0;
-            int shift = 0;
-            while (true)
-            {
-                byte b = (byte)ReadByte();
-                result |= (uint)(b & 0x7f) << shift;
-                if ((b & 0x80) != 0x80) break;
-                shift += 7;
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// Read an i64 from the wire as a proper varint. The MSB of each byte is set
-        /// if there is another byte to follow. This can Read up to 10 bytes.
-        /// </summary>
-        private ulong ReadVarint64()
-        {
-            int shift = 0;
-            ulong result = 0;
-            while (true)
-            {
-                byte b = (byte)ReadByte();
-                result |= (ulong)(b & 0x7f) << shift;
-                if ((b & 0x80) != 0x80) break;
-                shift += 7;
-            }
-
-            return result;
-        }
-
-        #endregion
-
-        //
-        // encoding helpers
-        //
-
-        /// <summary>
-        /// Convert from zigzag int to int.
-        /// </summary>
-        private int zigzagToInt(uint n)
-        {
-            return (int)(n >> 1) ^ (-(int)(n & 1));
-        }
-
-        /// <summary>
-        /// Convert from zigzag long to long.
-        /// </summary>
-        private long zigzagToLong(ulong n)
-        {
-            return (long)(n >> 1) ^ (-(long)(n & 1));
-        }
-
-        /// <summary>
-        /// Note that it's important that the mask bytes are long literals,
-        /// otherwise they'll default to ints, and when you shift an int left 56 bits,
-        /// you just get a messed up int.
-        /// </summary>
-        private long bytesToLong(byte[] bytes)
-        {
-            return
-              ((bytes[7] & 0xffL) << 56) |
-              ((bytes[6] & 0xffL) << 48) |
-              ((bytes[5] & 0xffL) << 40) |
-              ((bytes[4] & 0xffL) << 32) |
-              ((bytes[3] & 0xffL) << 24) |
-              ((bytes[2] & 0xffL) << 16) |
-              ((bytes[1] & 0xffL) << 8) |
-              ((bytes[0] & 0xffL));
-        }
-
-        //
-        // type testing and converting
-        //
-
-        private Boolean isBoolType(byte b)
-        {
-            int lowerNibble = b & 0x0f;
-            return lowerNibble == Types.BOOLEAN_TRUE || lowerNibble == Types.BOOLEAN_FALSE;
-        }
-
-        /// <summary>
-        /// Given a TCompactProtocol.Types constant, convert it to its corresponding
-        /// TType value.
-        /// </summary>
-        private TType getTType(byte type)
-        {
-            switch ((byte)(type & 0x0f))
-            {
-                case Types.STOP:
-                    return TType.Stop;
-                case Types.BOOLEAN_FALSE:
-                case Types.BOOLEAN_TRUE:
-                    return TType.Bool;
-                case Types.BYTE:
-                    return TType.Byte;
-                case Types.I16:
-                    return TType.I16;
-                case Types.I32:
-                    return TType.I32;
-                case Types.I64:
-                    return TType.I64;
-                case Types.DOUBLE:
-                    return TType.Double;
-                case Types.BINARY:
-                    return TType.String;
-                case Types.LIST:
-                    return TType.List;
-                case Types.SET:
-                    return TType.Set;
-                case Types.MAP:
-                    return TType.Map;
-                case Types.STRUCT:
-                    return TType.Struct;
-                default:
-                    throw new TProtocolException("don't know what type: " + (byte)(type & 0x0f));
-            }
-        }
-
-        /// <summary>
-        /// Given a TType value, find the appropriate TCompactProtocol.Types constant.
-        /// </summary>
-        private byte getCompactType(TType ttype)
-        {
-            return ttypeToCompactType[(int)ttype];
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TField.cs b/lib/csharp/src/Protocol/TField.cs
deleted file mode 100644
index 8179557..0000000
--- a/lib/csharp/src/Protocol/TField.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
-    public struct TField
-    {
-        private string name;
-        private TType type;
-        private short id;
-
-        public TField(string name, TType type, short id)
-            :this()
-        {
-            this.name = name;
-            this.type = type;
-            this.id = id;
-        }
-
-        public string Name
-        {
-            get { return name; }
-            set { name = value; }
-        }
-
-        public TType Type
-        {
-            get { return type; }
-            set { type = value; }
-        }
-
-        public short ID
-        {
-            get { return id; }
-            set { id = value; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TJSONProtocol.cs b/lib/csharp/src/Protocol/TJSONProtocol.cs
deleted file mode 100644
index 9dbdea9..0000000
--- a/lib/csharp/src/Protocol/TJSONProtocol.cs
+++ /dev/null
@@ -1,1124 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.IO;
-using System.Text;
-using System.Collections.Generic;
-
-using Thrift.Transport;
-using System.Globalization;
-
-namespace Thrift.Protocol
-{
-    /// <summary>
-    /// JSON protocol implementation for thrift.
-    /// <para/>
-    /// This is a full-featured protocol supporting Write and Read.
-    /// <para/>
-    /// Please see the C++ class header for a detailed description of the
-    /// protocol's wire format.
-    /// <para/>
-    /// Adapted from the Java version.
-    /// </summary>
-    public class TJSONProtocol : TProtocol
-    {
-        /// <summary>
-        /// Factory for JSON protocol objects.
-        /// </summary>
-        public class Factory : TProtocolFactory
-        {
-            public TProtocol GetProtocol(TTransport trans)
-            {
-                return new TJSONProtocol(trans);
-            }
-        }
-
-        private static byte[] COMMA = new byte[] { (byte)',' };
-        private static byte[] COLON = new byte[] { (byte)':' };
-        private static byte[] LBRACE = new byte[] { (byte)'{' };
-        private static byte[] RBRACE = new byte[] { (byte)'}' };
-        private static byte[] LBRACKET = new byte[] { (byte)'[' };
-        private static byte[] RBRACKET = new byte[] { (byte)']' };
-        private static byte[] QUOTE = new byte[] { (byte)'"' };
-        private static byte[] BACKSLASH = new byte[] { (byte)'\\' };
-
-        private byte[] ESCSEQ = new byte[] { (byte)'\\', (byte)'u', (byte)'0', (byte)'0' };
-
-        private const long VERSION = 1;
-        private byte[] JSON_CHAR_TABLE = {
-    0,  0,  0,  0,  0,  0,  0,  0,(byte)'b',(byte)'t',(byte)'n',  0,(byte)'f',(byte)'r',  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    1,  1,(byte)'"',  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
-  };
-
-        private char[] ESCAPE_CHARS = "\"\\/bfnrt".ToCharArray();
-
-        private byte[] ESCAPE_CHAR_VALS = {
-    (byte)'"', (byte)'\\', (byte)'/', (byte)'\b', (byte)'\f', (byte)'\n', (byte)'\r', (byte)'\t',
-  };
-
-        private const int DEF_STRING_SIZE = 16;
-
-        private static byte[] NAME_BOOL = new byte[] { (byte)'t', (byte)'f' };
-        private static byte[] NAME_BYTE = new byte[] { (byte)'i', (byte)'8' };
-        private static byte[] NAME_I16 = new byte[] { (byte)'i', (byte)'1', (byte)'6' };
-        private static byte[] NAME_I32 = new byte[] { (byte)'i', (byte)'3', (byte)'2' };
-        private static byte[] NAME_I64 = new byte[] { (byte)'i', (byte)'6', (byte)'4' };
-        private static byte[] NAME_DOUBLE = new byte[] { (byte)'d', (byte)'b', (byte)'l' };
-        private static byte[] NAME_STRUCT = new byte[] { (byte)'r', (byte)'e', (byte)'c' };
-        private static byte[] NAME_STRING = new byte[] { (byte)'s', (byte)'t', (byte)'r' };
-        private static byte[] NAME_MAP = new byte[] { (byte)'m', (byte)'a', (byte)'p' };
-        private static byte[] NAME_LIST = new byte[] { (byte)'l', (byte)'s', (byte)'t' };
-        private static byte[] NAME_SET = new byte[] { (byte)'s', (byte)'e', (byte)'t' };
-
-        private static byte[] GetTypeNameForTypeID(TType typeID)
-        {
-            switch (typeID)
-            {
-                case TType.Bool:
-                    return NAME_BOOL;
-                case TType.Byte:
-                    return NAME_BYTE;
-                case TType.I16:
-                    return NAME_I16;
-                case TType.I32:
-                    return NAME_I32;
-                case TType.I64:
-                    return NAME_I64;
-                case TType.Double:
-                    return NAME_DOUBLE;
-                case TType.String:
-                    return NAME_STRING;
-                case TType.Struct:
-                    return NAME_STRUCT;
-                case TType.Map:
-                    return NAME_MAP;
-                case TType.Set:
-                    return NAME_SET;
-                case TType.List:
-                    return NAME_LIST;
-                default:
-                    throw new TProtocolException(TProtocolException.NOT_IMPLEMENTED,
-                                                 "Unrecognized type");
-            }
-        }
-
-        private static TType GetTypeIDForTypeName(byte[] name)
-        {
-            TType result = TType.Stop;
-            if (name.Length > 1)
-            {
-                switch (name[0])
-                {
-                    case (byte)'d':
-                        result = TType.Double;
-                        break;
-                    case (byte)'i':
-                        switch (name[1])
-                        {
-                            case (byte)'8':
-                                result = TType.Byte;
-                                break;
-                            case (byte)'1':
-                                result = TType.I16;
-                                break;
-                            case (byte)'3':
-                                result = TType.I32;
-                                break;
-                            case (byte)'6':
-                                result = TType.I64;
-                                break;
-                        }
-                        break;
-                    case (byte)'l':
-                        result = TType.List;
-                        break;
-                    case (byte)'m':
-                        result = TType.Map;
-                        break;
-                    case (byte)'r':
-                        result = TType.Struct;
-                        break;
-                    case (byte)'s':
-                        if (name[1] == (byte)'t')
-                        {
-                            result = TType.String;
-                        }
-                        else if (name[1] == (byte)'e')
-                        {
-                            result = TType.Set;
-                        }
-                        break;
-                    case (byte)'t':
-                        result = TType.Bool;
-                        break;
-                }
-            }
-            if (result == TType.Stop)
-            {
-                throw new TProtocolException(TProtocolException.NOT_IMPLEMENTED,
-                                             "Unrecognized type");
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// Base class for tracking JSON contexts that may require
-        /// inserting/Reading additional JSON syntax characters
-        /// This base context does nothing.
-        /// </summary>
-        protected class JSONBaseContext
-        {
-            protected TJSONProtocol proto;
-
-            public JSONBaseContext(TJSONProtocol proto)
-            {
-                this.proto = proto;
-            }
-
-            public virtual void Write() { }
-
-            public virtual void Read() { }
-
-            public virtual bool EscapeNumbers() { return false; }
-        }
-
-        /// <summary>
-        /// Context for JSON lists. Will insert/Read commas before each item except
-        /// for the first one
-        /// </summary>
-        protected class JSONListContext : JSONBaseContext
-        {
-            public JSONListContext(TJSONProtocol protocol)
-                : base(protocol)
-            {
-
-            }
-
-            private bool first = true;
-
-            public override void Write()
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    proto.trans.Write(COMMA);
-                }
-            }
-
-            public override void Read()
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    proto.ReadJSONSyntaxChar(COMMA);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Context for JSON records. Will insert/Read colons before the value portion
-        /// of each record pair, and commas before each key except the first. In
-        /// addition, will indicate that numbers in the key position need to be
-        /// escaped in quotes (since JSON keys must be strings).
-        /// </summary>
-        protected class JSONPairContext : JSONBaseContext
-        {
-            public JSONPairContext(TJSONProtocol proto)
-                : base(proto)
-            {
-
-            }
-
-            private bool first = true;
-            private bool colon = true;
-
-            public override void Write()
-            {
-                if (first)
-                {
-                    first = false;
-                    colon = true;
-                }
-                else
-                {
-                    proto.trans.Write(colon ? COLON : COMMA);
-                    colon = !colon;
-                }
-            }
-
-            public override void Read()
-            {
-                if (first)
-                {
-                    first = false;
-                    colon = true;
-                }
-                else
-                {
-                    proto.ReadJSONSyntaxChar(colon ? COLON : COMMA);
-                    colon = !colon;
-                }
-            }
-
-            public override bool EscapeNumbers()
-            {
-                return colon;
-            }
-        }
-
-        /// <summary>
-        /// Holds up to one byte from the transport
-        /// </summary>
-        protected class LookaheadReader
-        {
-            protected TJSONProtocol proto;
-
-            public LookaheadReader(TJSONProtocol proto)
-            {
-                this.proto = proto;
-            }
-
-            private bool hasData;
-            private byte[] data = new byte[1];
-
-            /// <summary>
-            /// Return and consume the next byte to be Read, either taking it from the
-            /// data buffer if present or getting it from the transport otherwise.
-            /// </summary>
-            public byte Read()
-            {
-                if (hasData)
-                {
-                    hasData = false;
-                }
-                else
-                {
-                    proto.trans.ReadAll(data, 0, 1);
-                }
-                return data[0];
-            }
-
-            /// <summary>
-            /// Return the next byte to be Read without consuming, filling the data
-            /// buffer if it has not been filled alReady.
-            /// </summary>
-            public byte Peek()
-            {
-                if (!hasData)
-                {
-                    proto.trans.ReadAll(data, 0, 1);
-                }
-                hasData = true;
-                return data[0];
-            }
-        }
-
-        // Default encoding
-        protected Encoding utf8Encoding = UTF8Encoding.UTF8;
-
-        // Stack of nested contexts that we may be in
-        protected Stack<JSONBaseContext> contextStack = new Stack<JSONBaseContext>();
-
-        // Current context that we are in
-        protected JSONBaseContext context;
-
-        // Reader that manages a 1-byte buffer
-        protected LookaheadReader reader;
-
-        /// <summary>
-        /// Push a new JSON context onto the stack.
-        /// </summary>
-        protected void PushContext(JSONBaseContext c)
-        {
-            contextStack.Push(context);
-            context = c;
-        }
-
-        /// <summary>
-        /// Pop the last JSON context off the stack
-        /// </summary>
-        protected void PopContext()
-        {
-            context = contextStack.Pop();
-        }
-
-        /// <summary>
-        /// TJSONProtocol Constructor
-        /// </summary>
-        public TJSONProtocol(TTransport trans)
-            : base(trans)
-        {
-            context = new JSONBaseContext(this);
-            reader = new LookaheadReader(this);
-        }
-
-        // Temporary buffer used by several methods
-        private byte[] tempBuffer = new byte[4];
-
-        /// <summary>
-        /// Read a byte that must match b[0]; otherwise an exception is thrown.
-        /// Marked protected to avoid synthetic accessor in JSONListContext.Read
-        /// and JSONPairContext.Read
-        /// </summary>
-        protected void ReadJSONSyntaxChar(byte[] b)
-        {
-            byte ch = reader.Read();
-            if (ch != b[0])
-            {
-                throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                             "Unexpected character:" + (char)ch);
-            }
-        }
-
-        /// <summary>
-        /// Convert a byte containing a hex char ('0'-'9' or 'a'-'f') into its
-        /// corresponding hex value
-        /// </summary>
-        private static byte HexVal(byte ch)
-        {
-            if ((ch >= '0') && (ch <= '9'))
-            {
-                return (byte)((char)ch - '0');
-            }
-            else if ((ch >= 'a') && (ch <= 'f'))
-            {
-                ch += 10;
-                return (byte)((char)ch - 'a');
-            }
-            else
-            {
-                throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                             "Expected hex character");
-            }
-        }
-
-        /// <summary>
-        /// Convert a byte containing a hex value to its corresponding hex character
-        /// </summary>
-        private static byte HexChar(byte val)
-        {
-            val &= 0x0F;
-            if (val < 10)
-            {
-                return (byte)((char)val + '0');
-            }
-            else
-            {
-                val -= 10;
-                return (byte)((char)val + 'a');
-            }
-        }
-
-        /// <summary>
-        /// Write the bytes in array buf as a JSON characters, escaping as needed
-        /// </summary>
-        private void WriteJSONString(byte[] b)
-        {
-            context.Write();
-            trans.Write(QUOTE);
-            int len = b.Length;
-            for (int i = 0; i < len; i++)
-            {
-                if ((b[i] & 0x00FF) >= 0x30)
-                {
-                    if (b[i] == BACKSLASH[0])
-                    {
-                        trans.Write(BACKSLASH);
-                        trans.Write(BACKSLASH);
-                    }
-                    else
-                    {
-                        trans.Write(b, i, 1);
-                    }
-                }
-                else
-                {
-                    tempBuffer[0] = JSON_CHAR_TABLE[b[i]];
-                    if (tempBuffer[0] == 1)
-                    {
-                        trans.Write(b, i, 1);
-                    }
-                    else if (tempBuffer[0] > 1)
-                    {
-                        trans.Write(BACKSLASH);
-                        trans.Write(tempBuffer, 0, 1);
-                    }
-                    else
-                    {
-                        trans.Write(ESCSEQ);
-                        tempBuffer[0] = HexChar((byte)(b[i] >> 4));
-                        tempBuffer[1] = HexChar(b[i]);
-                        trans.Write(tempBuffer, 0, 2);
-                    }
-                }
-            }
-            trans.Write(QUOTE);
-        }
-
-        /// <summary>
-        /// Write out number as a JSON value. If the context dictates so, it will be
-        /// wrapped in quotes to output as a JSON string.
-        /// </summary>
-        private void WriteJSONInteger(long num)
-        {
-            context.Write();
-            string str = num.ToString();
-
-            bool escapeNum = context.EscapeNumbers();
-            if (escapeNum)
-                trans.Write(QUOTE);
-
-            trans.Write(utf8Encoding.GetBytes(str));
-
-            if (escapeNum)
-                trans.Write(QUOTE);
-        }
-
-        /// <summary>
-        /// Write out a double as a JSON value. If it is NaN or infinity or if the
-        /// context dictates escaping, Write out as JSON string.
-        /// </summary>
-        private void WriteJSONDouble(double num)
-        {
-            context.Write();
-            string str = num.ToString("G17", CultureInfo.InvariantCulture);
-            bool special = false;
-
-            switch (str[0])
-            {
-                case 'N': // NaN
-                case 'I': // Infinity
-                    special = true;
-                    break;
-                case '-':
-                    if (str[1] == 'I')
-                    { // -Infinity
-                        special = true;
-                    }
-                    break;
-            }
-
-            bool escapeNum = special || context.EscapeNumbers();
-
-            if (escapeNum)
-                trans.Write(QUOTE);
-
-            trans.Write(utf8Encoding.GetBytes(str));
-
-            if (escapeNum)
-                trans.Write(QUOTE);
-        }
-        /// <summary>
-        /// Write out contents of byte array b as a JSON string with base-64 encoded
-        /// data
-        /// </summary>
-        private void WriteJSONBase64(byte[] b)
-        {
-            context.Write();
-            trans.Write(QUOTE);
-
-            int len = b.Length;
-            int off = 0;
-
-            while (len >= 3)
-            {
-                // Encode 3 bytes at a time
-                TBase64Utils.encode(b, off, 3, tempBuffer, 0);
-                trans.Write(tempBuffer, 0, 4);
-                off += 3;
-                len -= 3;
-            }
-            if (len > 0)
-            {
-                // Encode remainder
-                TBase64Utils.encode(b, off, len, tempBuffer, 0);
-                trans.Write(tempBuffer, 0, len + 1);
-            }
-
-            trans.Write(QUOTE);
-        }
-
-        private void WriteJSONObjectStart()
-        {
-            context.Write();
-            trans.Write(LBRACE);
-            PushContext(new JSONPairContext(this));
-        }
-
-        private void WriteJSONObjectEnd()
-        {
-            PopContext();
-            trans.Write(RBRACE);
-        }
-
-        private void WriteJSONArrayStart()
-        {
-            context.Write();
-            trans.Write(LBRACKET);
-            PushContext(new JSONListContext(this));
-        }
-
-        private void WriteJSONArrayEnd()
-        {
-            PopContext();
-            trans.Write(RBRACKET);
-        }
-
-        public override void WriteMessageBegin(TMessage message)
-        {
-            WriteJSONArrayStart();
-            WriteJSONInteger(VERSION);
-
-            byte[] b = utf8Encoding.GetBytes(message.Name);
-            WriteJSONString(b);
-
-            WriteJSONInteger((long)message.Type);
-            WriteJSONInteger(message.SeqID);
-        }
-
-        public override void WriteMessageEnd()
-        {
-            WriteJSONArrayEnd();
-        }
-
-        public override void WriteStructBegin(TStruct str)
-        {
-            WriteJSONObjectStart();
-        }
-
-        public override void WriteStructEnd()
-        {
-            WriteJSONObjectEnd();
-        }
-
-        public override void WriteFieldBegin(TField field)
-        {
-            WriteJSONInteger(field.ID);
-            WriteJSONObjectStart();
-            WriteJSONString(GetTypeNameForTypeID(field.Type));
-        }
-
-        public override void WriteFieldEnd()
-        {
-            WriteJSONObjectEnd();
-        }
-
-        public override void WriteFieldStop() { }
-
-        public override void WriteMapBegin(TMap map)
-        {
-            WriteJSONArrayStart();
-            WriteJSONString(GetTypeNameForTypeID(map.KeyType));
-            WriteJSONString(GetTypeNameForTypeID(map.ValueType));
-            WriteJSONInteger(map.Count);
-            WriteJSONObjectStart();
-        }
-
-        public override void WriteMapEnd()
-        {
-            WriteJSONObjectEnd();
-            WriteJSONArrayEnd();
-        }
-
-        public override void WriteListBegin(TList list)
-        {
-            WriteJSONArrayStart();
-            WriteJSONString(GetTypeNameForTypeID(list.ElementType));
-            WriteJSONInteger(list.Count);
-        }
-
-        public override void WriteListEnd()
-        {
-            WriteJSONArrayEnd();
-        }
-
-        public override void WriteSetBegin(TSet set)
-        {
-            WriteJSONArrayStart();
-            WriteJSONString(GetTypeNameForTypeID(set.ElementType));
-            WriteJSONInteger(set.Count);
-        }
-
-        public override void WriteSetEnd()
-        {
-            WriteJSONArrayEnd();
-        }
-
-        public override void WriteBool(bool b)
-        {
-            WriteJSONInteger(b ? (long)1 : (long)0);
-        }
-
-        public override void WriteByte(sbyte b)
-        {
-            WriteJSONInteger((long)b);
-        }
-
-        public override void WriteI16(short i16)
-        {
-            WriteJSONInteger((long)i16);
-        }
-
-        public override void WriteI32(int i32)
-        {
-            WriteJSONInteger((long)i32);
-        }
-
-        public override void WriteI64(long i64)
-        {
-            WriteJSONInteger(i64);
-        }
-
-        public override void WriteDouble(double dub)
-        {
-            WriteJSONDouble(dub);
-        }
-
-        public override void WriteString(string str)
-        {
-            byte[] b = utf8Encoding.GetBytes(str);
-            WriteJSONString(b);
-        }
-
-        public override void WriteBinary(byte[] bin)
-        {
-            WriteJSONBase64(bin);
-        }
-
-        /**
-         * Reading methods.
-         */
-
-        /// <summary>
-        /// Read in a JSON string, unescaping as appropriate.. Skip Reading from the
-        /// context if skipContext is true.
-        /// </summary>
-        private byte[] ReadJSONString(bool skipContext)
-        {
-            MemoryStream buffer = new MemoryStream();
-            List<char> codeunits = new List<char>();
-
-
-            if (!skipContext)
-            {
-                context.Read();
-            }
-            ReadJSONSyntaxChar(QUOTE);
-            while (true)
-            {
-                byte ch = reader.Read();
-                if (ch == QUOTE[0])
-                {
-                    break;
-                }
-
-                // escaped?
-                if (ch != ESCSEQ[0])
-                {
-                    buffer.Write(new byte[] { (byte)ch }, 0, 1);
-                    continue;
-                }
-
-                // distinguish between \uXXXX and \?
-                ch = reader.Read();
-                if (ch != ESCSEQ[1])  // control chars like \n
-                {
-                    int off = Array.IndexOf(ESCAPE_CHARS, (char)ch);
-                    if (off == -1)
-                    {
-                        throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                                        "Expected control char");
-                    }
-                    ch = ESCAPE_CHAR_VALS[off];
-                    buffer.Write(new byte[] { (byte)ch }, 0, 1);
-                    continue;
-                }
-
-
-                // it's \uXXXX
-                trans.ReadAll(tempBuffer, 0, 4);
-                var wch = (short)((HexVal((byte)tempBuffer[0]) << 12) +
-                                  (HexVal((byte)tempBuffer[1]) << 8) +
-                                  (HexVal((byte)tempBuffer[2]) << 4) +
-                                   HexVal(tempBuffer[3]));
-                if (Char.IsHighSurrogate((char)wch))
-                {
-                    if (codeunits.Count > 0)
-                    {
-                        throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                                        "Expected low surrogate char");
-                    }
-                    codeunits.Add((char)wch);
-                }
-                else if (Char.IsLowSurrogate((char)wch))
-                {
-                    if (codeunits.Count == 0)
-                    {
-                        throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                                        "Expected high surrogate char");
-                    }
-                    codeunits.Add((char)wch);
-                    var tmp = utf8Encoding.GetBytes(codeunits.ToArray());
-                    buffer.Write(tmp, 0, tmp.Length);
-                    codeunits.Clear();
-                }
-                else
-                {
-                    var tmp = utf8Encoding.GetBytes(new char[] { (char)wch });
-                    buffer.Write(tmp, 0, tmp.Length);
-                }
-            }
-
-
-            if (codeunits.Count > 0)
-            {
-                throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                                "Expected low surrogate char");
-            }
-
-            return buffer.ToArray();
-        }
-
-        /// <summary>
-        /// Return true if the given byte could be a valid part of a JSON number.
-        /// </summary>
-        private bool IsJSONNumeric(byte b)
-        {
-            switch (b)
-            {
-                case (byte)'+':
-                case (byte)'-':
-                case (byte)'.':
-                case (byte)'0':
-                case (byte)'1':
-                case (byte)'2':
-                case (byte)'3':
-                case (byte)'4':
-                case (byte)'5':
-                case (byte)'6':
-                case (byte)'7':
-                case (byte)'8':
-                case (byte)'9':
-                case (byte)'E':
-                case (byte)'e':
-                    return true;
-            }
-            return false;
-        }
-
-        /// <summary>
-        /// Read in a sequence of characters that are all valid in JSON numbers. Does
-        /// not do a complete regex check to validate that this is actually a number.
-        /// </summary>
-        private string ReadJSONNumericChars()
-        {
-            StringBuilder strbld = new StringBuilder();
-            while (true)
-            {
-                byte ch = reader.Peek();
-                if (!IsJSONNumeric(ch))
-                {
-                    break;
-                }
-                strbld.Append((char)reader.Read());
-            }
-            return strbld.ToString();
-        }
-
-        /// <summary>
-        /// Read in a JSON number. If the context dictates, Read in enclosing quotes.
-        /// </summary>
-        private long ReadJSONInteger()
-        {
-            context.Read();
-            if (context.EscapeNumbers())
-            {
-                ReadJSONSyntaxChar(QUOTE);
-            }
-
-            string str = ReadJSONNumericChars();
-            if (context.EscapeNumbers())
-            {
-                ReadJSONSyntaxChar(QUOTE);
-            }
-
-            try
-            {
-                return Int64.Parse(str);
-            }
-            catch (FormatException fex)
-            {
-                throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                             "Bad data encounted in numeric data", fex);
-            }
-        }
-
-        /// <summary>
-        /// Read in a JSON double value. Throw if the value is not wrapped in quotes
-        /// when expected or if wrapped in quotes when not expected.
-        /// </summary>
-        private double ReadJSONDouble()
-        {
-            context.Read();
-            if (reader.Peek() == QUOTE[0])
-            {
-                byte[] arr = ReadJSONString(true);
-                double dub = Double.Parse(utf8Encoding.GetString(arr, 0, arr.Length), CultureInfo.InvariantCulture);
-
-                if (!context.EscapeNumbers() && !Double.IsNaN(dub) && !Double.IsInfinity(dub))
-                {
-                    // Throw exception -- we should not be in a string in this case
-                    throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                                 "Numeric data unexpectedly quoted");
-                }
-                return dub;
-            }
-            else
-            {
-                if (context.EscapeNumbers())
-                {
-                    // This will throw - we should have had a quote if escapeNum == true
-                    ReadJSONSyntaxChar(QUOTE);
-                }
-                try
-                {
-                    return Double.Parse(ReadJSONNumericChars(), CultureInfo.InvariantCulture);
-                }
-                catch (FormatException fex)
-                {
-                    throw new TProtocolException(TProtocolException.INVALID_DATA,
-                                                 "Bad data encounted in numeric data", fex);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Read in a JSON string containing base-64 encoded data and decode it.
-        /// </summary>
-        private byte[] ReadJSONBase64()
-        {
-            byte[] b = ReadJSONString(false);
-            int len = b.Length;
-            int off = 0;
-            int size = 0;
-            // reduce len to ignore fill bytes
-            while ((len > 0) && (b[len - 1] == '='))
-            {
-                --len;
-            }
-            // read & decode full byte triplets = 4 source bytes
-            while (len > 4)
-            {
-                // Decode 4 bytes at a time
-                TBase64Utils.decode(b, off, 4, b, size); // NB: decoded in place
-                off += 4;
-                len -= 4;
-                size += 3;
-            }
-            // Don't decode if we hit the end or got a single leftover byte (invalid
-            // base64 but legal for skip of regular string type)
-            if (len > 1)
-            {
-                // Decode remainder
-                TBase64Utils.decode(b, off, len, b, size); // NB: decoded in place
-                size += len - 1;
-            }
-            // Sadly we must copy the byte[] (any way around this?)
-            byte[] result = new byte[size];
-            Array.Copy(b, 0, result, 0, size);
-            return result;
-        }
-
-        private void ReadJSONObjectStart()
-        {
-            context.Read();
-            ReadJSONSyntaxChar(LBRACE);
-            PushContext(new JSONPairContext(this));
-        }
-
-        private void ReadJSONObjectEnd()
-        {
-            ReadJSONSyntaxChar(RBRACE);
-            PopContext();
-        }
-
-        private void ReadJSONArrayStart()
-        {
-            context.Read();
-            ReadJSONSyntaxChar(LBRACKET);
-            PushContext(new JSONListContext(this));
-        }
-
-        private void ReadJSONArrayEnd()
-        {
-            ReadJSONSyntaxChar(RBRACKET);
-            PopContext();
-        }
-
-        public override TMessage ReadMessageBegin()
-        {
-            TMessage message = new TMessage();
-            ReadJSONArrayStart();
-            if (ReadJSONInteger() != VERSION)
-            {
-                throw new TProtocolException(TProtocolException.BAD_VERSION,
-                                             "Message contained bad version.");
-            }
-
-            var buf = ReadJSONString(false);
-            message.Name = utf8Encoding.GetString(buf, 0, buf.Length);
-            message.Type = (TMessageType)ReadJSONInteger();
-            message.SeqID = (int)ReadJSONInteger();
-            return message;
-        }
-
-        public override void ReadMessageEnd()
-        {
-            ReadJSONArrayEnd();
-        }
-
-        public override TStruct ReadStructBegin()
-        {
-            ReadJSONObjectStart();
-            return new TStruct();
-        }
-
-        public override void ReadStructEnd()
-        {
-            ReadJSONObjectEnd();
-        }
-
-        public override TField ReadFieldBegin()
-        {
-            TField field = new TField();
-            byte ch = reader.Peek();
-            if (ch == RBRACE[0])
-            {
-                field.Type = TType.Stop;
-            }
-            else
-            {
-                field.ID = (short)ReadJSONInteger();
-                ReadJSONObjectStart();
-                field.Type = GetTypeIDForTypeName(ReadJSONString(false));
-            }
-            return field;
-        }
-
-        public override void ReadFieldEnd()
-        {
-            ReadJSONObjectEnd();
-        }
-
-        public override TMap ReadMapBegin()
-        {
-            TMap map = new TMap();
-            ReadJSONArrayStart();
-            map.KeyType = GetTypeIDForTypeName(ReadJSONString(false));
-            map.ValueType = GetTypeIDForTypeName(ReadJSONString(false));
-            map.Count = (int)ReadJSONInteger();
-            ReadJSONObjectStart();
-            return map;
-        }
-
-        public override void ReadMapEnd()
-        {
-            ReadJSONObjectEnd();
-            ReadJSONArrayEnd();
-        }
-
-        public override TList ReadListBegin()
-        {
-            TList list = new TList();
-            ReadJSONArrayStart();
-            list.ElementType = GetTypeIDForTypeName(ReadJSONString(false));
-            list.Count = (int)ReadJSONInteger();
-            return list;
-        }
-
-        public override void ReadListEnd()
-        {
-            ReadJSONArrayEnd();
-        }
-
-        public override TSet ReadSetBegin()
-        {
-            TSet set = new TSet();
-            ReadJSONArrayStart();
-            set.ElementType = GetTypeIDForTypeName(ReadJSONString(false));
-            set.Count = (int)ReadJSONInteger();
-            return set;
-        }
-
-        public override void ReadSetEnd()
-        {
-            ReadJSONArrayEnd();
-        }
-
-        public override bool ReadBool()
-        {
-            return (ReadJSONInteger() == 0 ? false : true);
-        }
-
-        public override sbyte ReadByte()
-        {
-            return (sbyte)ReadJSONInteger();
-        }
-
-        public override short ReadI16()
-        {
-            return (short)ReadJSONInteger();
-        }
-
-        public override int ReadI32()
-        {
-            return (int)ReadJSONInteger();
-        }
-
-        public override long ReadI64()
-        {
-            return (long)ReadJSONInteger();
-        }
-
-        public override double ReadDouble()
-        {
-            return ReadJSONDouble();
-        }
-
-        public override string ReadString()
-        {
-            var buf = ReadJSONString(false);
-            return utf8Encoding.GetString(buf, 0, buf.Length);
-        }
-
-        public override byte[] ReadBinary()
-        {
-            return ReadJSONBase64();
-        }
-
-    }
-}
diff --git a/lib/csharp/src/Protocol/TList.cs b/lib/csharp/src/Protocol/TList.cs
deleted file mode 100644
index 0c8f214..0000000
--- a/lib/csharp/src/Protocol/TList.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
-    public struct TList
-    {
-        private TType elementType;
-        private int count;
-
-        public TList(TType elementType, int count)
-            :this()
-        {
-            this.elementType = elementType;
-            this.count = count;
-        }
-
-        public TType ElementType
-        {
-            get { return elementType; }
-            set { elementType = value; }
-        }
-
-        public int Count
-        {
-            get { return count; }
-            set { count = value; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TMap.cs b/lib/csharp/src/Protocol/TMap.cs
deleted file mode 100644
index aba9d3a..0000000
--- a/lib/csharp/src/Protocol/TMap.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
-    public struct TMap
-    {
-        private TType keyType;
-        private TType valueType;
-        private int count;
-
-        public TMap(TType keyType, TType valueType, int count)
-            :this()
-        {
-            this.keyType = keyType;
-            this.valueType = valueType;
-            this.count = count;
-        }
-
-        public TType KeyType
-        {
-            get { return keyType; }
-            set { keyType = value; }
-        }
-
-        public TType ValueType
-        {
-            get { return valueType; }
-            set { valueType = value; }
-        }
-
-        public int Count
-        {
-            get { return count; }
-            set { count = value; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TMessage.cs b/lib/csharp/src/Protocol/TMessage.cs
deleted file mode 100644
index 348263c..0000000
--- a/lib/csharp/src/Protocol/TMessage.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
-    public struct TMessage
-    {
-        private string name;
-        private TMessageType type;
-        private int seqID;
-
-        public TMessage(string name, TMessageType type, int seqid)
-            :this()
-        {
-            this.name = name;
-            this.type = type;
-            this.seqID = seqid;
-        }
-
-        public string Name
-        {
-            get { return name; }
-            set { name = value; }
-        }
-
-        public TMessageType Type
-        {
-            get { return type; }
-            set { type = value; }
-        }
-
-        public int SeqID
-        {
-            get { return seqID; }
-            set { seqID = value; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TMessageType.cs b/lib/csharp/src/Protocol/TMessageType.cs
deleted file mode 100644
index c7091fe..0000000
--- a/lib/csharp/src/Protocol/TMessageType.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
-    public enum TMessageType
-    {
-        Call = 1,
-        Reply = 2,
-        Exception = 3,
-        Oneway = 4
-    }
-}
diff --git a/lib/csharp/src/Protocol/TMultiplexedProcessor.cs b/lib/csharp/src/Protocol/TMultiplexedProcessor.cs
deleted file mode 100644
index aa91c52..0000000
--- a/lib/csharp/src/Protocol/TMultiplexedProcessor.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections.Generic;
-using System.IO;
-
-namespace Thrift.Protocol
-{
-    /// <summary>
-    /// <see cref="TMultiplexedProcessor"/> is a <see cref="TProcessor"/> allowing a single <see cref="Thrift.Server.TServer"/>
-    /// to provide multiple services.
-    /// <para/>
-    /// To do so, you instantiate the processor and then register additional processors with it,
-    /// as shown in the following example:
-    /// <para/>
-    /// <code>
-    ///     TMultiplexedProcessor processor = new TMultiplexedProcessor();
-    ///
-    ///     processor.registerProcessor(
-    ///         "Calculator",
-    ///         new Calculator.Processor(new CalculatorHandler()));
-    ///
-    ///     processor.registerProcessor(
-    ///         "WeatherReport",
-    ///         new WeatherReport.Processor(new WeatherReportHandler()));
-    ///
-    ///     TServerTransport t = new TServerSocket(9090);
-    ///     TSimpleServer server = new TSimpleServer(processor, t);
-    ///
-    ///     server.serve();
-    /// </code>
-    /// </summary>
-    public class TMultiplexedProcessor : TProcessor
-    {
-        private Dictionary<string, TProcessor> ServiceProcessorMap = new Dictionary<string, TProcessor>();
-
-        /// <summary>
-        /// 'Register' a service with this TMultiplexedProcessor. This allows us to broker
-        /// requests to individual services by using the service name to select them at request time.
-        ///
-        /// Args:
-        /// - serviceName    Name of a service, has to be identical to the name
-        ///                  declared in the Thrift IDL, e.g. "WeatherReport".
-        /// - processor      Implementation of a service, usually referred to as "handlers",
-        ///                  e.g. WeatherReportHandler implementing WeatherReport.Iface.
-        /// </summary>
-        public void RegisterProcessor(string serviceName, TProcessor processor)
-        {
-            ServiceProcessorMap.Add(serviceName, processor);
-        }
-
-
-        private void Fail(TProtocol oprot, TMessage message, TApplicationException.ExceptionType extype, string etxt)
-        {
-            TApplicationException appex = new TApplicationException(extype, etxt);
-
-            TMessage newMessage = new TMessage(message.Name, TMessageType.Exception, message.SeqID);
-
-            oprot.WriteMessageBegin(newMessage);
-            appex.Write(oprot);
-            oprot.WriteMessageEnd();
-            oprot.Transport.Flush();
-        }
-
-
-        /// <summary>
-        /// This implementation of process performs the following steps:
-        ///
-        /// - Read the beginning of the message.
-        /// - Extract the service name from the message.
-        /// - Using the service name to locate the appropriate processor.
-        /// - Dispatch to the processor, with a decorated instance of TProtocol
-        ///    that allows readMessageBegin() to return the original TMessage.
-        /// <para/>
-        /// Throws an exception if
-        /// - the message type is not CALL or ONEWAY,
-        /// - the service name was not found in the message, or
-        /// - the service name has not been RegisterProcessor()ed.
-        /// </summary>
-        public bool Process(TProtocol iprot, TProtocol oprot)
-        {
-            /*  Use the actual underlying protocol (e.g. TBinaryProtocol) to read the
-                message header.  This pulls the message "off the wire", which we'll
-                deal with at the end of this method. */
-
-            try
-            {
-                TMessage message = iprot.ReadMessageBegin();
-
-                if ((message.Type != TMessageType.Call) && (message.Type != TMessageType.Oneway))
-                {
-                    Fail(oprot, message,
-                          TApplicationException.ExceptionType.InvalidMessageType,
-                          "Message type CALL or ONEWAY expected");
-                    return false;
-                }
-
-                // Extract the service name
-                int index = message.Name.IndexOf(TMultiplexedProtocol.SEPARATOR);
-                if (index < 0)
-                {
-                    Fail(oprot, message,
-                          TApplicationException.ExceptionType.InvalidProtocol,
-                          "Service name not found in message name: " + message.Name + ". " +
-                          "Did you forget to use a TMultiplexProtocol in your client?");
-                    return false;
-                }
-
-                // Create a new TMessage, something that can be consumed by any TProtocol
-                string serviceName = message.Name.Substring(0, index);
-                TProcessor actualProcessor;
-                if (!ServiceProcessorMap.TryGetValue(serviceName, out actualProcessor))
-                {
-                    Fail(oprot, message,
-                          TApplicationException.ExceptionType.InternalError,
-                          "Service name not found: " + serviceName + ". " +
-                          "Did you forget to call RegisterProcessor()?");
-                    return false;
-                }
-
-                // Create a new TMessage, removing the service name
-                TMessage newMessage = new TMessage(
-                        message.Name.Substring(serviceName.Length + TMultiplexedProtocol.SEPARATOR.Length),
-                        message.Type,
-                        message.SeqID);
-
-                // Dispatch processing to the stored processor
-                return actualProcessor.Process(new StoredMessageProtocol(iprot, newMessage), oprot);
-
-            }
-            catch (IOException)
-            {
-                return false;  // similar to all other processors
-            }
-
-        }
-
-        /// <summary>
-        ///  Our goal was to work with any protocol.  In order to do that, we needed
-        ///  to allow them to call readMessageBegin() and get a TMessage in exactly
-        ///  the standard format, without the service name prepended to TMessage.name.
-        /// </summary>
-        private class StoredMessageProtocol : TProtocolDecorator
-        {
-            TMessage MsgBegin;
-
-            public StoredMessageProtocol(TProtocol protocol, TMessage messageBegin)
-                : base(protocol)
-            {
-                this.MsgBegin = messageBegin;
-            }
-
-            public override TMessage ReadMessageBegin()
-            {
-                return MsgBegin;
-            }
-        }
-
-    }
-}
diff --git a/lib/csharp/src/Protocol/TMultiplexedProtocol.cs b/lib/csharp/src/Protocol/TMultiplexedProtocol.cs
deleted file mode 100644
index 1bd420f..0000000
--- a/lib/csharp/src/Protocol/TMultiplexedProtocol.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections.Generic;
-
-namespace Thrift.Protocol
-{
-
-    /// <summary>
-    /// TMultiplexedProtocol is a protocol-independent concrete decorator that allows a Thrift
-    /// client to communicate with a multiplexing Thrift server, by prepending the service name
-    /// to the function name during function calls.
-    /// <para/>
-    /// NOTE: THIS IS NOT TO BE USED BY SERVERS.
-    /// On the server, use TMultiplexedProcessor to handle requests from a multiplexing client.
-    /// <para/>
-    /// This example uses a single socket transport to invoke two services:
-    /// <code>
-    ///     TSocket transport = new TSocket("localhost", 9090);
-    ///     transport.open();
-    ///
-    ///     TBinaryProtocol protocol = new TBinaryProtocol(transport);
-    ///
-    ///     TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol, "Calculator");
-    ///     Calculator.Client service = new Calculator.Client(mp);
-    ///
-    ///     TMultiplexedProtocol mp2 = new TMultiplexedProtocol(protocol, "WeatherReport");
-    ///     WeatherReport.Client service2 = new WeatherReport.Client(mp2);
-    ///
-    ///     System.out.println(service.add(2,2));
-    ///     System.out.println(service2.getTemperature());
-    /// </code>
-    /// </summary>
-    public class TMultiplexedProtocol : TProtocolDecorator
-    {
-
-        /// <summary>
-        /// Used to delimit the service name from the function name.
-        /// </summary>
-        public static string SEPARATOR = ":";
-
-        private string ServiceName;
-
-        /// <summary>
-        /// Wrap the specified protocol, allowing it to be used to communicate with a
-        /// multiplexing server.  The <paramref name="serviceName"/> is required as it is
-        /// prepended to the message header so that the multiplexing server can broker
-        /// the function call to the proper service.
-        /// </summary>
-        /// <param name="protocol">Your communication protocol of choice, e.g. <see cref="TBinaryProtocol"/>.</param>
-        /// <param name="serviceName">The service name of the service communicating via this protocol.</param>
-        public TMultiplexedProtocol(TProtocol protocol, string serviceName)
-            : base(protocol)
-        {
-            ServiceName = serviceName;
-        }
-
-        /// <summary>
-        /// Prepends the service name to the function name, separated by TMultiplexedProtocol.SEPARATOR.
-        /// </summary>
-        /// <param name="tMessage">The original message.</param>
-        public override void WriteMessageBegin(TMessage tMessage)
-        {
-            switch (tMessage.Type)
-            {
-                case TMessageType.Call:
-                case TMessageType.Oneway:
-                    base.WriteMessageBegin(new TMessage(
-                        ServiceName + SEPARATOR + tMessage.Name,
-                        tMessage.Type,
-                        tMessage.SeqID));
-                    break;
-
-                default:
-                    base.WriteMessageBegin(tMessage);
-                    break;
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TProtocol.cs b/lib/csharp/src/Protocol/TProtocol.cs
deleted file mode 100644
index dd7a6e0..0000000
--- a/lib/csharp/src/Protocol/TProtocol.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-
-namespace Thrift.Protocol
-{
-    public abstract class TProtocol : IDisposable
-    {
-        private const int DEFAULT_RECURSION_DEPTH = 64;
-
-        protected TTransport trans;
-        protected int recursionLimit;
-        protected int recursionDepth;
-
-        protected TProtocol(TTransport trans)
-        {
-            this.trans = trans;
-            this.recursionLimit = DEFAULT_RECURSION_DEPTH;
-            this.recursionDepth = 0;
-        }
-
-        public TTransport Transport
-        {
-            get { return trans; }
-        }
-
-        public int RecursionLimit
-        {
-            get { return recursionLimit; }
-            set { recursionLimit = value; }
-        }
-
-        public void IncrementRecursionDepth()
-        {
-            if (recursionDepth < recursionLimit)
-                ++recursionDepth;
-            else
-                throw new TProtocolException(TProtocolException.DEPTH_LIMIT, "Depth limit exceeded");
-        }
-
-        public void DecrementRecursionDepth()
-        {
-            --recursionDepth;
-        }
-
-        #region " IDisposable Support "
-        private bool _IsDisposed;
-
-        // IDisposable
-        public void Dispose()
-        {
-            Dispose(true);
-        }
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (trans is IDisposable)
-                        (trans as IDisposable).Dispose();
-                }
-            }
-            _IsDisposed = true;
-        }
-        #endregion
-
-        public abstract void WriteMessageBegin(TMessage message);
-        public abstract void WriteMessageEnd();
-        public abstract void WriteStructBegin(TStruct struc);
-        public abstract void WriteStructEnd();
-        public abstract void WriteFieldBegin(TField field);
-        public abstract void WriteFieldEnd();
-        public abstract void WriteFieldStop();
-        public abstract void WriteMapBegin(TMap map);
-        public abstract void WriteMapEnd();
-        public abstract void WriteListBegin(TList list);
-        public abstract void WriteListEnd();
-        public abstract void WriteSetBegin(TSet set);
-        public abstract void WriteSetEnd();
-        public abstract void WriteBool(bool b);
-        public abstract void WriteByte(sbyte b);
-        public abstract void WriteI16(short i16);
-        public abstract void WriteI32(int i32);
-        public abstract void WriteI64(long i64);
-        public abstract void WriteDouble(double d);
-        public virtual void WriteString(string s)
-        {
-            WriteBinary(Encoding.UTF8.GetBytes(s));
-        }
-        public abstract void WriteBinary(byte[] b);
-
-        public abstract TMessage ReadMessageBegin();
-        public abstract void ReadMessageEnd();
-        public abstract TStruct ReadStructBegin();
-        public abstract void ReadStructEnd();
-        public abstract TField ReadFieldBegin();
-        public abstract void ReadFieldEnd();
-        public abstract TMap ReadMapBegin();
-        public abstract void ReadMapEnd();
-        public abstract TList ReadListBegin();
-        public abstract void ReadListEnd();
-        public abstract TSet ReadSetBegin();
-        public abstract void ReadSetEnd();
-        public abstract bool ReadBool();
-        public abstract sbyte ReadByte();
-        public abstract short ReadI16();
-        public abstract int ReadI32();
-        public abstract long ReadI64();
-        public abstract double ReadDouble();
-        public virtual string ReadString()
-        {
-            var buf = ReadBinary();
-            return Encoding.UTF8.GetString(buf, 0, buf.Length);
-        }
-        public abstract byte[] ReadBinary();
-    }
-}
diff --git a/lib/csharp/src/Protocol/TProtocolDecorator.cs b/lib/csharp/src/Protocol/TProtocolDecorator.cs
deleted file mode 100644
index 8600002..0000000
--- a/lib/csharp/src/Protocol/TProtocolDecorator.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections.Generic;
-
-namespace Thrift.Protocol
-{
-    /// <summary>
-    /// <see cref="TProtocolDecorator"/> forwards all requests to an enclosed <see cref="TProtocol"/> instance,
-    /// providing a way to author concise concrete decorator subclasses. While it has
-    /// no abstract methods, it is marked abstract as a reminder that by itself,
-    /// it does not modify the behaviour of the enclosed <see cref="TProtocol"/>.
-    /// <para/>
-    /// See p.175 of Design Patterns (by Gamma et al.)
-    /// </summary>
-    /// <seealso cref="TMultiplexedProtocol"/>
-    public abstract class TProtocolDecorator : TProtocol
-    {
-        private TProtocol WrappedProtocol;
-
-        /// <summary>
-        /// Encloses the specified protocol.
-        /// </summary>
-        /// <param name="protocol">All operations will be forward to this protocol.  Must be non-null.</param>
-        public TProtocolDecorator(TProtocol protocol)
-            : base(protocol.Transport)
-        {
-
-            WrappedProtocol = protocol;
-        }
-
-        public override void WriteMessageBegin(TMessage tMessage)
-        {
-            WrappedProtocol.WriteMessageBegin(tMessage);
-        }
-
-        public override void WriteMessageEnd()
-        {
-            WrappedProtocol.WriteMessageEnd();
-        }
-
-        public override void WriteStructBegin(TStruct tStruct)
-        {
-            WrappedProtocol.WriteStructBegin(tStruct);
-        }
-
-        public override void WriteStructEnd()
-        {
-            WrappedProtocol.WriteStructEnd();
-        }
-
-        public override void WriteFieldBegin(TField tField)
-        {
-            WrappedProtocol.WriteFieldBegin(tField);
-        }
-
-        public override void WriteFieldEnd()
-        {
-            WrappedProtocol.WriteFieldEnd();
-        }
-
-        public override void WriteFieldStop()
-        {
-            WrappedProtocol.WriteFieldStop();
-        }
-
-        public override void WriteMapBegin(TMap tMap)
-        {
-            WrappedProtocol.WriteMapBegin(tMap);
-        }
-
-        public override void WriteMapEnd()
-        {
-            WrappedProtocol.WriteMapEnd();
-        }
-
-        public override void WriteListBegin(TList tList)
-        {
-            WrappedProtocol.WriteListBegin(tList);
-        }
-
-        public override void WriteListEnd()
-        {
-            WrappedProtocol.WriteListEnd();
-        }
-
-        public override void WriteSetBegin(TSet tSet)
-        {
-            WrappedProtocol.WriteSetBegin(tSet);
-        }
-
-        public override void WriteSetEnd()
-        {
-            WrappedProtocol.WriteSetEnd();
-        }
-
-        public override void WriteBool(bool b)
-        {
-            WrappedProtocol.WriteBool(b);
-        }
-
-        public override void WriteByte(sbyte b)
-        {
-            WrappedProtocol.WriteByte(b);
-        }
-
-        public override void WriteI16(short i)
-        {
-            WrappedProtocol.WriteI16(i);
-        }
-
-        public override void WriteI32(int i)
-        {
-            WrappedProtocol.WriteI32(i);
-        }
-
-        public override void WriteI64(long l)
-        {
-            WrappedProtocol.WriteI64(l);
-        }
-
-        public override void WriteDouble(double v)
-        {
-            WrappedProtocol.WriteDouble(v);
-        }
-
-        public override void WriteString(string s)
-        {
-            WrappedProtocol.WriteString(s);
-        }
-
-        public override void WriteBinary(byte[] bytes)
-        {
-            WrappedProtocol.WriteBinary(bytes);
-        }
-
-        public override TMessage ReadMessageBegin()
-        {
-            return WrappedProtocol.ReadMessageBegin();
-        }
-
-        public override void ReadMessageEnd()
-        {
-            WrappedProtocol.ReadMessageEnd();
-        }
-
-        public override TStruct ReadStructBegin()
-        {
-            return WrappedProtocol.ReadStructBegin();
-        }
-
-        public override void ReadStructEnd()
-        {
-            WrappedProtocol.ReadStructEnd();
-        }
-
-        public override TField ReadFieldBegin()
-        {
-            return WrappedProtocol.ReadFieldBegin();
-        }
-
-        public override void ReadFieldEnd()
-        {
-            WrappedProtocol.ReadFieldEnd();
-        }
-
-        public override TMap ReadMapBegin()
-        {
-            return WrappedProtocol.ReadMapBegin();
-        }
-
-        public override void ReadMapEnd()
-        {
-            WrappedProtocol.ReadMapEnd();
-        }
-
-        public override TList ReadListBegin()
-        {
-            return WrappedProtocol.ReadListBegin();
-        }
-
-        public override void ReadListEnd()
-        {
-            WrappedProtocol.ReadListEnd();
-        }
-
-        public override TSet ReadSetBegin()
-        {
-            return WrappedProtocol.ReadSetBegin();
-        }
-
-        public override void ReadSetEnd()
-        {
-            WrappedProtocol.ReadSetEnd();
-        }
-
-        public override bool ReadBool()
-        {
-            return WrappedProtocol.ReadBool();
-        }
-
-        public override sbyte ReadByte()
-        {
-            return WrappedProtocol.ReadByte();
-        }
-
-        public override short ReadI16()
-        {
-            return WrappedProtocol.ReadI16();
-        }
-
-        public override int ReadI32()
-        {
-            return WrappedProtocol.ReadI32();
-        }
-
-        public override long ReadI64()
-        {
-            return WrappedProtocol.ReadI64();
-        }
-
-        public override double ReadDouble()
-        {
-            return WrappedProtocol.ReadDouble();
-        }
-
-        public override string ReadString()
-        {
-            return WrappedProtocol.ReadString();
-        }
-
-        public override byte[] ReadBinary()
-        {
-            return WrappedProtocol.ReadBinary();
-        }
-    }
-
-}
diff --git a/lib/csharp/src/Protocol/TProtocolException.cs b/lib/csharp/src/Protocol/TProtocolException.cs
deleted file mode 100644
index 7bef236..0000000
--- a/lib/csharp/src/Protocol/TProtocolException.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
-    public class TProtocolException : TException
-    {
-        public const int UNKNOWN = 0;
-        public const int INVALID_DATA = 1;
-        public const int NEGATIVE_SIZE = 2;
-        public const int SIZE_LIMIT = 3;
-        public const int BAD_VERSION = 4;
-        public const int NOT_IMPLEMENTED = 5;
-        public const int DEPTH_LIMIT = 6;
-
-        protected int type_ = UNKNOWN;
-
-        public TProtocolException()
-            : base()
-        {
-        }
-
-        public TProtocolException(int type, Exception inner = null)
-            : base(string.Empty, inner)
-        {
-            type_ = type;
-        }
-
-        public TProtocolException(int type, string message, Exception inner = null)
-            : base(message, inner)
-        {
-            type_ = type;
-        }
-
-        public TProtocolException(string message, Exception inner = null)
-            : base(message, inner)
-        {
-        }
-
-        public int getType()
-        {
-            return type_;
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TProtocolFactory.cs b/lib/csharp/src/Protocol/TProtocolFactory.cs
deleted file mode 100644
index 71360a1..0000000
--- a/lib/csharp/src/Protocol/TProtocolFactory.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Transport;
-
-namespace Thrift.Protocol
-{
-    public interface TProtocolFactory
-    {
-        TProtocol GetProtocol(TTransport trans);
-    }
-}
diff --git a/lib/csharp/src/Protocol/TProtocolUtil.cs b/lib/csharp/src/Protocol/TProtocolUtil.cs
deleted file mode 100644
index d995c6c..0000000
--- a/lib/csharp/src/Protocol/TProtocolUtil.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
-    public static class TProtocolUtil
-    {
-        public static void Skip(TProtocol prot, TType type)
-        {
-            prot.IncrementRecursionDepth();
-            try
-            {
-                switch (type)
-                {
-                    case TType.Bool:
-                        prot.ReadBool();
-                        break;
-                    case TType.Byte:
-                        prot.ReadByte();
-                        break;
-                    case TType.I16:
-                        prot.ReadI16();
-                        break;
-                    case TType.I32:
-                        prot.ReadI32();
-                        break;
-                    case TType.I64:
-                        prot.ReadI64();
-                        break;
-                    case TType.Double:
-                        prot.ReadDouble();
-                        break;
-                    case TType.String:
-                        // Don't try to decode the string, just skip it.
-                        prot.ReadBinary();
-                        break;
-                    case TType.Struct:
-                        prot.ReadStructBegin();
-                        while (true)
-                        {
-                            TField field = prot.ReadFieldBegin();
-                            if (field.Type == TType.Stop)
-                            {
-                                break;
-                            }
-                            Skip(prot, field.Type);
-                            prot.ReadFieldEnd();
-                        }
-                        prot.ReadStructEnd();
-                        break;
-                    case TType.Map:
-                        TMap map = prot.ReadMapBegin();
-                        for (int i = 0; i < map.Count; i++)
-                        {
-                            Skip(prot, map.KeyType);
-                            Skip(prot, map.ValueType);
-                        }
-                        prot.ReadMapEnd();
-                        break;
-                    case TType.Set:
-                        TSet set = prot.ReadSetBegin();
-                        for (int i = 0; i < set.Count; i++)
-                        {
-                            Skip(prot, set.ElementType);
-                        }
-                        prot.ReadSetEnd();
-                        break;
-                    case TType.List:
-                        TList list = prot.ReadListBegin();
-                        for (int i = 0; i < list.Count; i++)
-                        {
-                            Skip(prot, list.ElementType);
-                        }
-                        prot.ReadListEnd();
-                        break;
-                    default:
-                        throw new TProtocolException(TProtocolException.INVALID_DATA, "Unknown data type " + type.ToString("d"));
-                }
-            }
-            finally
-            {
-                prot.DecrementRecursionDepth();
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TSet.cs b/lib/csharp/src/Protocol/TSet.cs
deleted file mode 100644
index a918ab5..0000000
--- a/lib/csharp/src/Protocol/TSet.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
-    public struct TSet
-    {
-        private TType elementType;
-        private int count;
-
-        public TSet(TType elementType, int count)
-            :this()
-        {
-            this.elementType = elementType;
-            this.count = count;
-        }
-
-        public TSet(TList list)
-            : this(list.ElementType, list.Count)
-        {
-        }
-
-        public TType ElementType
-        {
-            get { return elementType; }
-            set { elementType = value; }
-        }
-
-        public int Count
-        {
-            get { return count; }
-            set { count = value; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TStruct.cs b/lib/csharp/src/Protocol/TStruct.cs
deleted file mode 100644
index f4844a4..0000000
--- a/lib/csharp/src/Protocol/TStruct.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
-    public struct TStruct
-    {
-        private string name;
-
-        public TStruct(string name)
-            :this()
-        {
-            this.name = name;
-        }
-
-        public string Name
-        {
-            get { return name; }
-            set { name = value; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Protocol/TType.cs b/lib/csharp/src/Protocol/TType.cs
deleted file mode 100644
index 9ce915e..0000000
--- a/lib/csharp/src/Protocol/TType.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
-    public enum TType : byte
-    {
-        Stop = 0,
-        Void = 1,
-        Bool = 2,
-        Byte = 3,
-        Double = 4,
-        I16 = 6,
-        I32 = 8,
-        I64 = 10,
-        String = 11,
-        Struct = 12,
-        Map = 13,
-        Set = 14,
-        List = 15
-    }
-}
diff --git a/lib/csharp/src/Server/TServer.cs b/lib/csharp/src/Server/TServer.cs
deleted file mode 100644
index 2bc04f3..0000000
--- a/lib/csharp/src/Server/TServer.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Protocol;
-using Thrift.Transport;
-using System.IO;
-
-namespace Thrift.Server
-{
-    public abstract class TServer
-    {
-        //Attributes
-        protected TProcessorFactory processorFactory;
-        protected TServerTransport serverTransport;
-        protected TTransportFactory inputTransportFactory;
-        protected TTransportFactory outputTransportFactory;
-        protected TProtocolFactory inputProtocolFactory;
-        protected TProtocolFactory outputProtocolFactory;
-        protected TServerEventHandler serverEventHandler = null;
-
-        //Methods
-        public void setEventHandler(TServerEventHandler seh)
-        {
-            serverEventHandler = seh;
-        }
-        public TServerEventHandler getEventHandler()
-        {
-            return serverEventHandler;
-        }
-
-        //Log delegation
-        public delegate void LogDelegate(string str);
-        private LogDelegate _logDelegate;
-        protected LogDelegate logDelegate
-        {
-            get { return _logDelegate; }
-            set { _logDelegate = (value != null) ? value : DefaultLogDelegate; }
-        }
-        protected static void DefaultLogDelegate(string s)
-        {
-            Console.Error.WriteLine(s);
-        }
-
-        //Construction
-        public TServer(TProcessor processor,
-                  TServerTransport serverTransport)
-          : this(processor, serverTransport,
-             new TTransportFactory(),
-             new TTransportFactory(),
-             new TBinaryProtocol.Factory(),
-             new TBinaryProtocol.Factory(),
-             DefaultLogDelegate)
-        {
-        }
-
-        public TServer(TProcessor processor,
-                TServerTransport serverTransport,
-                LogDelegate logDelegate)
-          : this(processor,
-             serverTransport,
-             new TTransportFactory(),
-             new TTransportFactory(),
-             new TBinaryProtocol.Factory(),
-             new TBinaryProtocol.Factory(),
-             logDelegate)
-        {
-        }
-
-        public TServer(TProcessor processor,
-                  TServerTransport serverTransport,
-                  TTransportFactory transportFactory)
-          : this(processor,
-             serverTransport,
-             transportFactory,
-             transportFactory,
-             new TBinaryProtocol.Factory(),
-             new TBinaryProtocol.Factory(),
-             DefaultLogDelegate)
-        {
-        }
-
-        public TServer(TProcessor processor,
-                  TServerTransport serverTransport,
-                  TTransportFactory transportFactory,
-                  TProtocolFactory protocolFactory)
-          : this(processor,
-             serverTransport,
-             transportFactory,
-             transportFactory,
-             protocolFactory,
-             protocolFactory,
-               DefaultLogDelegate)
-        {
-        }
-
-        public TServer(TProcessor processor,
-            TServerTransport serverTransport,
-            TTransportFactory inputTransportFactory,
-            TTransportFactory outputTransportFactory,
-            TProtocolFactory inputProtocolFactory,
-            TProtocolFactory outputProtocolFactory,
-            LogDelegate logDelegate)
-        {
-            this.processorFactory = new TSingletonProcessorFactory(processor);
-            this.serverTransport = serverTransport;
-            this.inputTransportFactory = inputTransportFactory;
-            this.outputTransportFactory = outputTransportFactory;
-            this.inputProtocolFactory = inputProtocolFactory;
-            this.outputProtocolFactory = outputProtocolFactory;
-            this.logDelegate = (logDelegate != null) ? logDelegate : DefaultLogDelegate;
-        }
-
-        public TServer(TProcessorFactory processorFactory,
-                  TServerTransport serverTransport,
-                  TTransportFactory inputTransportFactory,
-                  TTransportFactory outputTransportFactory,
-                  TProtocolFactory inputProtocolFactory,
-                  TProtocolFactory outputProtocolFactory,
-                  LogDelegate logDelegate)
-        {
-            this.processorFactory = processorFactory;
-            this.serverTransport = serverTransport;
-            this.inputTransportFactory = inputTransportFactory;
-            this.outputTransportFactory = outputTransportFactory;
-            this.inputProtocolFactory = inputProtocolFactory;
-            this.outputProtocolFactory = outputProtocolFactory;
-            this.logDelegate = (logDelegate != null) ? logDelegate : DefaultLogDelegate;
-        }
-
-        //Abstract Interface
-        public abstract void Serve();
-        public abstract void Stop();
-    }
-}
diff --git a/lib/csharp/src/Server/TServerEventHandler.cs b/lib/csharp/src/Server/TServerEventHandler.cs
deleted file mode 100644
index e81efc6..0000000
--- a/lib/csharp/src/Server/TServerEventHandler.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Server
-{
-    /// <summary>
-    /// Interface implemented by server users to handle events from the server.
-    /// </summary>
-    public interface TServerEventHandler
-    {
-        /// <summary>
-        /// Called before the server begins.
-        /// </summary>
-        void preServe();
-
-        /// <summary>
-        /// Called when a new client has connected and is about to being processing.
-        /// </summary>
-        object createContext(Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output);
-
-        /// <summary>
-        /// Called when a client has finished request-handling to delete server context.
-        /// </summary>
-        void deleteContext(object serverContext, Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output);
-
-        /// <summary>
-        /// Called when a client is about to call the processor.
-        /// </summary>
-        void processContext(object serverContext, Thrift.Transport.TTransport transport);
-    };
-}
diff --git a/lib/csharp/src/Server/TSimpleServer.cs b/lib/csharp/src/Server/TSimpleServer.cs
deleted file mode 100644
index 4e7ea96..0000000
--- a/lib/csharp/src/Server/TSimpleServer.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Transport;
-using Thrift.Protocol;
-
-namespace Thrift.Server
-{
-    /// <summary>
-    /// Simple single-threaded server for testing.
-    /// </summary>
-    public class TSimpleServer : TServer
-    {
-        private bool stop = false;
-
-        public TSimpleServer(TProcessor processor,
-                  TServerTransport serverTransport)
-          : base(processor, serverTransport, new TTransportFactory(), new TTransportFactory(), new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(), DefaultLogDelegate)
-        {
-        }
-
-        public TSimpleServer(TProcessor processor,
-                  TServerTransport serverTransport,
-                  LogDelegate logDel)
-          : base(processor, serverTransport, new TTransportFactory(), new TTransportFactory(), new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(), logDel)
-        {
-        }
-
-        public TSimpleServer(TProcessor processor,
-                  TServerTransport serverTransport,
-                  TTransportFactory transportFactory)
-          : base(processor,
-             serverTransport,
-             transportFactory,
-             transportFactory,
-             new TBinaryProtocol.Factory(),
-             new TBinaryProtocol.Factory(),
-               DefaultLogDelegate)
-        {
-        }
-
-        public TSimpleServer(TProcessor processor,
-            TServerTransport serverTransport,
-            TTransportFactory transportFactory,
-            TProtocolFactory protocolFactory)
-            : base(processor,
-               serverTransport,
-               transportFactory,
-               transportFactory,
-               protocolFactory,
-               protocolFactory,
-               DefaultLogDelegate)
-        {
-        }
-
-        public TSimpleServer(TProcessorFactory processorFactory,
-                  TServerTransport serverTransport,
-                  TTransportFactory transportFactory,
-                  TProtocolFactory protocolFactory)
-          : base(processorFactory,
-             serverTransport,
-             transportFactory,
-             transportFactory,
-             protocolFactory,
-             protocolFactory,
-             DefaultLogDelegate)
-        {
-        }
-
-        public override void Serve()
-        {
-            try
-            {
-                serverTransport.Listen();
-            }
-            catch (TTransportException ttx)
-            {
-                logDelegate(ttx.ToString());
-                return;
-            }
-
-            //Fire the preServe server event when server is up but before any client connections
-            if (serverEventHandler != null)
-                serverEventHandler.preServe();
-
-            while (!stop)
-            {
-                TProcessor processor = null;
-                TTransport client = null;
-                TTransport inputTransport = null;
-                TTransport outputTransport = null;
-                TProtocol inputProtocol = null;
-                TProtocol outputProtocol = null;
-                object connectionContext = null;
-                try
-                {
-                    using (client = serverTransport.Accept())
-                    {
-                        processor = processorFactory.GetProcessor(client);
-                        if (client != null)
-                        {
-                            using (inputTransport = inputTransportFactory.GetTransport(client))
-                            {
-                                using (outputTransport = outputTransportFactory.GetTransport(client))
-                                {
-                                    inputProtocol = inputProtocolFactory.GetProtocol(inputTransport);
-                                    outputProtocol = outputProtocolFactory.GetProtocol(outputTransport);
-
-                                    //Recover event handler (if any) and fire createContext server event when a client connects
-                                    if (serverEventHandler != null)
-                                        connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
-
-                                    //Process client requests until client disconnects
-                                    while (!stop)
-                                    {
-                                        if (!inputTransport.Peek())
-                                            break;
-
-                                        //Fire processContext server event
-                                        //N.B. This is the pattern implemented in C++ and the event fires provisionally.
-                                        //That is to say it may be many minutes between the event firing and the client request
-                                        //actually arriving or the client may hang up without ever makeing a request.
-                                        if (serverEventHandler != null)
-                                            serverEventHandler.processContext(connectionContext, inputTransport);
-                                        //Process client request (blocks until transport is readable)
-                                        if (!processor.Process(inputProtocol, outputProtocol))
-                                            break;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                catch (TTransportException ttx)
-                {
-                    if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
-                    {
-                        logDelegate(ttx.ToString());
-                    }
-                }
-                catch (Exception x)
-                {
-                    //Unexpected
-                    logDelegate(x.ToString());
-                }
-
-                //Fire deleteContext server event after client disconnects
-                if (serverEventHandler != null)
-                    serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
-            }
-        }
-
-        public override void Stop()
-        {
-            stop = true;
-            serverTransport.Close();
-        }
-    }
-}
diff --git a/lib/csharp/src/Server/TThreadPoolServer.cs b/lib/csharp/src/Server/TThreadPoolServer.cs
deleted file mode 100644
index a494ce7..0000000
--- a/lib/csharp/src/Server/TThreadPoolServer.cs
+++ /dev/null
@@ -1,295 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Threading;
-using Thrift.Protocol;
-using Thrift.Transport;
-
-namespace Thrift.Server
-{
-    /// <summary>
-    /// Server that uses C# built-in ThreadPool to spawn threads when handling requests.
-    /// </summary>
-    public class TThreadPoolServer : TServer
-    {
-        private const int DEFAULT_MIN_THREADS = -1;  // use .NET ThreadPool defaults
-        private const int DEFAULT_MAX_THREADS = -1;  // use .NET ThreadPool defaults
-        private volatile bool stop = false;
-
-        public struct Configuration
-        {
-            public int MinWorkerThreads;
-            public int MaxWorkerThreads;
-            public int MinIOThreads;
-            public int MaxIOThreads;
-
-            public Configuration(int min = DEFAULT_MIN_THREADS, int max = DEFAULT_MAX_THREADS)
-            {
-                MinWorkerThreads = min;
-                MaxWorkerThreads = max;
-                MinIOThreads = min;
-                MaxIOThreads = max;
-            }
-
-            public Configuration(int minWork, int maxWork, int minIO, int maxIO)
-            {
-                MinWorkerThreads = minWork;
-                MaxWorkerThreads = maxWork;
-                MinIOThreads = minIO;
-                MaxIOThreads = maxIO;
-            }
-        }
-
-        public TThreadPoolServer(TProcessor processor, TServerTransport serverTransport)
-            : this(new TSingletonProcessorFactory(processor), serverTransport,
-             new TTransportFactory(), new TTransportFactory(),
-             new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
-             new Configuration(), DefaultLogDelegate)
-        {
-        }
-
-        public TThreadPoolServer(TProcessor processor, TServerTransport serverTransport, LogDelegate logDelegate)
-            : this(new TSingletonProcessorFactory(processor), serverTransport,
-             new TTransportFactory(), new TTransportFactory(),
-             new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
-             new Configuration(), logDelegate)
-        {
-        }
-
-        public TThreadPoolServer(TProcessor processor,
-         TServerTransport serverTransport,
-         TTransportFactory transportFactory,
-         TProtocolFactory protocolFactory)
-            : this(new TSingletonProcessorFactory(processor), serverTransport,
-               transportFactory, transportFactory,
-               protocolFactory, protocolFactory,
-               new Configuration(), DefaultLogDelegate)
-        {
-        }
-
-        public TThreadPoolServer(TProcessorFactory processorFactory,
-                     TServerTransport serverTransport,
-                     TTransportFactory transportFactory,
-                     TProtocolFactory protocolFactory)
-            : this(processorFactory, serverTransport,
-             transportFactory, transportFactory,
-             protocolFactory, protocolFactory,
-             new Configuration(), DefaultLogDelegate)
-        {
-        }
-
-        public TThreadPoolServer(TProcessorFactory processorFactory,
-                     TServerTransport serverTransport,
-                     TTransportFactory inputTransportFactory,
-                     TTransportFactory outputTransportFactory,
-                     TProtocolFactory inputProtocolFactory,
-                     TProtocolFactory outputProtocolFactory,
-                     int minThreadPoolThreads, int maxThreadPoolThreads, LogDelegate logDel)
-            : this(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
-             inputProtocolFactory, outputProtocolFactory,
-             new Configuration(minThreadPoolThreads, maxThreadPoolThreads),
-             logDel)
-        {
-        }
-
-        public TThreadPoolServer(TProcessorFactory processorFactory,
-                     TServerTransport serverTransport,
-                     TTransportFactory inputTransportFactory,
-                     TTransportFactory outputTransportFactory,
-                     TProtocolFactory inputProtocolFactory,
-                     TProtocolFactory outputProtocolFactory,
-                     Configuration threadConfig,
-                     LogDelegate logDel)
-            : base(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
-            inputProtocolFactory, outputProtocolFactory, logDel)
-        {
-            lock (typeof(TThreadPoolServer))
-            {
-                if ((threadConfig.MaxWorkerThreads > 0) || (threadConfig.MaxIOThreads > 0))
-                {
-                    int work, comm;
-                    ThreadPool.GetMaxThreads(out work, out comm);
-                    if (threadConfig.MaxWorkerThreads > 0)
-                        work = threadConfig.MaxWorkerThreads;
-                    if (threadConfig.MaxIOThreads > 0)
-                        comm = threadConfig.MaxIOThreads;
-                    if (!ThreadPool.SetMaxThreads(work, comm))
-                        throw new Exception("Error: could not SetMaxThreads in ThreadPool");
-                }
-
-                if ((threadConfig.MinWorkerThreads > 0) || (threadConfig.MinIOThreads > 0))
-                {
-                    int work, comm;
-                    ThreadPool.GetMinThreads(out work, out comm);
-                    if (threadConfig.MinWorkerThreads > 0)
-                        work = threadConfig.MinWorkerThreads;
-                    if (threadConfig.MinIOThreads > 0)
-                        comm = threadConfig.MinIOThreads;
-                    if (!ThreadPool.SetMinThreads(work, comm))
-                        throw new Exception("Error: could not SetMinThreads in ThreadPool");
-                }
-            }
-        }
-
-
-        /// <summary>
-        /// Use new ThreadPool thread for each new client connection.
-        /// </summary>
-        public override void Serve()
-        {
-            try
-            {
-                serverTransport.Listen();
-            }
-            catch (TTransportException ttx)
-            {
-                logDelegate("Error, could not listen on ServerTransport: " + ttx);
-                return;
-            }
-
-            //Fire the preServe server event when server is up but before any client connections
-            if (serverEventHandler != null)
-                serverEventHandler.preServe();
-
-            while (!stop)
-            {
-                int failureCount = 0;
-                try
-                {
-                    TTransport client = serverTransport.Accept();
-                    ThreadPool.QueueUserWorkItem(this.Execute, client);
-                }
-                catch (TTransportException ttx)
-                {
-                    if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
-                    {
-                        ++failureCount;
-                        logDelegate(ttx.ToString());
-                    }
-
-                }
-            }
-
-            if (stop)
-            {
-                try
-                {
-                    serverTransport.Close();
-                }
-                catch (TTransportException ttx)
-                {
-                    logDelegate("TServerTransport failed on close: " + ttx.Message);
-                }
-                stop = false;
-            }
-        }
-
-        /// <summary>
-        /// Loops on processing a client forever
-        /// threadContext will be a TTransport instance
-        /// </summary>
-        /// <param name="threadContext"></param>
-        private void Execute(object threadContext)
-        {
-            using (TTransport client = (TTransport)threadContext)
-            {
-                TProcessor processor = processorFactory.GetProcessor(client, this);
-                TTransport inputTransport = null;
-                TTransport outputTransport = null;
-                TProtocol inputProtocol = null;
-                TProtocol outputProtocol = null;
-                object connectionContext = null;
-                try
-                {
-                    try
-                    {
-                        inputTransport = inputTransportFactory.GetTransport(client);
-                        outputTransport = outputTransportFactory.GetTransport(client);
-                        inputProtocol = inputProtocolFactory.GetProtocol(inputTransport);
-                        outputProtocol = outputProtocolFactory.GetProtocol(outputTransport);
-
-                        //Recover event handler (if any) and fire createContext server event when a client connects
-                        if (serverEventHandler != null)
-                            connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
-
-                        //Process client requests until client disconnects
-                        while (!stop)
-                        {
-                            if (!inputTransport.Peek())
-                                break;
-
-                            //Fire processContext server event
-                            //N.B. This is the pattern implemented in C++ and the event fires provisionally.
-                            //That is to say it may be many minutes between the event firing and the client request
-                            //actually arriving or the client may hang up without ever makeing a request.
-                            if (serverEventHandler != null)
-                                serverEventHandler.processContext(connectionContext, inputTransport);
-                            //Process client request (blocks until transport is readable)
-                            if (!processor.Process(inputProtocol, outputProtocol))
-                                break;
-                        }
-                    }
-                    catch (TTransportException)
-                    {
-                        //Usually a client disconnect, expected
-                    }
-                    catch (Exception x)
-                    {
-                        //Unexpected
-                        logDelegate("Error: " + x);
-                    }
-
-                    //Fire deleteContext server event after client disconnects
-                    if (serverEventHandler != null)
-                        serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
-
-                }
-                finally
-                {
-                    //Close transports
-                    if (inputTransport != null)
-                        inputTransport.Close();
-                    if (outputTransport != null)
-                        outputTransport.Close();
-
-                    // disposable stuff should be disposed
-                    if (inputProtocol != null)
-                        inputProtocol.Dispose();
-                    if (outputProtocol != null)
-                        outputProtocol.Dispose();
-                    if (inputTransport != null)
-                        inputTransport.Dispose();
-                    if (outputTransport != null)
-                        outputTransport.Dispose();
-                }
-            }
-        }
-
-        public override void Stop()
-        {
-            stop = true;
-            serverTransport.Close();
-        }
-    }
-}
diff --git a/lib/csharp/src/Server/TThreadedServer.cs b/lib/csharp/src/Server/TThreadedServer.cs
deleted file mode 100644
index cc051a3..0000000
--- a/lib/csharp/src/Server/TThreadedServer.cs
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using Thrift.Collections;
-using Thrift.Protocol;
-using Thrift.Transport;
-
-namespace Thrift.Server
-{
-    /// <summary>
-    /// Server that uses C# threads (as opposed to the ThreadPool) when handling requests.
-    /// </summary>
-    public class TThreadedServer : TServer
-    {
-        private const int DEFAULT_MAX_THREADS = 100;
-        private volatile bool stop = false;
-        private readonly int maxThreads;
-
-        private Queue<TTransport> clientQueue;
-        private THashSet<Thread> clientThreads;
-        private object clientLock;
-        private Thread workerThread;
-
-        public int ClientThreadsCount
-        {
-            get { return clientThreads.Count; }
-        }
-
-        public TThreadedServer(TProcessor processor, TServerTransport serverTransport)
-            : this(new TSingletonProcessorFactory(processor), serverTransport,
-             new TTransportFactory(), new TTransportFactory(),
-             new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
-             DEFAULT_MAX_THREADS, DefaultLogDelegate)
-        {
-        }
-
-        public TThreadedServer(TProcessor processor, TServerTransport serverTransport, LogDelegate logDelegate)
-            : this(new TSingletonProcessorFactory(processor), serverTransport,
-             new TTransportFactory(), new TTransportFactory(),
-             new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
-             DEFAULT_MAX_THREADS, logDelegate)
-        {
-        }
-
-
-        public TThreadedServer(TProcessor processor,
-                     TServerTransport serverTransport,
-                     TTransportFactory transportFactory,
-                     TProtocolFactory protocolFactory)
-            : this(new TSingletonProcessorFactory(processor), serverTransport,
-             transportFactory, transportFactory,
-             protocolFactory, protocolFactory,
-             DEFAULT_MAX_THREADS, DefaultLogDelegate)
-        {
-        }
-
-        public TThreadedServer(TProcessorFactory processorFactory,
-               TServerTransport serverTransport,
-               TTransportFactory transportFactory,
-               TProtocolFactory protocolFactory)
-            : this(processorFactory, serverTransport,
-             transportFactory, transportFactory,
-             protocolFactory, protocolFactory,
-             DEFAULT_MAX_THREADS, DefaultLogDelegate)
-        {
-        }
-        public TThreadedServer(TProcessorFactory processorFactory,
-                     TServerTransport serverTransport,
-                     TTransportFactory inputTransportFactory,
-                     TTransportFactory outputTransportFactory,
-                     TProtocolFactory inputProtocolFactory,
-                     TProtocolFactory outputProtocolFactory,
-                     int maxThreads, LogDelegate logDel)
-          : base(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
-              inputProtocolFactory, outputProtocolFactory, logDel)
-        {
-            this.maxThreads = maxThreads;
-            clientQueue = new Queue<TTransport>();
-            clientLock = new object();
-            clientThreads = new THashSet<Thread>();
-        }
-
-        /// <summary>
-        /// Use new Thread for each new client connection. block until numConnections &lt; maxThreads.
-        /// </summary>
-        public override void Serve()
-        {
-            try
-            {
-                //start worker thread
-                workerThread = new Thread(new ThreadStart(Execute));
-                workerThread.Start();
-                serverTransport.Listen();
-            }
-            catch (TTransportException ttx)
-            {
-                logDelegate("Error, could not listen on ServerTransport: " + ttx);
-                return;
-            }
-
-            //Fire the preServe server event when server is up but before any client connections
-            if (serverEventHandler != null)
-                serverEventHandler.preServe();
-
-            while (!stop)
-            {
-                int failureCount = 0;
-                try
-                {
-                    TTransport client = serverTransport.Accept();
-                    lock (clientLock)
-                    {
-                        clientQueue.Enqueue(client);
-                        Monitor.Pulse(clientLock);
-                    }
-                }
-                catch (TTransportException ttx)
-                {
-                    if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
-                    {
-                        ++failureCount;
-                        logDelegate(ttx.ToString());
-                    }
-
-                }
-            }
-
-            if (stop)
-            {
-                try
-                {
-                    serverTransport.Close();
-                }
-                catch (TTransportException ttx)
-                {
-                    logDelegate("TServeTransport failed on close: " + ttx.Message);
-                }
-                stop = false;
-            }
-        }
-
-        /// <summary>
-        /// Loops on processing a client forever
-        /// </summary>
-        private void Execute()
-        {
-            while (!stop)
-            {
-                TTransport client;
-                Thread t;
-                lock (clientLock)
-                {
-                    //don't dequeue if too many connections
-                    while (clientThreads.Count >= maxThreads)
-                    {
-                        Monitor.Wait(clientLock);
-                    }
-
-                    while (clientQueue.Count == 0)
-                    {
-                        Monitor.Wait(clientLock);
-                    }
-
-                    client = clientQueue.Dequeue();
-                    t = new Thread(new ParameterizedThreadStart(ClientWorker));
-                    clientThreads.Add(t);
-                }
-                //start processing requests from client on new thread
-                t.Start(client);
-            }
-        }
-
-        private void ClientWorker(object context)
-        {
-            using (TTransport client = (TTransport)context)
-            {
-                TProcessor processor = processorFactory.GetProcessor(client);
-                TTransport inputTransport = null;
-                TTransport outputTransport = null;
-                TProtocol inputProtocol = null;
-                TProtocol outputProtocol = null;
-                object connectionContext = null;
-                try
-                {
-                    try
-                    {
-                        inputTransport = inputTransportFactory.GetTransport(client);
-                        outputTransport = outputTransportFactory.GetTransport(client);
-                        inputProtocol = inputProtocolFactory.GetProtocol(inputTransport);
-                        outputProtocol = outputProtocolFactory.GetProtocol(outputTransport);
-
-                        //Recover event handler (if any) and fire createContext server event when a client connects
-                        if (serverEventHandler != null)
-                            connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
-
-                        //Process client requests until client disconnects
-                        while (!stop)
-                        {
-                            if (!inputTransport.Peek())
-                                break;
-
-                            //Fire processContext server event
-                            //N.B. This is the pattern implemented in C++ and the event fires provisionally.
-                            //That is to say it may be many minutes between the event firing and the client request
-                            //actually arriving or the client may hang up without ever makeing a request.
-                            if (serverEventHandler != null)
-                                serverEventHandler.processContext(connectionContext, inputTransport);
-                            //Process client request (blocks until transport is readable)
-                            if (!processor.Process(inputProtocol, outputProtocol))
-                                break;
-                        }
-                    }
-                    catch (TTransportException)
-                    {
-                        //Usually a client disconnect, expected
-                    }
-                    catch (Exception x)
-                    {
-                        //Unexpected
-                        logDelegate("Error: " + x);
-                    }
-
-                    //Fire deleteContext server event after client disconnects
-                    if (serverEventHandler != null)
-                        serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
-
-                    lock (clientLock)
-                    {
-                        clientThreads.Remove(Thread.CurrentThread);
-                        Monitor.Pulse(clientLock);
-                    }
-
-                }
-                finally
-                {
-                    //Close transports
-                    if (inputTransport != null)
-                        inputTransport.Close();
-                    if (outputTransport != null)
-                        outputTransport.Close();
-
-                    // disposable stuff should be disposed
-                    if (inputProtocol != null)
-                        inputProtocol.Dispose();
-                    if (outputProtocol != null)
-                        outputProtocol.Dispose();
-                }
-            }
-        }
-
-        public override void Stop()
-        {
-            stop = true;
-            serverTransport.Close();
-            //clean up all the threads myself
-            workerThread.Abort();
-            foreach (Thread t in clientThreads)
-            {
-                t.Abort();
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/TApplicationException.cs b/lib/csharp/src/TApplicationException.cs
deleted file mode 100644
index 8dd7ae5..0000000
--- a/lib/csharp/src/TApplicationException.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Protocol;
-
-namespace Thrift
-{
-    public class TApplicationException : TException
-    {
-        protected ExceptionType type;
-
-        public TApplicationException()
-        {
-        }
-
-        public TApplicationException(ExceptionType type)
-        {
-            this.type = type;
-        }
-
-        public TApplicationException(ExceptionType type, string message)
-            : base(message, null) // TApplicationException is serializable, but we never serialize InnerException
-        {
-            this.type = type;
-        }
-
-        public static TApplicationException Read(TProtocol iprot)
-        {
-            TField field;
-
-            string message = null;
-            ExceptionType type = ExceptionType.Unknown;
-
-            iprot.ReadStructBegin();
-            while (true)
-            {
-                field = iprot.ReadFieldBegin();
-                if (field.Type == TType.Stop)
-                {
-                    break;
-                }
-
-                switch (field.ID)
-                {
-                    case 1:
-                        if (field.Type == TType.String)
-                        {
-                            message = iprot.ReadString();
-                        }
-                        else
-                        {
-                            TProtocolUtil.Skip(iprot, field.Type);
-                        }
-                        break;
-                    case 2:
-                        if (field.Type == TType.I32)
-                        {
-                            type = (ExceptionType)iprot.ReadI32();
-                        }
-                        else
-                        {
-                            TProtocolUtil.Skip(iprot, field.Type);
-                        }
-                        break;
-                    default:
-                        TProtocolUtil.Skip(iprot, field.Type);
-                        break;
-                }
-
-                iprot.ReadFieldEnd();
-            }
-
-            iprot.ReadStructEnd();
-
-            return new TApplicationException(type, message);
-        }
-
-        public void Write(TProtocol oprot)
-        {
-            TStruct struc = new TStruct("TApplicationException");
-            TField field = new TField();
-
-            oprot.WriteStructBegin(struc);
-
-            if (!string.IsNullOrEmpty(Message))
-            {
-                field.Name = "message";
-                field.Type = TType.String;
-                field.ID = 1;
-                oprot.WriteFieldBegin(field);
-                oprot.WriteString(Message);
-                oprot.WriteFieldEnd();
-            }
-
-            field.Name = "type";
-            field.Type = TType.I32;
-            field.ID = 2;
-            oprot.WriteFieldBegin(field);
-            oprot.WriteI32((int)type);
-            oprot.WriteFieldEnd();
-            oprot.WriteFieldStop();
-            oprot.WriteStructEnd();
-        }
-
-        public enum ExceptionType
-        {
-            Unknown,
-            UnknownMethod,
-            InvalidMessageType,
-            WrongMethodName,
-            BadSequenceID,
-            MissingResult,
-            InternalError,
-            ProtocolError,
-            InvalidTransform,
-            InvalidProtocol,
-            UnsupportedClientType
-        }
-
-        public ExceptionType Type
-        {
-            get { return type; }
-        }
-    }
-}
diff --git a/lib/csharp/src/TAsyncProcessor.cs b/lib/csharp/src/TAsyncProcessor.cs
deleted file mode 100644
index ab43225..0000000
--- a/lib/csharp/src/TAsyncProcessor.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Threading.Tasks;
-using Thrift.Protocol;
-
-namespace Thrift
-{
-    /// <summary>
-    /// Processes a message asynchronously.
-    /// </summary>
-    public interface TAsyncProcessor
-    {
-        /// <summary>
-        /// Processes the next part of the message.
-        /// </summary>
-        /// <param name="iprot">The input protocol.</param>
-        /// <param name="oprot">The output protocol.</param>
-        /// <returns>true if there's more to process, false otherwise.</returns>
-        Task<bool> ProcessAsync(TProtocol iprot, TProtocol oprot);
-    }
-}
diff --git a/lib/csharp/src/TControllingHandler.cs b/lib/csharp/src/TControllingHandler.cs
deleted file mode 100644
index 7b5203a..0000000
--- a/lib/csharp/src/TControllingHandler.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using Thrift.Server;
-
-namespace Thrift
-{
-    public interface TControllingHandler
-    {
-        TServer server { get; set; }
-    }
-}
diff --git a/lib/csharp/src/TException.cs b/lib/csharp/src/TException.cs
deleted file mode 100644
index b9fae6e..0000000
--- a/lib/csharp/src/TException.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift
-{
-    public class TException : Exception
-    {
-        public TException()
-        {
-        }
-
-        public TException(string message, Exception inner = null)
-            : base(message, inner)
-        {
-        }
-
-    }
-}
diff --git a/lib/csharp/src/TProcessor.cs b/lib/csharp/src/TProcessor.cs
deleted file mode 100644
index 71ce755..0000000
--- a/lib/csharp/src/TProcessor.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Protocol;
-
-namespace Thrift
-{
-    public interface TProcessor
-    {
-        bool Process(TProtocol iprot, TProtocol oprot);
-    }
-}
diff --git a/lib/csharp/src/TProcessorFactory.cs b/lib/csharp/src/TProcessorFactory.cs
deleted file mode 100644
index fdf631b..0000000
--- a/lib/csharp/src/TProcessorFactory.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using Thrift.Server;
-using Thrift.Transport;
-
-namespace Thrift
-{
-    public interface TProcessorFactory
-    {
-        TProcessor GetProcessor(TTransport trans, TServer server = null);
-    }
-}
diff --git a/lib/csharp/src/TPrototypeProcessorFactory.cs b/lib/csharp/src/TPrototypeProcessorFactory.cs
deleted file mode 100644
index 0b47261..0000000
--- a/lib/csharp/src/TPrototypeProcessorFactory.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Thrift.Server;
-using Thrift.Transport;
-
-namespace Thrift
-{
-    public class TPrototypeProcessorFactory<P, H> : TProcessorFactory where P : TProcessor
-    {
-        object[] handlerArgs = null;
-
-        public TPrototypeProcessorFactory()
-        {
-            handlerArgs = new object[0];
-        }
-
-        public TPrototypeProcessorFactory(params object[] handlerArgs)
-        {
-            this.handlerArgs = handlerArgs;
-        }
-
-        public TProcessor GetProcessor(TTransport trans, TServer server = null)
-        {
-            H handler = (H)Activator.CreateInstance(typeof(H), handlerArgs);
-
-            TControllingHandler handlerServerRef = handler as TControllingHandler;
-            if (handlerServerRef != null)
-            {
-                handlerServerRef.server = server;
-            }
-            return Activator.CreateInstance(typeof(P), new object[] { handler }) as TProcessor;
-        }
-    }
-}
diff --git a/lib/csharp/src/TSingletonProcessorFactory.cs b/lib/csharp/src/TSingletonProcessorFactory.cs
deleted file mode 100644
index ed2897b..0000000
--- a/lib/csharp/src/TSingletonProcessorFactory.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Thrift.Server;
-using Thrift.Transport;
-
-namespace Thrift
-{
-    public class TSingletonProcessorFactory : TProcessorFactory
-    {
-        private readonly TProcessor processor_;
-
-        public TSingletonProcessorFactory(TProcessor processor)
-        {
-            processor_ = processor;
-        }
-
-        public TProcessor GetProcessor(TTransport trans, TServer server = null)
-        {
-            return processor_;
-        }
-    }
-}
diff --git a/lib/csharp/src/Thrift.45.csproj b/lib/csharp/src/Thrift.45.csproj
deleted file mode 100644
index 146e7f8..0000000
--- a/lib/csharp/src/Thrift.45.csproj
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{EBCE35DA-CF6A-42BC-A357-A9C09B534299}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Thrift</RootNamespace>
-    <AssemblyName>Thrift45</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>portable</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;NET45</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>portable</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE;NET45</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>true</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>thrift.snk</AssemblyOriginatorKeyFile>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Web" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Collections\TCollections.cs" />
-    <Compile Include="Collections\THashSet.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Protocol\TAbstractBase.cs" />
-    <Compile Include="Protocol\TBase.cs" />
-    <Compile Include="Protocol\TBase64Utils.cs" />
-    <Compile Include="Protocol\TBinaryProtocol.cs" />
-    <Compile Include="Protocol\TCompactProtocol.cs" />
-    <Compile Include="Protocol\TField.cs" />
-    <Compile Include="Protocol\TJSONProtocol.cs" />
-    <Compile Include="Protocol\TList.cs" />
-    <Compile Include="Protocol\TMap.cs" />
-    <Compile Include="Protocol\TMessage.cs" />
-    <Compile Include="Protocol\TMessageType.cs" />
-    <Compile Include="Protocol\TMultiplexedProcessor.cs" />
-    <Compile Include="Protocol\TMultiplexedProtocol.cs" />
-    <Compile Include="Protocol\TProtocol.cs" />
-    <Compile Include="Protocol\TProtocolDecorator.cs" />
-    <Compile Include="Protocol\TProtocolException.cs" />
-    <Compile Include="Protocol\TProtocolFactory.cs" />
-    <Compile Include="Protocol\TProtocolUtil.cs" />
-    <Compile Include="Protocol\TSet.cs" />
-    <Compile Include="Protocol\TStruct.cs" />
-    <Compile Include="Protocol\TType.cs" />
-    <Compile Include="Server\TServer.cs" />
-    <Compile Include="Server\TServerEventHandler.cs" />
-    <Compile Include="Server\TSimpleServer.cs" />
-    <Compile Include="Server\TThreadedServer.cs" />
-    <Compile Include="Server\TThreadPoolServer.cs" />
-    <Compile Include="TApplicationException.cs" />
-    <Compile Include="TAsyncProcessor.cs" />
-    <Compile Include="TControllingHandler.cs" />
-    <Compile Include="TException.cs" />
-    <Compile Include="TProcessor.cs" />
-    <Compile Include="TProcessorFactory.cs" />
-    <Compile Include="TPrototypeProcessorFactory.cs" />
-    <Compile Include="Transport\TBufferedTransport.cs" />
-    <Compile Include="Transport\TFramedTransport.cs" />
-    <Compile Include="Transport\THttpClient.cs" />
-    <Compile Include="Transport\THttpHandler.cs" />
-    <Compile Include="Transport\THttpTaskAsyncHandler.cs" />
-    <Compile Include="Transport\TMemoryBuffer.cs" />
-    <Compile Include="Transport\TNamedPipeClientTransport.cs" />
-    <Compile Include="Transport\TNamedPipeServerTransport.cs" />
-    <Compile Include="Transport\TServerSocket.cs" />
-    <Compile Include="Transport\TServerTransport.cs" />
-    <Compile Include="Transport\TSilverlightSocket.cs" />
-    <Compile Include="Transport\TSocket.cs" />
-    <Compile Include="Transport\TSocketVersionizer.cs" />
-    <Compile Include="Transport\TStreamTransport.cs" />
-    <Compile Include="Transport\TTLSServerSocket.cs" />
-    <Compile Include="Transport\TTLSSocket.cs" />
-    <Compile Include="Transport\TTransport.cs" />
-    <Compile Include="Transport\TTransportException.cs" />
-    <Compile Include="Transport\TTransportFactory.cs" />
-    <Compile Include="TSingletonProcessorFactory.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Server\Collections\" />
-    <Folder Include="Server\Protocol\" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="thrift.snk" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/lib/csharp/src/Thrift.csproj b/lib/csharp/src/Thrift.csproj
deleted file mode 100644
index 1305482..0000000
--- a/lib/csharp/src/Thrift.csproj
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</ProjectGuid>
-    <ProductVersion>9.0.21022</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <OutputType>Library</OutputType>
-    <NoStandardLibraries>false</NoStandardLibraries>
-    <AssemblyName>Thrift</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <RootNamespace>Thrift</RootNamespace>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>0.14.0.0</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>portable</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>portable</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>
-    </DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>true</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>thrift.snk</AssemblyOriginatorKeyFile>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Web" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Collections\TCollections.cs" />
-    <Compile Include="Collections\THashSet.cs" />
-    <Compile Include="Net35\ExtensionsNet35.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Protocol\TAbstractBase.cs" />
-    <Compile Include="Protocol\TBase.cs" />
-    <Compile Include="Protocol\TBase64Utils.cs" />
-    <Compile Include="Protocol\TBinaryProtocol.cs" />
-    <Compile Include="Protocol\TCompactProtocol.cs" />
-    <Compile Include="Protocol\TField.cs" />
-    <Compile Include="Protocol\TJSONProtocol.cs" />
-    <Compile Include="Protocol\TList.cs" />
-    <Compile Include="Protocol\TMap.cs" />
-    <Compile Include="Protocol\TMessage.cs" />
-    <Compile Include="Protocol\TMessageType.cs" />
-    <Compile Include="Protocol\TMultiplexedProcessor.cs" />
-    <Compile Include="Protocol\TMultiplexedProtocol.cs" />
-    <Compile Include="Protocol\TProtocol.cs" />
-    <Compile Include="Protocol\TProtocolDecorator.cs" />
-    <Compile Include="Protocol\TProtocolException.cs" />
-    <Compile Include="Protocol\TProtocolFactory.cs" />
-    <Compile Include="Protocol\TProtocolUtil.cs" />
-    <Compile Include="Protocol\TSet.cs" />
-    <Compile Include="Protocol\TStruct.cs" />
-    <Compile Include="Protocol\TType.cs" />
-    <Compile Include="Server\TServer.cs" />
-    <Compile Include="Server\TServerEventHandler.cs" />
-    <Compile Include="Server\TSimpleServer.cs" />
-    <Compile Include="Server\TThreadedServer.cs" />
-    <Compile Include="Server\TThreadPoolServer.cs" />
-    <Compile Include="TApplicationException.cs" />
-    <Compile Include="TControllingHandler.cs" />
-    <Compile Include="TException.cs" />
-    <Compile Include="TProcessor.cs" />
-    <Compile Include="TProcessorFactory.cs" />
-    <Compile Include="TPrototypeProcessorFactory.cs" />
-    <Compile Include="Transport\TBufferedTransport.cs" />
-    <Compile Include="Transport\TFramedTransport.cs" />
-    <Compile Include="Transport\THttpClient.cs" />
-    <Compile Include="Transport\THttpHandler.cs" />
-    <Compile Include="Transport\TMemoryBuffer.cs" />
-    <Compile Include="Transport\TNamedPipeClientTransport.cs" />
-    <Compile Include="Transport\TNamedPipeServerTransport.cs" />
-    <Compile Include="Transport\TServerSocket.cs" />
-    <Compile Include="Transport\TServerTransport.cs" />
-    <Compile Include="Transport\TSocket.cs" />
-    <Compile Include="Transport\TSocketVersionizer.cs" />
-    <Compile Include="Transport\TStreamTransport.cs" />
-    <Compile Include="Transport\TTLSServerSocket.cs" />
-    <Compile Include="Transport\TTLSSocket.cs" />
-    <Compile Include="Transport\TTransport.cs" />
-    <Compile Include="Transport\TTransportException.cs" />
-    <Compile Include="Transport\TTransportFactory.cs" />
-    <Compile Include="TSingletonProcessorFactory.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="thrift.snk" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
-  <ProjectExtensions>
-    <VisualStudio AllowExistingFolder="true" />
-  </ProjectExtensions>
-</Project>
\ No newline at end of file
diff --git a/lib/csharp/src/Thrift.sln b/lib/csharp/src/Thrift.sln
deleted file mode 100644
index a29e468..0000000
--- a/lib/csharp/src/Thrift.sln
+++ /dev/null
@@ -1,47 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift", "Thrift.csproj", "{499EB63C-D74C-47E8-AE48-A2FC94538E9D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftTest", "..\test\ThriftTest\ThriftTest.csproj", "{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftMSBuildTask", "..\ThriftMSBuildTask\ThriftMSBuildTask.csproj", "{EC0A0231-66EA-4593-A792-C6CA3BB8668E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift.45", "Thrift.45.csproj", "{EBCE35DA-CF6A-42BC-A357-A9C09B534299}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftMVCTest", "..\test\ThriftMVCTest\ThriftMVCTest.csproj", "{891B4487-C7BA-427E-BBC8-4C596C229A10}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Release|Any CPU.Build.0 = Release|Any CPU
-		{891B4487-C7BA-427E-BBC8-4C596C229A10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{891B4487-C7BA-427E-BBC8-4C596C229A10}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{891B4487-C7BA-427E-BBC8-4C596C229A10}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{891B4487-C7BA-427E-BBC8-4C596C229A10}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(MonoDevelopProperties) = preSolution
-		        StartupItem = Thrift.csproj
-	EndGlobalSection
-EndGlobal
diff --git a/lib/csharp/src/Transport/TBufferedTransport.cs b/lib/csharp/src/Transport/TBufferedTransport.cs
deleted file mode 100644
index 8870988..0000000
--- a/lib/csharp/src/Transport/TBufferedTransport.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.IO;
-
-namespace Thrift.Transport
-{
-    public class TBufferedTransport : TTransport, IDisposable
-    {
-        private readonly int bufSize;
-        private readonly MemoryStream inputBuffer = new MemoryStream(0);
-        private readonly MemoryStream outputBuffer = new MemoryStream(0);
-        private readonly TTransport transport;
-
-        public TBufferedTransport(TTransport transport, int bufSize = 1024)
-        {
-            if (transport == null)
-                throw new ArgumentNullException("transport");
-            if (bufSize <= 0)
-                throw new ArgumentException("bufSize", "Buffer size must be a positive number.");
-            this.transport = transport;
-            this.bufSize = bufSize;
-        }
-
-        public TTransport UnderlyingTransport
-        {
-            get
-            {
-                CheckNotDisposed();
-                return transport;
-            }
-        }
-
-        public override bool IsOpen
-        {
-            get
-            {
-                // We can legitimately throw here but be nice a bit.
-                // CheckNotDisposed();
-                return !_IsDisposed && transport.IsOpen;
-            }
-        }
-
-        public override void Open()
-        {
-            CheckNotDisposed();
-            transport.Open();
-        }
-
-        public override void Close()
-        {
-            CheckNotDisposed();
-            transport.Close();
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            CheckNotDisposed();
-            ValidateBufferArgs(buf, off, len);
-            if (!IsOpen)
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-
-            if (inputBuffer.Capacity < bufSize)
-                inputBuffer.Capacity = bufSize;
-
-            while (true)
-            {
-                int got = inputBuffer.Read(buf, off, len);
-                if (got > 0)
-                    return got;
-
-                inputBuffer.Seek(0, SeekOrigin.Begin);
-                inputBuffer.SetLength(inputBuffer.Capacity);
-                int filled = transport.Read(inputBuffer.GetBuffer(), 0, (int)inputBuffer.Length);
-                inputBuffer.SetLength(filled);
-                if (filled == 0)
-                    return 0;
-            }
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            CheckNotDisposed();
-            ValidateBufferArgs(buf, off, len);
-            if (!IsOpen)
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            // Relative offset from "off" argument
-            int offset = 0;
-            if (outputBuffer.Length > 0)
-            {
-                int capa = (int)(outputBuffer.Capacity - outputBuffer.Length);
-                int writeSize = capa <= len ? capa : len;
-                outputBuffer.Write(buf, off, writeSize);
-                offset += writeSize;
-                if (writeSize == capa)
-                {
-                    transport.Write(outputBuffer.GetBuffer(), 0, (int)outputBuffer.Length);
-                    outputBuffer.SetLength(0);
-                }
-            }
-            while (len - offset >= bufSize)
-            {
-                transport.Write(buf, off + offset, bufSize);
-                offset += bufSize;
-            }
-            int remain = len - offset;
-            if (remain > 0)
-            {
-                if (outputBuffer.Capacity < bufSize)
-                    outputBuffer.Capacity = bufSize;
-                outputBuffer.Write(buf, off + offset, remain);
-            }
-        }
-
-        private void InternalFlush()
-        {
-            if (!IsOpen)
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            if (outputBuffer.Length > 0)
-            {
-                transport.Write(outputBuffer.GetBuffer(), 0, (int)outputBuffer.Length);
-                outputBuffer.SetLength(0);
-            }
-        }
-
-        public override void Flush()
-        {
-            CheckNotDisposed();
-            InternalFlush();
-
-            transport.Flush();
-        }
-
-        public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
-        {
-            CheckNotDisposed();
-            InternalFlush();
-
-            return transport.BeginFlush( callback, state);
-        }
-
-        public override void EndFlush(IAsyncResult asyncResult)
-        {
-            transport.EndFlush( asyncResult);
-        }
-
-
-
-        protected void CheckNotDisposed()
-        {
-            if (_IsDisposed)
-                throw new ObjectDisposedException("TBufferedTransport");
-        }
-
-        #region " IDisposable Support "
-        protected bool _IsDisposed { get; private set; }
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (inputBuffer != null)
-                        inputBuffer.Dispose();
-                    if (outputBuffer != null)
-                        outputBuffer.Dispose();
-                    if (transport != null)
-                        transport.Dispose();
-                }
-            }
-            _IsDisposed = true;
-        }
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Transport/TFramedTransport.cs b/lib/csharp/src/Transport/TFramedTransport.cs
deleted file mode 100644
index a746a32..0000000
--- a/lib/csharp/src/Transport/TFramedTransport.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-using System;
-using System.IO;
-
-namespace Thrift.Transport
-{
-    public class TFramedTransport : TTransport, IDisposable
-    {
-        private readonly TTransport transport;
-        private readonly MemoryStream writeBuffer = new MemoryStream(1024);
-        private readonly MemoryStream readBuffer = new MemoryStream(1024);
-
-        private const int HeaderSize = 4;
-        private readonly byte[] headerBuf = new byte[HeaderSize];
-
-        public class Factory : TTransportFactory
-        {
-            public override TTransport GetTransport(TTransport trans)
-            {
-                return new TFramedTransport(trans);
-            }
-        }
-
-        public TFramedTransport(TTransport transport)
-        {
-            if (transport == null)
-                throw new ArgumentNullException("transport");
-            this.transport = transport;
-            InitWriteBuffer();
-        }
-
-        public override void Open()
-        {
-            CheckNotDisposed();
-            transport.Open();
-        }
-
-        public override bool IsOpen
-        {
-            get
-            {
-                // We can legitimately throw here but be nice a bit.
-                // CheckNotDisposed();
-                return !_IsDisposed && transport.IsOpen;
-            }
-        }
-
-        public override void Close()
-        {
-            CheckNotDisposed();
-            transport.Close();
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            CheckNotDisposed();
-            ValidateBufferArgs(buf, off, len);
-            if (!IsOpen)
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            int got = readBuffer.Read(buf, off, len);
-            if (got > 0)
-            {
-                return got;
-            }
-
-            // Read another frame of data
-            ReadFrame();
-
-            return readBuffer.Read(buf, off, len);
-        }
-
-        private void ReadFrame()
-        {
-            transport.ReadAll(headerBuf, 0, HeaderSize);
-            int size = DecodeFrameSize(headerBuf);
-
-            readBuffer.SetLength(size);
-            readBuffer.Seek(0, SeekOrigin.Begin);
-            byte[] buff = readBuffer.GetBuffer();
-            transport.ReadAll(buff, 0, size);
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            CheckNotDisposed();
-            ValidateBufferArgs(buf, off, len);
-            if (!IsOpen)
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            if (writeBuffer.Length + (long)len > (long)int.MaxValue)
-                Flush();
-            writeBuffer.Write(buf, off, len);
-        }
-
-        private void InternalFlush()
-        {
-            CheckNotDisposed();
-            if (!IsOpen)
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            byte[] buf = writeBuffer.GetBuffer();
-            int len = (int)writeBuffer.Length;
-            int data_len = len - HeaderSize;
-            if (data_len < 0)
-                throw new System.InvalidOperationException(); // logic error actually
-
-            // Inject message header into the reserved buffer space
-            EncodeFrameSize(data_len, buf);
-
-            // Send the entire message at once
-            transport.Write(buf, 0, len);
-
-            InitWriteBuffer();
-        }
-
-        public override void Flush()
-        {
-            CheckNotDisposed();
-            InternalFlush();
-
-            transport.Flush();
-        }
-
-        public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
-        {
-            CheckNotDisposed();
-            InternalFlush();
-
-            return transport.BeginFlush( callback, state);
-        }
-
-        public override void EndFlush(IAsyncResult asyncResult)
-        {
-            transport.EndFlush( asyncResult);
-        }
-
-        private void InitWriteBuffer()
-        {
-            // Reserve space for message header to be put right before sending it out
-            writeBuffer.SetLength(HeaderSize);
-            writeBuffer.Seek(0, SeekOrigin.End);
-        }
-
-        private static void EncodeFrameSize(int frameSize, byte[] buf)
-        {
-            buf[0] = (byte)(0xff & (frameSize >> 24));
-            buf[1] = (byte)(0xff & (frameSize >> 16));
-            buf[2] = (byte)(0xff & (frameSize >> 8));
-            buf[3] = (byte)(0xff & (frameSize));
-        }
-
-        private static int DecodeFrameSize(byte[] buf)
-        {
-            return
-                ((buf[0] & 0xff) << 24) |
-                ((buf[1] & 0xff) << 16) |
-                ((buf[2] & 0xff) << 8) |
-                ((buf[3] & 0xff));
-        }
-
-
-        private void CheckNotDisposed()
-        {
-            if (_IsDisposed)
-                throw new ObjectDisposedException("TFramedTransport");
-        }
-
-        #region " IDisposable Support "
-        private bool _IsDisposed;
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (readBuffer != null)
-                        readBuffer.Dispose();
-                    if (writeBuffer != null)
-                        writeBuffer.Dispose();
-                    if (transport != null)
-                        transport.Dispose();
-                }
-            }
-            _IsDisposed = true;
-        }
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Transport/THttpClient.cs b/lib/csharp/src/Transport/THttpClient.cs
deleted file mode 100644
index 986799c..0000000
--- a/lib/csharp/src/Transport/THttpClient.cs
+++ /dev/null
@@ -1,486 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using System.Threading;
-using System.Linq;
-using System.Security.Cryptography.X509Certificates;
-using System.IO.Compression;
-
-namespace Thrift.Transport
-{
-    public class THttpClient : TTransport, IDisposable
-    {
-        private readonly Uri uri;
-        private readonly X509Certificate[] certificates;
-        private Stream inputStream;
-        private MemoryStream outputStream = new MemoryStream();
-
-        // Timeouts in milliseconds
-        private int connectTimeout = 30000;
-
-        private int readTimeout = 30000;
-
-        private IDictionary<string, string> customHeaders = new Dictionary<string, string>();
-        private string userAgent = "C#/THttpClient";
-
-#if !SILVERLIGHT
-        private IWebProxy proxy = WebRequest.DefaultWebProxy;
-#endif
-
-        public THttpClient(Uri u)
-            : this(u, Enumerable.Empty<X509Certificate>())
-        {
-        }
-        public THttpClient(Uri u, string userAgent)
-            : this(u, userAgent, Enumerable.Empty<X509Certificate>())
-        {
-        }
-
-        public THttpClient(Uri u, IEnumerable<X509Certificate> certificates)
-        {
-            uri = u;
-            this.certificates = (certificates ?? Enumerable.Empty<X509Certificate>()).ToArray();
-        }
-        public THttpClient(Uri u, string userAgent, IEnumerable<X509Certificate> certificates)
-        {
-            uri = u;
-            this.userAgent = userAgent;
-            this.certificates = (certificates ?? Enumerable.Empty<X509Certificate>()).ToArray();
-        }
-
-        public int ConnectTimeout
-        {
-            set
-            {
-                connectTimeout = value;
-            }
-        }
-
-        public int ReadTimeout
-        {
-            set
-            {
-                readTimeout = value;
-            }
-        }
-
-        public IDictionary<string, string> CustomHeaders
-        {
-            get
-            {
-                return customHeaders;
-            }
-        }
-
-#if !SILVERLIGHT
-        public IWebProxy Proxy
-        {
-            set
-            {
-                proxy = value;
-            }
-        }
-#endif
-
-        public override bool IsOpen
-        {
-            get
-            {
-                return true;
-            }
-        }
-
-        public override void Open()
-        {
-        }
-
-        public override void Close()
-        {
-            if (inputStream != null)
-            {
-                inputStream.Close();
-                inputStream = null;
-            }
-            if (outputStream != null)
-            {
-                outputStream.Close();
-                outputStream = null;
-            }
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            if (inputStream == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No request has been sent");
-            }
-
-            try
-            {
-                int ret = inputStream.Read(buf, off, len);
-
-                if (ret == -1)
-                {
-                    throw new TTransportException(TTransportException.ExceptionType.EndOfFile, "No more data available");
-                }
-
-                return ret;
-            }
-            catch (IOException iox)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.Unknown, iox.ToString(), iox);
-            }
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            outputStream.Write(buf, off, len);
-        }
-
-#if !SILVERLIGHT
-        public override void Flush()
-        {
-            try
-            {
-                SendRequest();
-            }
-            finally
-            {
-                outputStream = new MemoryStream();
-            }
-        }
-
-        private void SendRequest()
-        {
-            try
-            {
-                HttpWebRequest connection = CreateRequest();
-                connection.Headers.Add("Accept-Encoding", "gzip, deflate");
-
-                byte[] data = outputStream.ToArray();
-                connection.ContentLength = data.Length;
-
-                using (Stream requestStream = connection.GetRequestStream())
-                {
-                    requestStream.Write(data, 0, data.Length);
-
-                    // Resolve HTTP hang that can happens after successive calls by making sure
-                    // that we release the response and response stream. To support this, we copy
-                    // the response to a memory stream.
-                    using (var response = connection.GetResponse())
-                    {
-                        using (var responseStream = response.GetResponseStream())
-                        {
-                            // Copy the response to a memory stream so that we can
-                            // cleanly close the response and response stream.
-                            inputStream = new MemoryStream();
-                            byte[] buffer = new byte[8192];  // multiple of 4096
-                            int bytesRead;
-                            while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
-                            {
-                                inputStream.Write(buffer, 0, bytesRead);
-                            }
-                            inputStream.Seek(0, 0);
-                        }
-
-                        var encodings = response.Headers.GetValues("Content-Encoding");
-                        if (encodings != null)
-                        {
-                            foreach (var encoding in encodings)
-                            {
-                                switch (encoding)
-                                {
-                                    case "gzip":
-                                        DecompressGZipped(ref inputStream);
-                                        break;
-                                    case "deflate":
-                                        DecompressDeflated(ref inputStream);
-                                        break;
-                                    default:
-                                        break;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            catch (IOException iox)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.Unknown, iox.ToString(), iox);
-            }
-            catch (WebException wx)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.Unknown, "Couldn't connect to server: " + wx, wx);
-            }
-        }
-
-        private void DecompressDeflated(ref Stream inputStream)
-        {
-            var tmp = new MemoryStream();
-            using (var decomp = new DeflateStream(inputStream, CompressionMode.Decompress))
-            {
-                decomp.CopyTo(tmp);
-            }
-            inputStream.Dispose();
-            inputStream = tmp;
-            inputStream.Seek(0, 0);
-        }
-
-        private void DecompressGZipped(ref Stream inputStream)
-        {
-            var tmp = new MemoryStream();
-            using (var decomp = new GZipStream(inputStream, CompressionMode.Decompress))
-            {
-                decomp.CopyTo(tmp);
-            }
-            inputStream.Dispose();
-            inputStream = tmp;
-            inputStream.Seek(0, 0);
-        }
-#endif
-        private HttpWebRequest CreateRequest()
-        {
-            HttpWebRequest connection = (HttpWebRequest)WebRequest.Create(uri);
-
-
-#if !SILVERLIGHT
-            // Adding certificates through code is not supported with WP7 Silverlight
-            // see "Windows Phone 7 and Certificates_FINAL_121610.pdf"
-            connection.ClientCertificates.AddRange(certificates);
-
-            if (connectTimeout > 0)
-            {
-                connection.Timeout = connectTimeout;
-            }
-            if (readTimeout > 0)
-            {
-                connection.ReadWriteTimeout = readTimeout;
-            }
-#endif
-            // Make the request
-            connection.ContentType = "application/x-thrift";
-            connection.Accept = "application/x-thrift";
-            connection.UserAgent = userAgent;
-            connection.Method = "POST";
-#if !SILVERLIGHT
-            connection.ProtocolVersion = HttpVersion.Version10;
-#endif
-
-            //add custom headers here
-            foreach (KeyValuePair<string, string> item in customHeaders)
-            {
-#if !SILVERLIGHT
-                connection.Headers.Add(item.Key, item.Value);
-#else
-                connection.Headers[item.Key] = item.Value;
-#endif
-            }
-
-#if !SILVERLIGHT
-            connection.Proxy = proxy;
-#endif
-
-            return connection;
-        }
-
-        public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
-        {
-            // Extract request and reset buffer
-            var data = outputStream.ToArray();
-
-            //requestBuffer_ = new MemoryStream();
-
-            try
-            {
-                // Create connection object
-                var flushAsyncResult = new FlushAsyncResult(callback, state);
-                flushAsyncResult.Connection = CreateRequest();
-
-                flushAsyncResult.Data = data;
-
-
-                flushAsyncResult.Connection.BeginGetRequestStream(GetRequestStreamCallback, flushAsyncResult);
-                return flushAsyncResult;
-
-            }
-            catch (IOException iox)
-            {
-                throw new TTransportException(iox.ToString(), iox);
-            }
-        }
-
-        public override void EndFlush(IAsyncResult asyncResult)
-        {
-            try
-            {
-                var flushAsyncResult = (FlushAsyncResult)asyncResult;
-
-                if (!flushAsyncResult.IsCompleted)
-                {
-                    var waitHandle = flushAsyncResult.AsyncWaitHandle;
-                    waitHandle.WaitOne();  // blocking INFINITEly
-                    waitHandle.Close();
-                }
-
-                if (flushAsyncResult.AsyncException != null)
-                {
-                    throw flushAsyncResult.AsyncException;
-                }
-            }
-            finally
-            {
-                outputStream = new MemoryStream();
-            }
-
-        }
-
-        private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
-        {
-            var flushAsyncResult = (FlushAsyncResult)asynchronousResult.AsyncState;
-            try
-            {
-                var reqStream = flushAsyncResult.Connection.EndGetRequestStream(asynchronousResult);
-                reqStream.Write(flushAsyncResult.Data, 0, flushAsyncResult.Data.Length);
-                reqStream.Flush();
-                reqStream.Close();
-
-                // Start the asynchronous operation to get the response
-                flushAsyncResult.Connection.BeginGetResponse(GetResponseCallback, flushAsyncResult);
-            }
-            catch (Exception exception)
-            {
-                flushAsyncResult.AsyncException = new TTransportException(exception.ToString(), exception);
-                flushAsyncResult.UpdateStatusToComplete();
-                flushAsyncResult.NotifyCallbackWhenAvailable();
-            }
-        }
-
-        private void GetResponseCallback(IAsyncResult asynchronousResult)
-        {
-            var flushAsyncResult = (FlushAsyncResult)asynchronousResult.AsyncState;
-            try
-            {
-                inputStream = flushAsyncResult.Connection.EndGetResponse(asynchronousResult).GetResponseStream();
-            }
-            catch (Exception exception)
-            {
-                flushAsyncResult.AsyncException = new TTransportException(exception.ToString(), exception);
-            }
-            flushAsyncResult.UpdateStatusToComplete();
-            flushAsyncResult.NotifyCallbackWhenAvailable();
-        }
-
-        // Based on http://msmvps.com/blogs/luisabreu/archive/2009/06/15/multithreading-implementing-the-iasyncresult-interface.aspx
-        class FlushAsyncResult : IAsyncResult
-        {
-            private volatile Boolean _isCompleted;
-            private ManualResetEvent _evt;
-            private readonly AsyncCallback _cbMethod;
-            private readonly object _state;
-
-            public FlushAsyncResult(AsyncCallback cbMethod, object state)
-            {
-                _cbMethod = cbMethod;
-                _state = state;
-            }
-
-            internal byte[] Data { get; set; }
-            internal HttpWebRequest Connection { get; set; }
-            internal TTransportException AsyncException { get; set; }
-
-            public object AsyncState
-            {
-                get { return _state; }
-            }
-            public WaitHandle AsyncWaitHandle
-            {
-                get { return GetEvtHandle(); }
-            }
-            public bool CompletedSynchronously
-            {
-                get { return false; }
-            }
-            public bool IsCompleted
-            {
-                get { return _isCompleted; }
-            }
-            private readonly object _locker = new object();
-            private ManualResetEvent GetEvtHandle()
-            {
-                lock (_locker)
-                {
-                    if (_evt == null)
-                    {
-                        _evt = new ManualResetEvent(false);
-                    }
-                    if (_isCompleted)
-                    {
-                        _evt.Set();
-                    }
-                }
-                return _evt;
-            }
-            internal void UpdateStatusToComplete()
-            {
-                _isCompleted = true; //1. set _iscompleted to true
-                lock (_locker)
-                {
-                    if (_evt != null)
-                    {
-                        _evt.Set(); //2. set the event, when it exists
-                    }
-                }
-            }
-
-            internal void NotifyCallbackWhenAvailable()
-            {
-                if (_cbMethod != null)
-                {
-                    _cbMethod(this);
-                }
-            }
-        }
-
-        #region " IDisposable Support "
-        private bool _IsDisposed;
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (inputStream != null)
-                        inputStream.Dispose();
-                    if (outputStream != null)
-                        outputStream.Dispose();
-                }
-            }
-            _IsDisposed = true;
-        }
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Transport/THttpHandler.cs b/lib/csharp/src/Transport/THttpHandler.cs
deleted file mode 100644
index 4115ef9..0000000
--- a/lib/csharp/src/Transport/THttpHandler.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-
-using System;
-using System.Web;
-using System.Net;
-using System.IO;
-
-using Thrift.Protocol;
-
-namespace Thrift.Transport
-{
-    public class THttpHandler : IHttpHandler
-    {
-        protected TProcessor processor;
-
-        protected TProtocolFactory inputProtocolFactory;
-        protected TProtocolFactory outputProtocolFactory;
-
-        protected const string contentType = "application/x-thrift";
-        protected System.Text.Encoding encoding = System.Text.Encoding.UTF8;
-
-        public THttpHandler(TProcessor processor)
-            : this(processor, new TBinaryProtocol.Factory())
-        {
-
-        }
-
-        public THttpHandler(TProcessor processor, TProtocolFactory protocolFactory)
-            : this(processor, protocolFactory, protocolFactory)
-        {
-
-        }
-
-        public THttpHandler(TProcessor processor, TProtocolFactory inputProtocolFactory, TProtocolFactory outputProtocolFactory)
-        {
-            this.processor = processor;
-            this.inputProtocolFactory = inputProtocolFactory;
-            this.outputProtocolFactory = outputProtocolFactory;
-        }
-
-        public void ProcessRequest(HttpListenerContext context)
-        {
-            context.Response.ContentType = contentType;
-            context.Response.ContentEncoding = encoding;
-            ProcessRequest(context.Request.InputStream, context.Response.OutputStream);
-        }
-
-        public void ProcessRequest(HttpContext context)
-        {
-            context.Response.ContentType = contentType;
-            context.Response.ContentEncoding = encoding;
-            ProcessRequest(context.Request.InputStream, context.Response.OutputStream);
-        }
-
-        public void ProcessRequest(Stream input, Stream output)
-        {
-            TTransport transport = new TStreamTransport(input,output);
-
-            try
-            {
-                var inputProtocol = inputProtocolFactory.GetProtocol(transport);
-                var outputProtocol = outputProtocolFactory.GetProtocol(transport);
-
-                while (processor.Process(inputProtocol, outputProtocol))
-                {
-                }
-            }
-            catch (TTransportException)
-            {
-                // Client died, just move on
-            }
-            finally
-            {
-                transport.Close();
-            }
-        }
-
-        public bool IsReusable
-        {
-            get { return true; }
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/THttpTaskAsyncHandler.cs b/lib/csharp/src/Transport/THttpTaskAsyncHandler.cs
deleted file mode 100644
index e491f32..0000000
--- a/lib/csharp/src/Transport/THttpTaskAsyncHandler.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System.Threading.Tasks;
-using System.Web;
-using Thrift.Protocol;
-
-namespace Thrift.Transport
-{
-    /// <summary>
-    /// An async task based HTTP handler for processing thrift services.
-    /// </summary>
-    public class THttpTaskAsyncHandler : HttpTaskAsyncHandler
-    {
-        private readonly TAsyncProcessor _processor;
-        private readonly TProtocolFactory _inputProtocolFactory;
-        private readonly TProtocolFactory _outputProtocolFactory;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class
-        /// using the <see cref="TBinaryProtocol.Factory"/> for both input and output streams.
-        /// </summary>
-        /// <param name="processor">The async processor implementation.</param>
-        public THttpTaskAsyncHandler(TAsyncProcessor processor)
-            : this(processor, new TBinaryProtocol.Factory())
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class
-        /// using <paramref name="protocolFactory"/> for both input and output streams.
-        /// </summary>
-        /// <param name="processor">The async processor implementation.</param>
-        /// <param name="protocolFactory">The protocol factory.</param>
-        public THttpTaskAsyncHandler(TAsyncProcessor processor, TProtocolFactory protocolFactory)
-            : this(processor, protocolFactory, protocolFactory)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class.
-        /// </summary>
-        /// <param name="processor">The async processor implementation.</param>
-        /// <param name="inputProtocolFactory">The input protocol factory.</param>
-        /// <param name="outputProtocolFactory">The output protocol factory.</param>
-        public THttpTaskAsyncHandler(TAsyncProcessor processor, TProtocolFactory inputProtocolFactory,
-            TProtocolFactory outputProtocolFactory)
-        {
-            _processor = processor;
-            _inputProtocolFactory = inputProtocolFactory;
-            _outputProtocolFactory = outputProtocolFactory;
-        }
-
-        public override async Task ProcessRequestAsync(HttpContext context)
-        {
-            var transport = new TStreamTransport(context.Request.InputStream, context.Response.OutputStream);
-
-            try
-            {
-                var input = _inputProtocolFactory.GetProtocol(transport);
-                var output = _outputProtocolFactory.GetProtocol(transport);
-
-                while (await _processor.ProcessAsync(input, output))
-                {
-                }
-            }
-            catch (TTransportException)
-            {
-                // Client died, just move on
-            }
-            finally
-            {
-                transport.Close();
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TMemoryBuffer.cs b/lib/csharp/src/Transport/TMemoryBuffer.cs
deleted file mode 100644
index 303d083..0000000
--- a/lib/csharp/src/Transport/TMemoryBuffer.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.IO;
-using System.Reflection;
-using Thrift.Protocol;
-
-namespace Thrift.Transport
-{
-    public class TMemoryBuffer : TTransport
-    {
-
-        private readonly MemoryStream byteStream;
-
-        public TMemoryBuffer()
-        {
-            byteStream = new MemoryStream();
-        }
-
-        public TMemoryBuffer(byte[] buf)
-        {
-            byteStream = new MemoryStream(buf);
-        }
-
-        public override void Open()
-        {
-            /** do nothing **/
-        }
-
-        public override void Close()
-        {
-            /** do nothing **/
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            return byteStream.Read(buf, off, len);
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            byteStream.Write(buf, off, len);
-        }
-
-        public byte[] GetBuffer()
-        {
-            return byteStream.ToArray();
-        }
-
-
-        public override bool IsOpen
-        {
-            get { return true; }
-        }
-
-        public static byte[] Serialize(TAbstractBase s)
-        {
-            var t = new TMemoryBuffer();
-            var p = new TBinaryProtocol(t);
-
-            s.Write(p);
-
-            return t.GetBuffer();
-        }
-
-        public static T DeSerialize<T>(byte[] buf) where T : TAbstractBase
-        {
-            var trans = new TMemoryBuffer(buf);
-            var p = new TBinaryProtocol(trans);
-            if (typeof(TBase).IsAssignableFrom(typeof(T)))
-            {
-                var method = typeof(T).GetMethod("Read", BindingFlags.Instance | BindingFlags.Public);
-                var t = Activator.CreateInstance<T>();
-                method.Invoke(t, new object[] { p });
-                return t;
-            }
-            else
-            {
-                var method = typeof(T).GetMethod("Read", BindingFlags.Static | BindingFlags.Public);
-                return (T)method.Invoke(null, new object[] { p });
-            }
-        }
-
-        private bool _IsDisposed;
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (byteStream != null)
-                        byteStream.Dispose();
-                }
-            }
-            _IsDisposed = true;
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TNamedPipeClientTransport.cs b/lib/csharp/src/Transport/TNamedPipeClientTransport.cs
deleted file mode 100644
index 49a50aa..0000000
--- a/lib/csharp/src/Transport/TNamedPipeClientTransport.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO.Pipes;
-using System.Threading;
-
-namespace Thrift.Transport
-{
-    public class TNamedPipeClientTransport : TTransport
-    {
-        private NamedPipeClientStream client;
-        private string ServerName;
-        private string PipeName;
-        private int ConnectTimeout;
-
-        public TNamedPipeClientTransport(string pipe, int timeout = Timeout.Infinite)
-        {
-            ServerName = ".";
-            PipeName = pipe;
-            ConnectTimeout = timeout;
-        }
-
-        public TNamedPipeClientTransport(string server, string pipe, int timeout = Timeout.Infinite)
-        {
-            ServerName = (server != "") ? server : ".";
-            PipeName = pipe;
-            ConnectTimeout = timeout;
-        }
-
-        public override bool IsOpen
-        {
-            get { return client != null && client.IsConnected; }
-        }
-
-        public override void Open()
-        {
-            if (IsOpen)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen);
-            }
-            client = new NamedPipeClientStream(ServerName, PipeName, PipeDirection.InOut, PipeOptions.None);
-            client.Connect(ConnectTimeout);
-        }
-
-        public override void Close()
-        {
-            if (client != null)
-            {
-                client.Close();
-                client = null;
-            }
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            if (client == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            }
-
-            return client.Read(buf, off, len);
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            if (client == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-            }
-
-            // if necessary, send the data in chunks
-            // there's a system limit around 0x10000 bytes that we hit otherwise
-            // MSDN: "Pipe write operations across a network are limited to 65,535 bytes per write. For more information regarding pipes, see the Remarks section."
-            var nBytes = Math.Min(len, 15 * 4096);  // 16 would exceed the limit
-            while (nBytes > 0)
-            {
-                client.Write(buf, off, nBytes);
-
-                off += nBytes;
-                len -= nBytes;
-                nBytes = Math.Min(len, nBytes);
-            }
-        }
-
-        protected override void Dispose(bool disposing)
-        {
-            client.Dispose();
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TNamedPipeServerTransport.cs b/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
deleted file mode 100644
index 32215cf..0000000
--- a/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
+++ /dev/null
@@ -1,296 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO.Pipes;
-using System.Threading;
-using System.Security.Principal;
-
-namespace Thrift.Transport
-{
-    public class TNamedPipeServerTransport : TServerTransport
-    {
-        /// <summary>
-        /// This is the address of the Pipe on the localhost.
-        /// </summary>
-        private readonly string pipeAddress;
-        private NamedPipeServerStream stream = null;
-        private bool asyncMode = true;
-
-        public TNamedPipeServerTransport(string pipeAddress)
-        {
-            this.pipeAddress = pipeAddress;
-        }
-
-        public override void Listen()
-        {
-            // nothing to do here
-        }
-
-        public override void Close()
-        {
-            if (stream != null)
-            {
-                try
-                {
-                    stream.Close();
-                    stream.Dispose();
-                }
-                finally
-                {
-                    stream = null;
-                }
-            }
-        }
-
-        private void EnsurePipeInstance()
-        {
-            if (stream == null)
-            {
-                var direction = PipeDirection.InOut;
-                var maxconn = NamedPipeServerStream.MaxAllowedServerInstances;
-                var mode = PipeTransmissionMode.Byte;
-                var options = asyncMode ? PipeOptions.Asynchronous : PipeOptions.None;
-                const int INBUF_SIZE = 4096;
-                const int OUTBUF_SIZE = 4096;
-
-                // security
-                var security = new PipeSecurity();
-                security.AddAccessRule(
-                    new PipeAccessRule(
-                        new SecurityIdentifier(WellKnownSidType.WorldSid, null),
-                        PipeAccessRights.Read | PipeAccessRights.Write | PipeAccessRights.Synchronize | PipeAccessRights.CreateNewInstance,
-                        System.Security.AccessControl.AccessControlType.Allow
-                    )
-                );
-
-                try
-                {
-                    stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, INBUF_SIZE, OUTBUF_SIZE, security);
-                }
-                catch (NotImplementedException)  // Mono still does not support async, fallback to sync
-                {
-                    if (asyncMode)
-                    {
-                        options &= (~PipeOptions.Asynchronous);
-                        stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, INBUF_SIZE, OUTBUF_SIZE, security);
-                        asyncMode = false;
-                    }
-                    else
-                    {
-                        throw;
-                    }
-                }
-
-            }
-        }
-
-        protected override TTransport AcceptImpl()
-        {
-            try
-            {
-                EnsurePipeInstance();
-
-                if (asyncMode)
-                {
-                    var evt = new ManualResetEvent(false);
-                    Exception eOuter = null;
-
-                    stream.BeginWaitForConnection(asyncResult =>
-                    {
-                        try
-                        {
-                            if (stream != null)
-                                stream.EndWaitForConnection(asyncResult);
-                            else
-                                eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted);
-                        }
-                        catch (Exception e)
-                        {
-                            if (stream != null)
-                                eOuter = e;
-                            else
-                                eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted, e.Message, e);
-                        }
-                        evt.Set();
-                    }, null);
-
-                    evt.WaitOne();
-
-                    if (eOuter != null)
-                        throw eOuter; // rethrow exception
-                }
-                else
-                {
-                    stream.WaitForConnection();
-                }
-
-                var trans = new ServerTransport(stream,asyncMode);
-                stream = null;  // pass ownership to ServerTransport
-                return trans;
-            }
-            catch (TTransportException)
-            {
-                Close();
-                throw;
-            }
-            catch (Exception e)
-            {
-                Close();
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, e.Message, e);
-            }
-        }
-
-        private class ServerTransport : TTransport
-        {
-            private NamedPipeServerStream stream;
-            private bool asyncMode;
-
-            public ServerTransport(NamedPipeServerStream stream, bool asyncMode)
-            {
-                this.stream = stream;
-                this.asyncMode = asyncMode;
-            }
-
-            public override bool IsOpen
-            {
-                get { return stream != null && stream.IsConnected; }
-            }
-
-            public override void Open()
-            {
-            }
-
-            public override void Close()
-            {
-                if (stream != null)
-                    stream.Close();
-            }
-
-            public override int Read(byte[] buf, int off, int len)
-            {
-                if (stream == null)
-                {
-                    throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-                }
-
-                if (asyncMode)
-                {
-                    Exception eOuter = null;
-                    var evt = new ManualResetEvent(false);
-                    int retval = 0;
-
-                    stream.BeginRead(buf, off, len, asyncResult =>
-                    {
-                        try
-                        {
-                            if (stream != null)
-                                retval = stream.EndRead(asyncResult);
-                            else
-                                eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted);
-                        }
-                        catch (Exception e)
-                        {
-                            if (stream != null)
-                                eOuter = e;
-                            else
-                                eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted, e.Message, e);
-                        }
-                        evt.Set();
-                    }, null);
-
-                    evt.WaitOne();
-
-                    if (eOuter != null)
-                        throw eOuter; // rethrow exception
-                    else
-                        return retval;
-                }
-                else
-                {
-                    return stream.Read(buf, off, len);
-                }
-            }
-
-            public override void Write(byte[] buf, int off, int len)
-            {
-                if (stream == null)
-                {
-                    throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-                }
-
-                // if necessary, send the data in chunks
-                // there's a system limit around 0x10000 bytes that we hit otherwise
-                // MSDN: "Pipe write operations across a network are limited to 65,535 bytes per write. For more information regarding pipes, see the Remarks section."
-                var nBytes = Math.Min(len, 15 * 4096);  // 16 would exceed the limit
-                while (nBytes > 0)
-                {
-
-                    if (asyncMode)
-                    {
-                        Exception eOuter = null;
-                        var evt = new ManualResetEvent(false);
-
-                        stream.BeginWrite(buf, off, nBytes, asyncResult =>
-                        {
-                            try
-                            {
-                                if (stream != null)
-                                    stream.EndWrite(asyncResult);
-                                else
-                                    eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted);
-                            }
-                            catch (Exception e)
-                            {
-                                if (stream != null)
-                                    eOuter = e;
-                                else
-                                    eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted, e.Message, e);
-                            }
-                            evt.Set();
-                        }, null);
-
-                        evt.WaitOne();
-
-                        if (eOuter != null)
-                            throw eOuter; // rethrow exception
-                    }
-                    else
-                    {
-                        stream.Write(buf, off, nBytes);
-                    }
-
-                    off += nBytes;
-                    len -= nBytes;
-                    nBytes = Math.Min(len, nBytes);
-                }
-            }
-
-            protected override void Dispose(bool disposing)
-            {
-                if (stream != null)
-                    stream.Dispose();
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/lib/csharp/src/Transport/TServerSocket.cs b/lib/csharp/src/Transport/TServerSocket.cs
deleted file mode 100644
index d8ec62a..0000000
--- a/lib/csharp/src/Transport/TServerSocket.cs
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Net.Sockets;
-
-
-namespace Thrift.Transport
-{
-    public class TServerSocket : TServerTransport
-    {
-        /// <summary>
-        /// Underlying server with socket.
-        /// </summary>
-        private TcpListener server = null;
-
-        /// <summary>
-        /// Port to listen on.
-        /// </summary>
-        private int port = 0;
-
-        /// <summary>
-        /// Timeout for client sockets from accept.
-        /// </summary>
-        private int clientTimeout = 0;
-
-        /// <summary>
-        /// Whether or not to wrap new TSocket connections in buffers.
-        /// </summary>
-        private bool useBufferedSockets = false;
-
-        /// <summary>
-        /// Creates a server socket from underlying socket object.
-        /// </summary>
-        public TServerSocket(TcpListener listener)
-            : this(listener, 0)
-        {
-        }
-
-        /// <summary>
-        /// Creates a server socket from underlying socket object.
-        /// </summary>
-        public TServerSocket(TcpListener listener, int clientTimeout)
-        {
-            this.server = listener;
-            this.clientTimeout = clientTimeout;
-        }
-
-        /// <summary>
-        /// Creates just a port listening server socket.
-        /// </summary>
-        public TServerSocket(int port)
-            : this(port, 0)
-        {
-        }
-
-        /// <summary>
-        /// Creates just a port listening server socket.
-        /// </summary>
-        public TServerSocket(int port, int clientTimeout)
-            : this(port, clientTimeout, false)
-        {
-        }
-
-        public TServerSocket(int port, int clientTimeout, bool useBufferedSockets)
-        {
-            this.port = port;
-            this.clientTimeout = clientTimeout;
-            this.useBufferedSockets = useBufferedSockets;
-            try
-            {
-                // Make server socket
-                this.server = TSocketVersionizer.CreateTcpListener(this.port);
-                this.server.Server.NoDelay = true;
-            }
-            catch (Exception ex)
-            {
-                server = null;
-                throw new TTransportException("Could not create ServerSocket on port " + this.port + ".", ex);
-            }
-        }
-
-        public override void Listen()
-        {
-            // Make sure not to block on accept
-            if (server != null)
-            {
-                try
-                {
-                    server.Start();
-                }
-                catch (SocketException sx)
-                {
-                    throw new TTransportException("Could not accept on listening socket: " + sx.Message, sx);
-                }
-            }
-        }
-
-        protected override TTransport AcceptImpl()
-        {
-            if (server == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");
-            }
-            try
-            {
-                TSocket result2 = null;
-                TcpClient result = server.AcceptTcpClient();
-                try
-                {
-                    result2 = new TSocket(result);
-                    result2.Timeout = clientTimeout;
-                    if (useBufferedSockets)
-                    {
-                        TBufferedTransport result3 = new TBufferedTransport(result2);
-                        return result3;
-                    }
-                    else
-                    {
-                        return result2;
-                    }
-                }
-                catch (System.Exception)
-                {
-                    // If a TSocket was successfully created, then let
-                    // it do proper cleanup of the TcpClient object.
-                    if (result2 != null)
-                        result2.Dispose();
-                    else //  Otherwise, clean it up ourselves.
-                        ((IDisposable)result).Dispose();
-                    throw;
-                }
-            }
-            catch (Exception ex)
-            {
-                throw new TTransportException(ex.ToString(), ex);
-            }
-        }
-
-        public override void Close()
-        {
-            if (server != null)
-            {
-                try
-                {
-                    server.Stop();
-                }
-                catch (Exception ex)
-                {
-                    throw new TTransportException("WARNING: Could not close server socket: " + ex, ex);
-                }
-                server = null;
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TServerTransport.cs b/lib/csharp/src/Transport/TServerTransport.cs
deleted file mode 100644
index e63880b..0000000
--- a/lib/csharp/src/Transport/TServerTransport.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Transport
-{
-    public abstract class TServerTransport
-    {
-        public abstract void Listen();
-        public abstract void Close();
-        protected abstract TTransport AcceptImpl();
-
-        public TTransport Accept()
-        {
-            TTransport transport = AcceptImpl();
-            if (transport == null)
-            {
-                throw new TTransportException("accept() may not return NULL");
-            }
-            return transport;
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TSilverlightSocket.cs b/lib/csharp/src/Transport/TSilverlightSocket.cs
deleted file mode 100644
index 40469ab..0000000
--- a/lib/csharp/src/Transport/TSilverlightSocket.cs
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-/* only for silverlight */
-#if SILVERLIGHT
-
-using System;
-using System.Net.Sockets;
-using System.IO;
-using System.Net;
-using System.Threading;
-
-namespace Thrift.Transport
-{
-    public class TSilverlightSocket : TTransport
-    {
-        Socket socket = null;
-        static ManualResetEvent readAsyncComplete = new ManualResetEvent(false);
-        public event EventHandler<SocketAsyncEventArgs> connectHandler = null;
-
-        // memory stream for write cache.
-        private MemoryStream outputStream = new MemoryStream();
-
-        private string host = null;
-        private int port = 0;
-        private int timeout = 0;
-
-        // constructor
-        public TSilverlightSocket(string host, int port)
-            : this(host, port, 0)
-        {
-        }
-
-        // constructor
-        public TSilverlightSocket(string host, int port, int timeout)
-        {
-            this.host = host;
-            this.port = port;
-            this.timeout = timeout;
-
-            InitSocket();
-        }
-
-        private void InitSocket()
-        {
-            // Create a stream-based, TCP socket using the InterNetwork Address Family.
-            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-            socket.NoDelay = true;
-        }
-
-        public int Timeout
-        {
-            set
-            {
-                timeout = value;
-            }
-        }
-
-        public string Host
-        {
-            get
-            {
-                return host;
-            }
-        }
-
-        public int Port
-        {
-            get
-            {
-                return port;
-            }
-        }
-
-        public override bool IsOpen
-        {
-            get
-            {
-                if (socket == null)
-                {
-                    return false;
-                }
-
-                return socket.Connected;
-            }
-        }
-
-        public override void Open()
-        {
-            if (IsOpen)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
-            }
-
-            if (string.IsNullOrEmpty(host))
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
-            }
-
-            if (port <= 0)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
-            }
-
-            if (socket == null)
-            {
-                InitSocket();
-            }
-
-            if (timeout == 0)     // no timeout -> infinite
-            {
-                timeout = 10000;  // set a default timeout for WP.
-            }
-
-            {
-                // Create DnsEndPoint. The hostName and port are passed in to this method.
-                DnsEndPoint hostEntry = new DnsEndPoint(this.host, this.port);
-
-                // Create a SocketAsyncEventArgs object to be used in the connection request
-                SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
-                socketEventArg.RemoteEndPoint = hostEntry;
-
-                // Inline event handler for the Completed event.
-                // Note: This event handler was implemented inline in order to make this method self-contained.
-                socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
-                {
-                    if (connectHandler != null)
-                    {
-                        connectHandler(this, e);
-                    }
-                });
-
-                // Make an asynchronous Connect request over the socket
-                socket.ConnectAsync(socketEventArg);
-            }
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            bool _timeout = true;
-            string _error = null;
-            int _recvBytes = -1;
-
-            if (socket == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Socket is not open");
-            }
-
-            // Create SocketAsyncEventArgs context object
-            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
-            socketEventArg.RemoteEndPoint = socket.RemoteEndPoint;
-
-            // Setup the buffer to receive the data
-            socketEventArg.SetBuffer(buf, off, len);
-
-            // Inline event handler for the Completed event.
-            // Note: This even handler was implemented inline in order to make
-            // this method self-contained.
-            socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
-            {
-                _timeout = false;
-
-                if (e.SocketError == SocketError.Success)
-                {
-                    _recvBytes = e.BytesTransferred;
-                }
-                else
-                {
-                    _error = e.SocketError.ToString();
-                }
-
-                readAsyncComplete.Set();
-            });
-
-            // Sets the state of the event to nonsignaled, causing threads to block
-            readAsyncComplete.Reset();
-
-            // Make an asynchronous Receive request over the socket
-            socket.ReceiveAsync(socketEventArg);
-
-            // Block the UI thread for a maximum of TIMEOUT_MILLISECONDS milliseconds.
-            // If no response comes back within this time then proceed
-            readAsyncComplete.WaitOne(this.timeout);
-
-            if (_timeout)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.TimedOut, "Socket recv timeout");
-            }
-
-            if (_error != null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.Unknown, _error);
-            }
-
-            return _recvBytes;
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            outputStream.Write(buf, off, len);
-        }
-
-        private void beginFlush_Completed(object sender, SocketAsyncEventArgs e)
-        {
-            FlushAsyncResult flushAsyncResult = e.UserToken as FlushAsyncResult;
-            flushAsyncResult.UpdateStatusToComplete();
-            flushAsyncResult.NotifyCallbackWhenAvailable();
-
-            if (e.SocketError != SocketError.Success)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.Unknown, e.SocketError.ToString());
-            }
-        }
-
-        public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
-        {
-            // Extract request and reset buffer
-            byte[] data = outputStream.ToArray();
-
-            FlushAsyncResult flushAsyncResult = new FlushAsyncResult(callback, state);
-
-            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
-            socketEventArg.RemoteEndPoint = socket.RemoteEndPoint;
-            socketEventArg.UserToken = flushAsyncResult;
-
-            socketEventArg.Completed += beginFlush_Completed;
-            socketEventArg.SetBuffer(data, 0, data.Length);
-
-            socket.SendAsync(socketEventArg);
-
-            return flushAsyncResult;
-        }
-
-        public override void EndFlush(IAsyncResult asyncResult)
-        {
-            try
-            {
-                var flushAsyncResult = (FlushAsyncResult)asyncResult;
-
-                if (!flushAsyncResult.IsCompleted)
-                {
-                    var waitHandle = flushAsyncResult.AsyncWaitHandle;
-                    waitHandle.WaitOne();
-                    waitHandle.Close();
-                }
-
-                if (flushAsyncResult.AsyncException != null)
-                {
-                    throw flushAsyncResult.AsyncException;
-                }
-            }
-            finally
-            {
-                outputStream = new MemoryStream();
-            }
-        }
-
-        // Copy from impl from THttpClient.cs
-        // Based on http://msmvps.com/blogs/luisabreu/archive/2009/06/15/multithreading-implementing-the-iasyncresult-interface.aspx
-        class FlushAsyncResult : IAsyncResult
-        {
-            private volatile Boolean _isCompleted;
-            private ManualResetEvent _evt;
-            private readonly AsyncCallback _cbMethod;
-            private readonly object _state;
-
-            public FlushAsyncResult(AsyncCallback cbMethod, object state)
-            {
-                _cbMethod = cbMethod;
-                _state = state;
-            }
-
-            internal byte[] Data { get; set; }
-            internal Socket Connection { get; set; }
-            internal TTransportException AsyncException { get; set; }
-
-            public object AsyncState
-            {
-                get { return _state; }
-            }
-
-            public WaitHandle AsyncWaitHandle
-            {
-                get { return GetEvtHandle(); }
-            }
-
-            public bool CompletedSynchronously
-            {
-                get { return false; }
-            }
-
-            public bool IsCompleted
-            {
-                get { return _isCompleted; }
-            }
-
-            private readonly object _locker = new object();
-
-            private ManualResetEvent GetEvtHandle()
-            {
-                lock (_locker)
-                {
-                    if (_evt == null)
-                    {
-                        _evt = new ManualResetEvent(false);
-                    }
-                    if (_isCompleted)
-                    {
-                        _evt.Set();
-                    }
-                }
-                return _evt;
-            }
-
-            internal void UpdateStatusToComplete()
-            {
-                _isCompleted = true; //1. set _iscompleted to true
-                lock (_locker)
-                {
-                    if (_evt != null)
-                    {
-                        _evt.Set(); //2. set the event, when it exists
-                    }
-                }
-            }
-
-            internal void NotifyCallbackWhenAvailable()
-            {
-                if (_cbMethod != null)
-                {
-                    _cbMethod(this);
-                }
-            }
-        }
-
-        public override void Close()
-        {
-            if (socket != null)
-            {
-                socket.Close();
-                socket = null;
-            }
-        }
-
-#region " IDisposable Support "
-        private bool _IsDisposed;
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (outputStream != null)
-                    {
-                        outputStream.Dispose();
-                    }
-                    outputStream = null;
-                    if (socket != null)
-                    {
-                        ((IDisposable)socket).Dispose();
-                    }
-                }
-            }
-            _IsDisposed = true;
-        }
-#endregion
-    }
-}
-
-
-#endif
diff --git a/lib/csharp/src/Transport/TSocket.cs b/lib/csharp/src/Transport/TSocket.cs
deleted file mode 100644
index d8fa335..0000000
--- a/lib/csharp/src/Transport/TSocket.cs
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Net.Sockets;
-
-namespace Thrift.Transport
-{
-    public class TSocket : TStreamTransport
-    {
-        private TcpClient client = null;
-        private string host = null;
-        private int port = 0;
-        private int timeout = 0;
-
-        public TSocket(TcpClient client)
-        {
-            this.client = client;
-
-            if (IsOpen)
-            {
-                inputStream = client.GetStream();
-                outputStream = client.GetStream();
-            }
-        }
-
-        public TSocket(string host, int port)
-            : this(host, port, 0)
-        {
-        }
-
-        public TSocket(string host, int port, int timeout)
-        {
-            this.host = host;
-            this.port = port;
-            this.timeout = timeout;
-
-            InitSocket();
-        }
-
-        private void InitSocket()
-        {
-            this.client = TSocketVersionizer.CreateTcpClient();
-            this.client.ReceiveTimeout = client.SendTimeout = timeout;
-            this.client.Client.NoDelay = true;
-        }
-
-        public int Timeout
-        {
-            set
-            {
-                client.ReceiveTimeout = client.SendTimeout = timeout = value;
-            }
-        }
-
-        public TcpClient TcpClient
-        {
-            get
-            {
-                return client;
-            }
-        }
-
-        public string Host
-        {
-            get
-            {
-                return host;
-            }
-        }
-
-        public int Port
-        {
-            get
-            {
-                return port;
-            }
-        }
-
-        public override bool IsOpen
-        {
-            get
-            {
-                if (client == null)
-                {
-                    return false;
-                }
-
-                return client.Connected;
-            }
-        }
-
-        public override void Open()
-        {
-            if (IsOpen)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
-            }
-
-            if (string.IsNullOrEmpty(host))
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
-            }
-
-            if (port <= 0)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
-            }
-
-            if (client == null)
-            {
-                InitSocket();
-            }
-
-            if (timeout == 0)            // no timeout -> infinite
-            {
-                client.Connect(host, port);
-            }
-            else                        // we have a timeout -> use it
-            {
-                ConnectHelper hlp = new ConnectHelper(client);
-                IAsyncResult asyncres = client.BeginConnect(host, port, new AsyncCallback(ConnectCallback), hlp);
-                bool bConnected = asyncres.AsyncWaitHandle.WaitOne(timeout) && client.Connected;
-                if (!bConnected)
-                {
-                    lock (hlp.Mutex)
-                    {
-                        if (hlp.CallbackDone)
-                        {
-                            asyncres.AsyncWaitHandle.Close();
-                            client.Close();
-                        }
-                        else
-                        {
-                            hlp.DoCleanup = true;
-                            client = null;
-                        }
-                    }
-                    throw new TTransportException(TTransportException.ExceptionType.TimedOut, "Connect timed out");
-                }
-            }
-
-            inputStream = client.GetStream();
-            outputStream = client.GetStream();
-        }
-
-
-        static void ConnectCallback(IAsyncResult asyncres)
-        {
-            ConnectHelper hlp = asyncres.AsyncState as ConnectHelper;
-            lock (hlp.Mutex)
-            {
-                hlp.CallbackDone = true;
-
-                try
-                {
-                    if (hlp.Client.Client != null)
-                        hlp.Client.EndConnect(asyncres);
-                }
-                catch (Exception)
-                {
-                    // catch that away
-                }
-
-                if (hlp.DoCleanup)
-                {
-                    try
-                    {
-                        asyncres.AsyncWaitHandle.Close();
-                    }
-                    catch (Exception) { }
-
-                    try
-                    {
-                        if (hlp.Client is IDisposable)
-                            ((IDisposable)hlp.Client).Dispose();
-                    }
-                    catch (Exception) { }
-                    hlp.Client = null;
-                }
-            }
-        }
-
-        private class ConnectHelper
-        {
-            public object Mutex = new object();
-            public bool DoCleanup = false;
-            public bool CallbackDone = false;
-            public TcpClient Client;
-            public ConnectHelper(TcpClient client)
-            {
-                Client = client;
-            }
-        }
-
-        public override void Close()
-        {
-            base.Close();
-            if (client != null)
-            {
-                client.Close();
-                client = null;
-            }
-        }
-
-        #region " IDisposable Support "
-        private bool _IsDisposed;
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (client != null)
-                        ((IDisposable)client).Dispose();
-                    base.Dispose(disposing);
-                }
-            }
-            _IsDisposed = true;
-        }
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Transport/TSocketVersionizer.cs b/lib/csharp/src/Transport/TSocketVersionizer.cs
deleted file mode 100644
index 8c2f8e9..0000000
--- a/lib/csharp/src/Transport/TSocketVersionizer.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net.Sockets;
-using System.Reflection;
-using System.Text;
-#if NET45
-using System.Threading.Tasks;
-#endif
-
-namespace Thrift.Transport
-{
-    /// <summary>
-    /// PropertyInfo for the DualMode property of the System.Net.Sockets.Socket class. Used to determine if the sockets are capable of
-    /// automatic IPv4 and IPv6 handling. If DualMode is present the sockets automatically handle IPv4 and IPv6 connections.
-    /// If the DualMode is not available the system configuration determines whether IPv4 or IPv6 is used.
-    /// </summary>
-    internal static class TSocketVersionizer
-    {
-        /// <summary>
-        /// Creates a TcpClient according to the capabilities of the used framework.
-        /// </summary>
-        internal static TcpClient CreateTcpClient()
-        {
-            TcpClient client = null;
-
-#if NET45
-            client = new TcpClient(AddressFamily.InterNetworkV6);
-            client.Client.DualMode = true;
-#else
-            client = new TcpClient(AddressFamily.InterNetwork);
-#endif
-
-            return client;
-        }
-
-        /// <summary>
-        /// Creates a TcpListener according to the capabilities of the used framework.
-        /// </summary>
-        internal static TcpListener CreateTcpListener(Int32 port)
-        {
-            TcpListener listener = null;
-
-#if NET45
-            listener = new TcpListener(System.Net.IPAddress.IPv6Any, port);
-            listener.Server.DualMode = true;
-#else
-
-            listener = new TcpListener(System.Net.IPAddress.Any, port);
-#endif
-
-            return listener;
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TStreamTransport.cs b/lib/csharp/src/Transport/TStreamTransport.cs
deleted file mode 100644
index 304599f..0000000
--- a/lib/csharp/src/Transport/TStreamTransport.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO;
-
-namespace Thrift.Transport
-{
-    public class TStreamTransport : TTransport
-    {
-        protected Stream inputStream;
-        protected Stream outputStream;
-
-        protected TStreamTransport()
-        {
-        }
-
-        public TStreamTransport(Stream inputStream, Stream outputStream)
-        {
-            this.inputStream = inputStream;
-            this.outputStream = outputStream;
-        }
-
-        public Stream OutputStream
-        {
-            get { return outputStream; }
-        }
-
-        public Stream InputStream
-        {
-            get { return inputStream; }
-        }
-
-        public override bool IsOpen
-        {
-            get { return true; }
-        }
-
-        public override void Open()
-        {
-        }
-
-        public override void Close()
-        {
-            if (inputStream != null)
-            {
-                inputStream.Close();
-                inputStream = null;
-            }
-            if (outputStream != null)
-            {
-                outputStream.Close();
-                outputStream = null;
-            }
-        }
-
-        public override int Read(byte[] buf, int off, int len)
-        {
-            if (inputStream == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot read from null inputstream");
-            }
-
-            return inputStream.Read(buf, off, len);
-        }
-
-        public override void Write(byte[] buf, int off, int len)
-        {
-            if (outputStream == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot write to null outputstream");
-            }
-
-            outputStream.Write(buf, off, len);
-        }
-
-        public override void Flush()
-        {
-            if (outputStream == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot flush null outputstream");
-            }
-
-            outputStream.Flush();
-        }
-
-
-        #region " IDisposable Support "
-        private bool _IsDisposed;
-
-        // IDisposable
-        protected override void Dispose(bool disposing)
-        {
-            if (!_IsDisposed)
-            {
-                if (disposing)
-                {
-                    if (InputStream != null)
-                        InputStream.Dispose();
-                    if (OutputStream != null)
-                        OutputStream.Dispose();
-                }
-            }
-            _IsDisposed = true;
-        }
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Transport/TTLSServerSocket.cs b/lib/csharp/src/Transport/TTLSServerSocket.cs
deleted file mode 100644
index 716a97c..0000000
--- a/lib/csharp/src/Transport/TTLSServerSocket.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Net.Security;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace Thrift.Transport
-{
-    /// <summary>
-    /// SSL Server Socket Wrapper Class
-    /// </summary>
-    public class TTLSServerSocket : TServerTransport
-    {
-        /// <summary>
-        /// Underlying tcp server
-        /// </summary>
-        private TcpListener server = null;
-
-        /// <summary>
-        /// The port where the socket listen
-        /// </summary>
-        private int port = 0;
-
-        /// <summary>
-        /// Timeout for the created server socket
-        /// </summary>
-        private readonly int clientTimeout;
-
-        /// <summary>
-        /// Whether or not to wrap new TSocket connections in buffers
-        /// </summary>
-        private bool useBufferedSockets = false;
-
-        /// <summary>
-        /// The servercertificate with the private- and public-key
-        /// </summary>
-        private X509Certificate serverCertificate;
-
-        /// <summary>
-        /// The function to validate the client certificate.
-        /// </summary>
-        private RemoteCertificateValidationCallback clientCertValidator;
-
-        /// <summary>
-        /// The function to determine which certificate to use.
-        /// </summary>
-        private LocalCertificateSelectionCallback localCertificateSelectionCallback;
-
-        /// <summary>
-        /// The SslProtocols value that represents the protocol used for authentication.
-        /// </summary>
-        private readonly SslProtocols sslProtocols;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSServerSocket" /> class.
-        /// </summary>
-        /// <param name="port">The port where the server runs.</param>
-        /// <param name="certificate">The certificate object.</param>
-        public TTLSServerSocket(int port, X509Certificate2 certificate)
-            : this(port, 0, certificate)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSServerSocket" /> class.
-        /// </summary>
-        /// <param name="port">The port where the server runs.</param>
-        /// <param name="clientTimeout">Send/receive timeout.</param>
-        /// <param name="certificate">The certificate object.</param>
-        public TTLSServerSocket(int port, int clientTimeout, X509Certificate2 certificate)
-            : this(port, clientTimeout, false, certificate)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSServerSocket" /> class.
-        /// </summary>
-        /// <param name="port">The port where the server runs.</param>
-        /// <param name="clientTimeout">Send/receive timeout.</param>
-        /// <param name="useBufferedSockets">If set to <c>true</c> [use buffered sockets].</param>
-        /// <param name="certificate">The certificate object.</param>
-        /// <param name="clientCertValidator">The certificate validator.</param>
-        /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
-        /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
-        public TTLSServerSocket(
-            int port,
-            int clientTimeout,
-            bool useBufferedSockets,
-            X509Certificate2 certificate,
-            RemoteCertificateValidationCallback clientCertValidator = null,
-            LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
-            // TODO: Enable Tls11 and Tls12 (TLS 1.1 and 1.2) by default once we start using .NET 4.5+.
-            SslProtocols sslProtocols = SslProtocols.Tls)
-        {
-            if (!certificate.HasPrivateKey)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.Unknown, "Your server-certificate needs to have a private key");
-            }
-
-            this.port = port;
-            this.clientTimeout = clientTimeout;
-            this.serverCertificate = certificate;
-            this.useBufferedSockets = useBufferedSockets;
-            this.clientCertValidator = clientCertValidator;
-            this.localCertificateSelectionCallback = localCertificateSelectionCallback;
-            this.sslProtocols = sslProtocols;
-            try
-            {
-                // Create server socket
-                this.server = TSocketVersionizer.CreateTcpListener(this.port);
-                this.server.Server.NoDelay = true;
-            }
-            catch (Exception ex)
-            {
-                server = null;
-                throw new TTransportException("Could not create ServerSocket on port " + this.port + ".", ex);
-            }
-        }
-
-        /// <summary>
-        /// Starts the server.
-        /// </summary>
-        public override void Listen()
-        {
-            // Make sure accept is not blocking
-            if (this.server != null)
-            {
-                try
-                {
-                    this.server.Start();
-                }
-                catch (SocketException sx)
-                {
-                    throw new TTransportException("Could not accept on listening socket: " + sx.Message, sx);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Callback for Accept Implementation
-        /// </summary>
-        /// <returns>
-        /// TTransport-object.
-        /// </returns>
-        protected override TTransport AcceptImpl()
-        {
-            if (this.server == null)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");
-            }
-
-            try
-            {
-                TcpClient client = this.server.AcceptTcpClient();
-                client.SendTimeout = client.ReceiveTimeout = this.clientTimeout;
-
-                //wrap the client in an SSL Socket passing in the SSL cert
-                TTLSSocket socket = new TTLSSocket(
-                    client,
-                    this.serverCertificate,
-                    true,
-                    this.clientCertValidator,
-                    this.localCertificateSelectionCallback,
-                    this.sslProtocols);
-
-                socket.setupTLS();
-
-                if (useBufferedSockets)
-                {
-                    TBufferedTransport trans = new TBufferedTransport(socket);
-                    return trans;
-                }
-                else
-                {
-                    return socket;
-                }
-
-            }
-            catch (Exception ex)
-            {
-                throw new TTransportException(ex.ToString(), ex);
-            }
-        }
-
-        /// <summary>
-        /// Stops the Server
-        /// </summary>
-        public override void Close()
-        {
-            if (this.server != null)
-            {
-                try
-                {
-                    this.server.Stop();
-                }
-                catch (Exception ex)
-                {
-                    throw new TTransportException("WARNING: Could not close server socket: " + ex, ex);
-                }
-                this.server = null;
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TTLSSocket.cs b/lib/csharp/src/Transport/TTLSSocket.cs
deleted file mode 100644
index 06286dc..0000000
--- a/lib/csharp/src/Transport/TTLSSocket.cs
+++ /dev/null
@@ -1,445 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Net.Security;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace Thrift.Transport
-{
-    /// <summary>
-    /// SSL Socket Wrapper class
-    /// </summary>
-    public class TTLSSocket : TStreamTransport
-    {
-        /// <summary>
-        /// Internal TCP Client
-        /// </summary>
-        private TcpClient client;
-
-        /// <summary>
-        /// The host
-        /// </summary>
-        private string host;
-
-        /// <summary>
-        /// The port
-        /// </summary>
-        private int port;
-
-        /// <summary>
-        /// The timeout for the connection
-        /// </summary>
-        private int timeout;
-
-        /// <summary>
-        /// Internal SSL Stream for IO
-        /// </summary>
-        private SslStream secureStream;
-
-        /// <summary>
-        /// Defines wheter or not this socket is a server socket<br/>
-        /// This is used for the TLS-authentication
-        /// </summary>
-        private bool isServer;
-
-        /// <summary>
-        /// The certificate
-        /// </summary>
-        private X509Certificate certificate;
-
-        /// <summary>
-        /// User defined certificate validator.
-        /// </summary>
-        private RemoteCertificateValidationCallback certValidator;
-
-        /// <summary>
-        /// The function to determine which certificate to use.
-        /// </summary>
-        private LocalCertificateSelectionCallback localCertificateSelectionCallback;
-
-        /// <summary>
-        /// The SslProtocols value that represents the protocol used for authentication.SSL protocols to be used.
-        /// </summary>
-        private readonly SslProtocols sslProtocols;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-        /// </summary>
-        /// <param name="client">An already created TCP-client</param>
-        /// <param name="certificate">The certificate.</param>
-        /// <param name="isServer">if set to <c>true</c> [is server].</param>
-        /// <param name="certValidator">User defined cert validator.</param>
-        /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
-        /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
-        public TTLSSocket(
-            TcpClient client,
-            X509Certificate certificate,
-            bool isServer = false,
-            RemoteCertificateValidationCallback certValidator = null,
-            LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
-            // TODO: Enable Tls11 and Tls12 (TLS 1.1 and 1.2) by default once we start using .NET 4.5+.
-            SslProtocols sslProtocols = SslProtocols.Tls)
-        {
-            this.client = client;
-            this.certificate = certificate;
-            this.certValidator = certValidator;
-            this.localCertificateSelectionCallback = localCertificateSelectionCallback;
-            this.sslProtocols = sslProtocols;
-            this.isServer = isServer;
-            if (isServer && certificate == null)
-            {
-                throw new ArgumentException("TTLSSocket needs certificate to be used for server", "certificate");
-            }
-
-            if (IsOpen)
-            {
-                base.inputStream = client.GetStream();
-                base.outputStream = client.GetStream();
-            }
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-        /// </summary>
-        /// <param name="host">The host, where the socket should connect to.</param>
-        /// <param name="port">The port.</param>
-        /// <param name="certificatePath">The certificate path.</param>
-        /// <param name="certValidator">User defined cert validator.</param>
-        /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
-        /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
-        public TTLSSocket(
-            string host,
-            int port,
-            string certificatePath,
-            RemoteCertificateValidationCallback certValidator = null,
-            LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
-            SslProtocols sslProtocols = SslProtocols.Tls)
-            : this(host, port, 0, X509Certificate.CreateFromCertFile(certificatePath), certValidator, localCertificateSelectionCallback, sslProtocols)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-        /// </summary>
-        /// <param name="host">The host, where the socket should connect to.</param>
-        /// <param name="port">The port.</param>
-        /// <param name="certificate">The certificate.</param>
-        /// <param name="certValidator">User defined cert validator.</param>
-        /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
-        /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
-        public TTLSSocket(
-            string host,
-            int port,
-            X509Certificate certificate = null,
-            RemoteCertificateValidationCallback certValidator = null,
-            LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
-            SslProtocols sslProtocols = SslProtocols.Tls)
-            : this(host, port, 0, certificate, certValidator, localCertificateSelectionCallback, sslProtocols)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-        /// </summary>
-        /// <param name="host">The host, where the socket should connect to.</param>
-        /// <param name="port">The port.</param>
-        /// <param name="timeout">The timeout.</param>
-        /// <param name="certificate">The certificate.</param>
-        /// <param name="certValidator">User defined cert validator.</param>
-        /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
-        /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
-        public TTLSSocket(
-            string host,
-            int port,
-            int timeout,
-            X509Certificate certificate,
-            RemoteCertificateValidationCallback certValidator = null,
-            LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
-            SslProtocols sslProtocols = SslProtocols.Tls)
-        {
-            this.host = host;
-            this.port = port;
-            this.timeout = timeout;
-            this.certificate = certificate;
-            this.certValidator = certValidator;
-            this.localCertificateSelectionCallback = localCertificateSelectionCallback;
-            this.sslProtocols = sslProtocols;
-
-            InitSocket();
-        }
-
-        /// <summary>
-        /// Creates the TcpClient and sets the timeouts
-        /// </summary>
-        private void InitSocket()
-        {
-            client = TSocketVersionizer.CreateTcpClient();
-            client.ReceiveTimeout = client.SendTimeout = timeout;
-            client.Client.NoDelay = true;
-        }
-
-        /// <summary>
-        /// Sets Send / Recv Timeout for IO
-        /// </summary>
-        public int Timeout
-        {
-            set
-            {
-                this.client.ReceiveTimeout = this.client.SendTimeout = this.timeout = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets the TCP client.
-        /// </summary>
-        public TcpClient TcpClient
-        {
-            get
-            {
-                return client;
-            }
-        }
-
-        /// <summary>
-        /// Gets the host.
-        /// </summary>
-        public string Host
-        {
-            get
-            {
-                return host;
-            }
-        }
-
-        /// <summary>
-        /// Gets the port.
-        /// </summary>
-        public int Port
-        {
-            get
-            {
-                return port;
-            }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether TCP Client is Cpen
-        /// </summary>
-        public override bool IsOpen
-        {
-            get
-            {
-                if (this.client == null)
-                {
-                    return false;
-                }
-
-                return this.client.Connected;
-            }
-        }
-
-        /// <summary>
-        /// Validates the certificates!<br/>
-        /// </summary>
-        /// <param name="sender">The sender-object.</param>
-        /// <param name="certificate">The used certificate.</param>
-        /// <param name="chain">The certificate chain.</param>
-        /// <param name="sslValidationErrors">An enum, which lists all the errors from the .NET certificate check.</param>
-        /// <returns></returns>
-        private bool DefaultCertificateValidator(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslValidationErrors)
-        {
-            return (sslValidationErrors == SslPolicyErrors.None);
-        }
-
-        /// <summary>
-        /// Connects to the host and starts the routine, which sets up the TLS
-        /// </summary>
-        public override void Open()
-        {
-            if (IsOpen)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
-            }
-
-            if (string.IsNullOrEmpty(host))
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
-            }
-
-            if (port <= 0)
-            {
-                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
-            }
-
-            if (client == null)
-            {
-                InitSocket();
-            }
-
-            if (timeout == 0)            // no timeout -> infinite
-            {
-                client.Connect(host, port);
-            }
-            else                        // we have a timeout -> use it
-            {
-                ConnectHelper hlp = new ConnectHelper(client);
-                IAsyncResult asyncres = client.BeginConnect(host, port, new AsyncCallback(ConnectCallback), hlp);
-                bool bConnected = asyncres.AsyncWaitHandle.WaitOne(timeout) && client.Connected;
-                if (!bConnected)
-                {
-                    lock (hlp.Mutex)
-                    {
-                        if (hlp.CallbackDone)
-                        {
-                            asyncres.AsyncWaitHandle.Close();
-                            client.Close();
-                        }
-                        else
-                        {
-                            hlp.DoCleanup = true;
-                            client = null;
-                        }
-                    }
-                    throw new TTransportException(TTransportException.ExceptionType.TimedOut, "Connect timed out");
-                }
-            }
-
-            setupTLS();
-        }
-
-        /// <summary>
-        /// Creates a TLS-stream and lays it over the existing socket
-        /// </summary>
-        public void setupTLS()
-        {
-            RemoteCertificateValidationCallback validator = this.certValidator ?? DefaultCertificateValidator;
-
-            if (this.localCertificateSelectionCallback != null)
-            {
-                this.secureStream = new SslStream(
-                    this.client.GetStream(),
-                    false,
-                    validator,
-                    this.localCertificateSelectionCallback
-                );
-            }
-            else
-            {
-                this.secureStream = new SslStream(
-                    this.client.GetStream(),
-                    false,
-                    validator
-                );
-            }
-
-            try
-            {
-                if (isServer)
-                {
-                    // Server authentication
-                    this.secureStream.AuthenticateAsServer(this.certificate, this.certValidator != null, sslProtocols, true);
-                }
-                else
-                {
-                    // Client authentication
-                    X509CertificateCollection certs = certificate != null ? new X509CertificateCollection { certificate } : new X509CertificateCollection();
-                    this.secureStream.AuthenticateAsClient(host, certs, sslProtocols, true);
-                }
-            }
-            catch (Exception)
-            {
-                this.Close();
-                throw;
-            }
-
-            inputStream = this.secureStream;
-            outputStream = this.secureStream;
-        }
-        
-        static void ConnectCallback(IAsyncResult asyncres)
-        {
-            ConnectHelper hlp = asyncres.AsyncState as ConnectHelper;
-            lock (hlp.Mutex)
-            {
-                hlp.CallbackDone = true;
-
-                try
-                {
-                    if (hlp.Client.Client != null)
-                        hlp.Client.EndConnect(asyncres);
-                }
-                catch (Exception)
-                {
-                    // catch that away
-                }
-
-                if (hlp.DoCleanup)
-                {
-                    try
-                    {
-                        asyncres.AsyncWaitHandle.Close();
-                    }
-                    catch (Exception) { }
-
-                    try
-                    {
-                        if (hlp.Client is IDisposable)
-                            ((IDisposable)hlp.Client).Dispose();
-                    }
-                    catch (Exception) { }
-                    hlp.Client = null;
-                }
-            }
-        }
-
-        private class ConnectHelper
-        {
-            public object Mutex = new object();
-            public bool DoCleanup = false;
-            public bool CallbackDone = false;
-            public TcpClient Client;
-            public ConnectHelper(TcpClient client)
-            {
-                Client = client;
-            }
-        }
-
-        /// <summary>
-        /// Closes the SSL Socket
-        /// </summary>
-        public override void Close()
-        {
-            base.Close();
-            if (this.client != null)
-            {
-                this.client.Close();
-                this.client = null;
-            }
-
-            if (this.secureStream != null)
-            {
-                this.secureStream.Close();
-                this.secureStream = null;
-            }
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TTransport.cs b/lib/csharp/src/Transport/TTransport.cs
deleted file mode 100644
index 5e4ac22..0000000
--- a/lib/csharp/src/Transport/TTransport.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO;
-
-namespace Thrift.Transport
-{
-    public abstract class TTransport : IDisposable
-    {
-        public abstract bool IsOpen
-        {
-            get;
-        }
-
-        private byte[] _peekBuffer = new byte[1];
-        private bool _hasPeekByte;
-
-        public bool Peek()
-        {
-            //If we already have a byte read but not consumed, do nothing.
-            if (_hasPeekByte)
-                return true;
-
-            //If transport closed we can't peek.
-            if (!IsOpen)
-                return false;
-
-            //Try to read one byte. If succeeds we will need to store it for the next read.
-            try
-            {
-                int bytes = Read(_peekBuffer, 0, 1);
-                if (bytes == 0)
-                    return false;
-            }
-            catch (IOException)
-            {
-                return false;
-            }
-
-            _hasPeekByte = true;
-            return true;
-        }
-
-        public abstract void Open();
-
-        public abstract void Close();
-
-        protected static void ValidateBufferArgs(byte[] buf, int off, int len)
-        {
-            if (buf == null)
-                throw new ArgumentNullException("buf");
-            if (off < 0)
-                throw new ArgumentOutOfRangeException("Buffer offset is smaller than zero.");
-            if (len < 0)
-                throw new ArgumentOutOfRangeException("Buffer length is smaller than zero.");
-            if (off + len > buf.Length)
-                throw new ArgumentOutOfRangeException("Not enough data.");
-        }
-
-        public abstract int Read(byte[] buf, int off, int len);
-
-        public int ReadAll(byte[] buf, int off, int len)
-        {
-            ValidateBufferArgs(buf, off, len);
-            int got = 0;
-
-            //If we previously peeked a byte, we need to use that first.
-            if (_hasPeekByte)
-            {
-                buf[off + got++] = _peekBuffer[0];
-                _hasPeekByte = false;
-            }
-
-            while (got < len)
-            {
-                int ret = Read(buf, off + got, len - got);
-                if (ret <= 0)
-                {
-                    throw new TTransportException(
-                        TTransportException.ExceptionType.EndOfFile,
-                        "Cannot read, Remote side has closed");
-                }
-                got += ret;
-            }
-            return got;
-        }
-
-        public virtual void Write(byte[] buf)
-        {
-            Write(buf, 0, buf.Length);
-        }
-
-        public abstract void Write(byte[] buf, int off, int len);
-
-        public virtual void Flush()
-        {
-        }
-
-        public virtual IAsyncResult BeginFlush(AsyncCallback callback, object state)
-        {
-            throw new TTransportException(
-                TTransportException.ExceptionType.Unknown,
-                "Asynchronous operations are not supported by this transport.");
-        }
-
-        public virtual void EndFlush(IAsyncResult asyncResult)
-        {
-            throw new TTransportException(
-                TTransportException.ExceptionType.Unknown,
-                "Asynchronous operations are not supported by this transport.");
-        }
-
-        #region " IDisposable Support "
-        // IDisposable
-        protected abstract void Dispose(bool disposing);
-
-        public void Dispose()
-        {
-            // Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-        #endregion
-    }
-}
diff --git a/lib/csharp/src/Transport/TTransportException.cs b/lib/csharp/src/Transport/TTransportException.cs
deleted file mode 100644
index 7f6cc18..0000000
--- a/lib/csharp/src/Transport/TTransportException.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Transport
-{
-    public class TTransportException : TException
-    {
-        protected ExceptionType type;
-
-        public TTransportException()
-            : base()
-        {
-        }
-
-        public TTransportException(ExceptionType type)
-            : this()
-        {
-            this.type = type;
-        }
-
-        public TTransportException(ExceptionType type, string message, Exception inner = null)
-            : base(message, inner)
-        {
-            this.type = type;
-        }
-
-        public TTransportException(string message, Exception inner = null)
-            : base(message, inner)
-        {
-        }
-
-        public ExceptionType Type
-        {
-            get { return type; }
-        }
-
-        public enum ExceptionType
-        {
-            Unknown,
-            NotOpen,
-            AlreadyOpen,
-            TimedOut,
-            EndOfFile,
-            Interrupted
-        }
-    }
-}
diff --git a/lib/csharp/src/Transport/TTransportFactory.cs b/lib/csharp/src/Transport/TTransportFactory.cs
deleted file mode 100644
index 47a0c62..0000000
--- a/lib/csharp/src/Transport/TTransportFactory.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Transport
-{
-    /// <summary>
-    /// From Mark Slee &amp; Aditya Agarwal of Facebook:
-    /// Factory class used to create wrapped instance of Transports.
-    /// This is used primarily in servers, which get Transports from
-    /// a ServerTransport and then may want to mutate them (i.e. create
-    /// a BufferedTransport from the underlying base transport)
-    /// </summary>
-    public class TTransportFactory
-    {
-        public virtual TTransport GetTransport(TTransport trans)
-        {
-            return trans;
-        }
-    }
-}
diff --git a/lib/csharp/src/thrift.snk b/lib/csharp/src/thrift.snk
deleted file mode 100644
index 97bc581..0000000
--- a/lib/csharp/src/thrift.snk
+++ /dev/null
Binary files differ
diff --git a/lib/csharp/test/JSON/JSONTest.csproj b/lib/csharp/test/JSON/JSONTest.csproj
deleted file mode 100644
index f07d43e..0000000
--- a/lib/csharp/test/JSON/JSONTest.csproj
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{E37A0034-DCBF-4886-A0DA-25A03D12D975}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>JSONTest</RootNamespace>
-    <AssemblyName>JSONTest</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
-    <PlatformTarget>x86</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <PlatformTarget>x86</PlatformTarget>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Program.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="app.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Thrift.csproj">
-      <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
-      <Name>Thrift</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/lib/csharp/test/JSON/Program.cs b/lib/csharp/test/JSON/Program.cs
deleted file mode 100644
index f61388a..0000000
--- a/lib/csharp/test/JSON/Program.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-using Thrift.Protocol;
-using Thrift.Transport;
-
-namespace JSONTest
-{
-    class Program
-    {
-        static void Main(string[] args)
-        {
-            TestThrift2365();  // JSON binary decodes too much data
-            TestThrift2336();  // hex encoding using \uXXXX where 0xXXXX > 0xFF
-            TestThrift3403(); // JSON escaped unicode surrogate pair support.
-        }
-
-
-        public static void TestThrift2365()
-        {
-            var rnd = new Random();
-            for (var len = 0; len < 10; ++len)
-            {
-                byte[] dataWritten = new byte[len];
-                rnd.NextBytes(dataWritten);
-
-                Stream stm = new MemoryStream();
-                TTransport trans = new TStreamTransport(null, stm);
-                TProtocol prot = new TJSONProtocol(trans);
-                prot.WriteBinary(dataWritten);
-
-                stm.Position = 0;
-                trans = new TStreamTransport(stm, null);
-                prot = new TJSONProtocol(trans);
-                byte[] dataRead = prot.ReadBinary();
-
-                Debug.Assert(dataRead.Length == dataWritten.Length);
-                for (var i = 0; i < dataRead.Length; ++i)
-                    Debug.Assert(dataRead[i] == dataWritten[i]);
-            }
-        }
-
-
-        public static void TestThrift2336()
-        {
-            const string RUSSIAN_TEXT = "\u0420\u0443\u0441\u0441\u043a\u043e\u0435 \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435";
-            const string RUSSIAN_JSON = "\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u043e\\u0435 \\u041d\\u0430\\u0437\\u0432\\u0430\\u043d\\u0438\\u0435\"";
-
-            // prepare buffer with JSON data
-            byte[] rawBytes = new byte[RUSSIAN_JSON.Length];
-            for (var i = 0; i < RUSSIAN_JSON.Length; ++i)
-                rawBytes[i] = (byte)(RUSSIAN_JSON[i] & (char)0xFF);  // only low bytes
-
-            // parse and check
-            var stm = new MemoryStream(rawBytes);
-            var trans = new TStreamTransport(stm, null);
-            var prot = new TJSONProtocol(trans);
-            Debug.Assert(prot.ReadString() == RUSSIAN_TEXT, "reading JSON with hex-encoded chars > 8 bit");
-        }
-
-        public static void TestThrift3403()
-        {
-            string GCLEF_TEXT = "\ud834\udd1e";
-            const string GCLEF_JSON = "\"\\ud834\\udd1e\"";
-
-            // parse and check
-            var stm = new MemoryStream(Encoding.UTF8.GetBytes(GCLEF_JSON));
-            var trans = new TStreamTransport(stm, null);
-            var prot = new TJSONProtocol(trans);
-            Debug.Assert(prot.ReadString() == GCLEF_TEXT, "reading JSON with surrogate pair hex-encoded chars");
-        }
-    }
-}
diff --git a/lib/csharp/test/JSON/Properties/AssemblyInfo.cs b/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
deleted file mode 100644
index fdff4a1..0000000
--- a/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die mit einer Assembly verknüpft sind.
-[assembly: AssemblyTitle("JSONTest")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
-// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
-// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("2b2e7d56-3e65-4368-92d7-e34d56b7105e")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-//      Hauptversion
-//      Nebenversion
-//      Buildnummer
-//      Revision
-//
-// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
-// übernehmen, indem Sie "*" eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/lib/csharp/test/JSON/app.config b/lib/csharp/test/JSON/app.config
deleted file mode 100644
index 9c1919d..0000000
--- a/lib/csharp/test/JSON/app.config
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<configuration>
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
diff --git a/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs b/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
deleted file mode 100644
index c810a08..0000000
--- a/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using Thrift.Collections;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift;
-using Test.Multiplex;
-
-namespace Test.Multiplex.Client
-{
-    public class TestClient
-    {
-        static void Execute(int port)
-        {
-            try
-            {
-                TTransport trans;
-                trans = new TSocket("localhost", port);
-                trans = new TFramedTransport(trans);
-                trans.Open();
-
-                TProtocol Protocol = new TBinaryProtocol(trans, true, true);
-
-                TMultiplexedProtocol multiplex;
-
-                multiplex = new TMultiplexedProtocol(Protocol, Constants.NAME_BENCHMARKSERVICE);
-                BenchmarkService.Iface bench = new BenchmarkService.Client(multiplex);
-
-                multiplex = new TMultiplexedProtocol(Protocol, Constants.NAME_AGGR);
-                Aggr.Iface aggr = new Aggr.Client(multiplex);
-
-                for (sbyte i = 1; 10 >= i; ++i)
-                {
-                    aggr.addValue(bench.fibonacci(i));
-                }
-
-                foreach (int k in aggr.getValues())
-                {
-                    Console.Write(k.ToString() + " ");
-                    Console.WriteLine("");
-                }
-                trans.Close();
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine(e.Message);
-            }
-        }
-
-        static void Main(string[] args)
-        {
-            int port = 9090;
-            if (args.Length > 0)
-            {
-                port = ushort.Parse(args[0]);
-            }
-            Execute(port);
-            Console.WriteLine("done.");
-        }
-    }
-}
-
diff --git a/lib/csharp/test/Multiplex/Client/MultiplexClient.csproj b/lib/csharp/test/Multiplex/Client/MultiplexClient.csproj
deleted file mode 100644
index 551640b..0000000
--- a/lib/csharp/test/Multiplex/Client/MultiplexClient.csproj
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{5E91DA17-E548-415F-8C9F-9E84EDF8EE06}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>MultiplexClient</RootNamespace>
-    <AssemblyName>MultiplexClient</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>0.14.0.0</ApplicationVersion>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>..\bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>..\bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="..\Multiplex.Test.Common.cs">
-      <Link>Multiplex.Test.Common.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\Aggr.cs" />
-    <Compile Include="..\gen-csharp\BenchmarkService.cs" />
-    <Compile Include="..\gen-csharp\Error.cs" />
-    <Compile Include="Multiplex.Test.Client.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\..\src\Thrift.csproj">
-      <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
-      <Name>Thrift</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-  <PropertyGroup>
-    <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\contrib\async-test\aggr.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\lib\rb\benchmark\Benchmark.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-</PreBuildEvent>
-  </PropertyGroup>
-</Project>
diff --git a/lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs b/lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs
deleted file mode 100644
index ce6692f..0000000
--- a/lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("MultiplexClient")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("66FC61E5-420B-4b56-8012-D6D6CE22537F")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/test/Multiplex/Makefile.am b/lib/csharp/test/Multiplex/Makefile.am
deleted file mode 100644
index 9c1f1b8..0000000
--- a/lib/csharp/test/Multiplex/Makefile.am
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-GENERATED = \
-	gen-csharp/Aggr.cs \
-	gen-csharp/BenchmarkService.cs \
-	gen-csharp/Error.cs
-
-BUILT_SOURCES = $(GENERATED)
-
-THRIFT = $(top_builddir)/compiler/cpp/thrift
-
-gen-csharp/Aggr.cs: $(top_srcdir)/contrib/async-test/aggr.thrift
-	$(THRIFT) --gen csharp $<
-
-gen-csharp/BenchmarkService.cs gen-csharp/Error.cs: $(top_srcdir)/lib/rb/benchmark/Benchmark.thrift
-	$(THRIFT) --gen csharp $<
-
-ThriftImpl.dll: Multiplex.Test.Common.cs $(GENERATED) ../../Thrift.dll
-	$(CSC) $(CSC_DEFINES) -t:library -out:./ThriftImpl.dll -reference:../../Thrift.dll $(GENERATED) $<
-
-MultiplexClient.exe: Client/Multiplex.Test.Client.cs ThriftImpl.dll
-	$(CSC) $(CSC_DEFINES) -out:$@ -reference:../../Thrift.dll -reference:ThriftImpl.dll $<
-
-MultiplexServer.exe: Server/Multiplex.Test.Server.cs ThriftImpl.dll
-	$(CSC) $(CSC_DEFINES) -out:$@ -reference:../../Thrift.dll -reference:ThriftImpl.dll $<
-
-CLEANFILES = \
-	MultiplexClient.exe \
-	MultiplexServer.exe \
-	ThriftImpl.dll
-
-DISTCLEANFILES = \
-	Makefile.in
-
-clean-local:
-	$(RM) -rf gen-csharp
-
-dist-hook:
-	$(RM) -r $(distdir)/gen-csharp/
-
-TESTPORT = 9501
-check-local: MultiplexServer.exe MultiplexClient.exe
-	echo $(TESTPORT)
-	MONO_PATH=../../ timeout 10 mono MultiplexServer.exe $(TESTPORT) &
-	sleep 1
-	MONO_PATH=../../ mono MultiplexClient.exe $(TESTPORT)
diff --git a/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs b/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
deleted file mode 100644
index a687852..0000000
--- a/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// Distributed under the Thrift Software License
-//
-// See accompanying file LICENSE or visit the Thrift site at:
-// http://developers.facebook.com/thrift/
-using System;
-using System.Collections.Generic;
-using Thrift.Collections;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-
-namespace Test.Multiplex
-{
-    public class Constants
-    {
-        public const string NAME_BENCHMARKSERVICE = "BenchmarkService";
-        public const string NAME_AGGR             = "Aggr";
-    }
-}
-
-
diff --git a/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs b/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
deleted file mode 100644
index 9786189..0000000
--- a/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using Thrift.Collections;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift;
-using Test.Multiplex;
-
-namespace Test.Multiplex.Server
-{
-    public class TestServer
-    {
-        class BenchmarkServiceImpl : BenchmarkService.Iface
-        {
-            public int fibonacci(sbyte n)
-            {
-                int prev, next, result;
-                prev   = 0;
-                result = 1;
-                while (n > 0)
-                {
-                    next   = result + prev;
-                    prev   = result;
-                    result = next;
-                    --n;
-                }
-                return result;
-            }
-        }
-
-        class AggrServiceImpl : Aggr.Iface
-        {
-            List<int> values = new List<int>();
-
-            public void addValue(int value)
-            {
-                values.Add(value);
-            }
-
-            public List<int> getValues()
-            {
-                return values;
-            }
-        }
-
-        static void Execute(int port)
-        {
-            try
-            {
-                // create protocol factory, default to BinaryProtocol
-                TProtocolFactory ProtocolFactory = new TBinaryProtocol.Factory(true,true);
-                TServerTransport servertrans = new TServerSocket(port, 0, false);
-                TTransportFactory TransportFactory = new TFramedTransport.Factory();
-
-                BenchmarkService.Iface benchHandler = new BenchmarkServiceImpl();
-                TProcessor benchProcessor = new BenchmarkService.Processor(benchHandler);
-
-                Aggr.Iface aggrHandler = new AggrServiceImpl();
-                TProcessor aggrProcessor = new Aggr.Processor(aggrHandler);
-
-                TMultiplexedProcessor multiplex = new TMultiplexedProcessor();
-                multiplex.RegisterProcessor(Constants.NAME_BENCHMARKSERVICE, benchProcessor);
-                multiplex.RegisterProcessor(Constants.NAME_AGGR, aggrProcessor);
-
-                TServer ServerEngine = new TSimpleServer(multiplex, servertrans, TransportFactory, ProtocolFactory);
-
-                Console.WriteLine("Starting the server ...");
-                ServerEngine.Serve();
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine(e.Message);
-            }
-        }
-
-        static void Main(string[] args)
-        {
-            int port = 9090;
-            if (args.Length > 0)
-            {
-                port = ushort.Parse(args[0]);
-            }
-            Execute(port);
-        }
-    }
-}
-
diff --git a/lib/csharp/test/Multiplex/Server/MultiplexServer.csproj b/lib/csharp/test/Multiplex/Server/MultiplexServer.csproj
deleted file mode 100644
index 771ee12..0000000
--- a/lib/csharp/test/Multiplex/Server/MultiplexServer.csproj
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{D592BDF3-0DCE-48FB-890F-E4AE1D9CE7CD}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>MultiplexServer</RootNamespace>
-    <AssemblyName>MultiplexServer</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>0.14.0.0</ApplicationVersion>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>..\bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>..\bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="..\Multiplex.Test.Common.cs">
-      <Link>Multiplex.Test.Common.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\Aggr.cs" />
-    <Compile Include="..\gen-csharp\BenchmarkService.cs" />
-    <Compile Include="..\gen-csharp\Error.cs" />
-    <Compile Include="Multiplex.Test.Server.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\..\src\Thrift.csproj">
-      <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
-      <Name>Thrift</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-  <PropertyGroup>
-    <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\contrib\async-test\aggr.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\lib\rb\benchmark\Benchmark.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-</PreBuildEvent>
-  </PropertyGroup>
-</Project>
diff --git a/lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs b/lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs
deleted file mode 100644
index 50b11af..0000000
--- a/lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("MultiplexServer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("F2F436C1-3D4F-411a-ADC3-B98848476A8E")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs b/lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs
deleted file mode 100644
index 855184f..0000000
--- a/lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Web.Mvc;
-
-namespace ThriftMVCTest
-{
-    public static class FilterConfig
-    {
-        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
-        {
-            filters.Add(new HandleErrorAttribute());
-        }
-    }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs b/lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs
deleted file mode 100644
index b4b6023..0000000
--- a/lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Web.Mvc;
-using System.Web.Routing;
-
-namespace ThriftMVCTest
-{
-    public static class RouteConfig
-    {
-        public static void RegisterRoutes(RouteCollection routes)
-        {
-            routes.IgnoreRoute("{resource}.thrift");
-            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
-
-            routes.MapRoute(
-                name: "Default",
-                url: "{controller}/{action}/{id}",
-                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
-            );
-        }
-    }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs b/lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs
deleted file mode 100644
index 7f26184..0000000
--- a/lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using Thrift.Transport;
-
-namespace ThriftMVCTest
-{
-    public class AsyncHttpHandler : THttpTaskAsyncHandler
-    {
-        public AsyncHttpHandler()
-            : base(
-                new Thrift.Test.SecondService.AsyncProcessor(new SecondServiceImpl()))
-        {
-        }
-    }
-}
\ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs b/lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs
deleted file mode 100644
index c9a1ec4..0000000
--- a/lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Threading.Tasks;
-using System.Web.Mvc;
-using Thrift.Protocol;
-using Thrift.Test;
-using Thrift.Transport;
-
-namespace ThriftMVCTest.Controllers
-{
-    public class HomeController : Controller
-    {
-        public ActionResult Index()
-        {
-            return View();
-        }
-
-        public async Task<ActionResult> TestThriftAsync()
-        {
-            var baseUri = new Uri(string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority,
-                Url.Content("~")));
-
-            SecondService.IAsync asyncService =
-                new SecondService.Client(new TBinaryProtocol(new THttpClient(new Uri(baseUri, "Async.thrift"))));
-
-            var result = await asyncService.secondtestStringAsync("TestString");
-            if (result != "testString(\"TestString\")")
-            {
-                throw new Exception("The wrong result was returned");
-            }
-
-            return RedirectToAction("Index");
-        }
-
-        public ActionResult TestThriftSync()
-        {
-            var baseUri = new Uri(string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority,
-                Url.Content("~")));
-
-            SecondService.ISync service =
-                new SecondService.Client(new TBinaryProtocol(new THttpClient(new Uri(baseUri, "Sync.thrift"))));
-
-            var result = service.secondtestString("TestString");
-            if (result != "testString(\"TestString\")")
-            {
-                throw new Exception("The wrong result was returned");
-            }
-
-            return RedirectToAction("Index");
-        }
-    }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/Global.asax b/lib/csharp/test/ThriftMVCTest/Global.asax
deleted file mode 100644
index 7bb688c..0000000
--- a/lib/csharp/test/ThriftMVCTest/Global.asax
+++ /dev/null
@@ -1,19 +0,0 @@
-<%@ Application Codebehind="Global.asax.cs" Inherits="ThriftMVCTest.MvcApplication" Language="C#" %>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
diff --git a/lib/csharp/test/ThriftMVCTest/Global.asax.cs b/lib/csharp/test/ThriftMVCTest/Global.asax.cs
deleted file mode 100644
index 59731ef..0000000
--- a/lib/csharp/test/ThriftMVCTest/Global.asax.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Web.Mvc;
-using System.Web.Routing;
-
-namespace ThriftMVCTest
-{
-    public class MvcApplication : System.Web.HttpApplication
-    {
-        protected void Application_Start()
-        {
-            AreaRegistration.RegisterAllAreas();
-            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
-            RouteConfig.RegisterRoutes(RouteTable.Routes);
-        }
-    }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs b/lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs
deleted file mode 100644
index a87107c..0000000
--- a/lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ThriftMVCTest")]
-[assembly: AssemblyDescription("A web project for testing the thrift ASP.NET features.")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("366f9bd0-3c0e-48aa-b2ca-61fd4a93e427")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs b/lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs
deleted file mode 100644
index fad301a..0000000
--- a/lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Threading.Tasks;
-using Thrift.Test;
-
-namespace ThriftMVCTest
-{
-    public class SecondServiceImpl : SecondService.IAsync, SecondService.ISync
-    {
-        public Task<string> secondtestStringAsync(string thing)
-        {
-            return Task.FromResult(thing);
-        }
-
-        public string secondtestString(string thing)
-        {
-            return "testString(\"" + thing + "\")";
-        }
-    }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs b/lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs
deleted file mode 100644
index 4fe2662..0000000
--- a/lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using Thrift.Transport;
-
-namespace ThriftMVCTest
-{
-    public class SyncHttpHandler : THttpHandler
-    {
-        public SyncHttpHandler()
-            : base(
-                new Thrift.Test.SecondService.Processor(new SecondServiceImpl()))
-        {
-        }
-    }
-}
\ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj b/lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj
deleted file mode 100644
index 0eb969a..0000000
--- a/lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>
-    </ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{891B4487-C7BA-427E-BBC8-4C596C229A10}</ProjectGuid>
-    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>ThriftMVCTest</RootNamespace>
-    <AssemblyName>ThriftMVCTest</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <MvcBuildViews>false</MvcBuildViews>
-    <UseIISExpress>true</UseIISExpress>
-    <IISExpressSSLPort />
-    <IISExpressAnonymousAuthentication />
-    <IISExpressWindowsAuthentication />
-    <IISExpressUseClassicPipelineMode />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Web.DynamicData" />
-    <Reference Include="System.Web.Entity" />
-    <Reference Include="System.Web.ApplicationServices" />
-    <Reference Include="System.ComponentModel.DataAnnotations" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Web" />
-    <Reference Include="System.Web.Extensions" />
-    <Reference Include="System.Web.Abstractions" />
-    <Reference Include="System.Web.Routing" />
-    <Reference Include="System.Xml" />
-    <Reference Include="System.Configuration" />
-    <Reference Include="System.Web.Services" />
-    <Reference Include="System.EnterpriseServices" />
-    <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Net.Http">
-    </Reference>
-    <Reference Include="System.Net.Http.WebRequest">
-    </Reference>
-    <Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <Private>True</Private>
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
-    </Reference>
-    <Reference Include="ThriftImpl">
-      <HintPath>.\ThriftImpl.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="App_Start\FilterConfig.cs" />
-    <Compile Include="App_Start\RouteConfig.cs" />
-    <Compile Include="SyncHttpHandler.cs" />
-    <Compile Include="AsyncHttpHandler.cs" />
-    <Compile Include="Controllers\HomeController.cs" />
-    <Compile Include="Global.asax.cs">
-      <DependentUpon>Global.asax</DependentUpon>
-    </Compile>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="SecondServiceImpl.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="favicon.ico" />
-    <Content Include="Global.asax" />
-    <Content Include="Web.config" />
-    <Content Include="Web.Debug.config">
-      <DependentUpon>Web.config</DependentUpon>
-    </Content>
-    <Content Include="Web.Release.config">
-      <DependentUpon>Web.config</DependentUpon>
-    </Content>
-    <Content Include="Views\Web.config" />
-    <Content Include="Views\_ViewStart.cshtml" />
-    <Content Include="Views\Shared\_Layout.cshtml" />
-    <Content Include="Views\Home\Index.cshtml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="App_Data\" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="packages.config">
-      <SubType>Designer</SubType>
-    </Content>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Thrift.45.csproj">
-      <Project>{ebce35da-cf6a-42bc-a357-a9c09b534299}</Project>
-      <Name>Thrift.45</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-  </PropertyGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
-  <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
-    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
-  </Target>
-  <ProjectExtensions>
-    <VisualStudio>
-      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
-        <WebProjectProperties>
-          <UseIIS>True</UseIIS>
-          <AutoAssignPort>True</AutoAssignPort>
-          <DevelopmentServerPort>57482</DevelopmentServerPort>
-          <DevelopmentServerVPath>/</DevelopmentServerVPath>
-          <IISUrl>http://localhost:57482/</IISUrl>
-          <NTLMAuthentication>False</NTLMAuthentication>
-          <UseCustomServer>False</UseCustomServer>
-          <CustomServerUrl>
-          </CustomServerUrl>
-          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
-        </WebProjectProperties>
-      </FlavorProperties>
-    </VisualStudio>
-  </ProjectExtensions>
-  <PropertyGroup>
-    <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\test\ThriftTest.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\compiler\cpp\Debug\thrift.exe" --gen csharp:async=true -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-"$(MSBuildToolsPath)\Csc.exe" /t:library /out:"$(ProjectDir)ThriftImpl.dll" /recurse:"$(ProjectDir)gen-csharp"\* /reference:"$(ProjectDir)..\..\src\bin\Debug\Thrift45.dll"</PreBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target> -->
-</Project>
\ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml b/lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml
deleted file mode 100644
index f0ca7da..0000000
--- a/lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml
+++ /dev/null
@@ -1,25 +0,0 @@
-@*
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*@
-
-@{
-    ViewBag.Title = "Home Page";
-}
-
-<p>@Html.ActionLink("Test Thrift Async Service", "TestThriftAsync")</p>
-<p>@Html.ActionLink("Test Thrift Sync Service", "TestThriftSync")</p>
diff --git a/lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml b/lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml
deleted file mode 100644
index b41c99a..0000000
--- a/lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml
+++ /dev/null
@@ -1,30 +0,0 @@
-@*
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*@
-
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Thrift ASP.NET Test</title>
-</head>
-<body>
-    @RenderBody()
-</body>
-</html>
diff --git a/lib/csharp/test/ThriftMVCTest/Views/Web.config b/lib/csharp/test/ThriftMVCTest/Views/Web.config
deleted file mode 100644
index 3c21138..0000000
--- a/lib/csharp/test/ThriftMVCTest/Views/Web.config
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<configuration>
-  <configSections>
-    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
-      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
-      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
-    </sectionGroup>
-  </configSections>
-
-  <system.web.webPages.razor>
-    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
-    <pages pageBaseType="System.Web.Mvc.WebViewPage">
-      <namespaces>
-        <add namespace="System.Web.Mvc" />
-        <add namespace="System.Web.Mvc.Ajax" />
-        <add namespace="System.Web.Mvc.Html" />
-        <add namespace="System.Web.Optimization"/>
-        <add namespace="System.Web.Routing" />
-        <add namespace="ThriftMVCTest" />
-      </namespaces>
-    </pages>
-  </system.web.webPages.razor>
-
-  <appSettings>
-    <add key="webpages:Enabled" value="false" />
-  </appSettings>
-
-  <system.webServer>
-    <handlers>
-      <remove name="BlockViewHandler"/>
-      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
-    </handlers>
-  </system.webServer>
-
-  <system.web>
-    <compilation>
-      <assemblies>
-        <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
-      </assemblies>
-    </compilation>
-  </system.web>
-</configuration>
diff --git a/lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml b/lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml
deleted file mode 100644
index 8cde2ee..0000000
--- a/lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml
+++ /dev/null
@@ -1,22 +0,0 @@
-@*
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*@
-
-@{
-    Layout = "~/Views/Shared/_Layout.cshtml";
-}
diff --git a/lib/csharp/test/ThriftMVCTest/Web.Debug.config b/lib/csharp/test/ThriftMVCTest/Web.Debug.config
deleted file mode 100644
index 45d56d8..0000000
--- a/lib/csharp/test/ThriftMVCTest/Web.Debug.config
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
-  <!--
-    In the example below, the "SetAttributes" transform will change the value of
-    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
-    finds an attribute "name" that has a value of "MyDB".
-
-    <connectionStrings>
-      <add name="MyDB"
-        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
-        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
-    </connectionStrings>
-  -->
-  <system.web>
-    <!--
-      In the example below, the "Replace" transform will replace the entire
-      <customErrors> section of your Web.config file.
-      Note that because there is only one customErrors section under the
-      <system.web> node, there is no need to use the "xdt:Locator" attribute.
-
-      <customErrors defaultRedirect="GenericError.htm"
-        mode="RemoteOnly" xdt:Transform="Replace">
-        <error statusCode="500" redirect="InternalError.htm"/>
-      </customErrors>
-    -->
-  </system.web>
-</configuration>
diff --git a/lib/csharp/test/ThriftMVCTest/Web.Release.config b/lib/csharp/test/ThriftMVCTest/Web.Release.config
deleted file mode 100644
index 157c340..0000000
--- a/lib/csharp/test/ThriftMVCTest/Web.Release.config
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
-  <!--
-    In the example below, the "SetAttributes" transform will change the value of
-    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
-    finds an attribute "name" that has a value of "MyDB".
-
-    <connectionStrings>
-      <add name="MyDB"
-        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
-        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
-    </connectionStrings>
-  -->
-  <system.web>
-    <compilation xdt:Transform="RemoveAttributes(debug)" />
-    <!--
-      In the example below, the "Replace" transform will replace the entire
-      <customErrors> section of your Web.config file.
-      Note that because there is only one customErrors section under the
-      <system.web> node, there is no need to use the "xdt:Locator" attribute.
-
-      <customErrors defaultRedirect="GenericError.htm"
-        mode="RemoteOnly" xdt:Transform="Replace">
-        <error statusCode="500" redirect="InternalError.htm"/>
-      </customErrors>
-    -->
-  </system.web>
-</configuration>
diff --git a/lib/csharp/test/ThriftMVCTest/Web.config b/lib/csharp/test/ThriftMVCTest/Web.config
deleted file mode 100644
index 9c57d11..0000000
--- a/lib/csharp/test/ThriftMVCTest/Web.config
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-
-<!--
-  For more information on how to configure your ASP.NET application, please visit
-  http://go.microsoft.com/fwlink/?LinkId=301880
-  -->
-<configuration>
-  <appSettings>
-    <add key="webpages:Version" value="3.0.0.0" />
-    <add key="webpages:Enabled" value="false" />
-    <add key="ClientValidationEnabled" value="true" />
-    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
-    <add key="owin:AutomaticAppStartup" value="false" />
-  </appSettings>
-  <system.web>
-    <authentication mode="None" />
-    <compilation debug="true" targetFramework="4.5" />
-    <httpRuntime targetFramework="4.5" />
-  </system.web>
-  <system.webServer>
-    <modules>
-      <remove name="FormsAuthentication" />
-    </modules>
-    <handlers>
-      <add name="AsyncHttpHandler" verb="*" path="Async.thrift" type="ThriftMVCTest.AsyncHttpHandler, ThriftMVCTest" />
-      <add name="SyncHttpHandler" verb="*" path="Sync.thrift" type="ThriftMVCTest.SyncHttpHandler, ThriftMVCTest" />
-    </handlers>
-  </system.webServer>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
-        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
-        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-</configuration>
\ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/favicon.ico b/lib/csharp/test/ThriftMVCTest/favicon.ico
deleted file mode 100644
index a3a7999..0000000
--- a/lib/csharp/test/ThriftMVCTest/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/lib/csharp/test/ThriftMVCTest/packages.config b/lib/csharp/test/ThriftMVCTest/packages.config
deleted file mode 100644
index 98c8416..0000000
--- a/lib/csharp/test/ThriftMVCTest/packages.config
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<packages>
-  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
-  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
-  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
-  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
-</packages>
\ No newline at end of file
diff --git a/lib/delphi/Thrift.groupproj b/lib/delphi/Thrift.groupproj
deleted file mode 100644
index f41f293..0000000
--- a/lib/delphi/Thrift.groupproj
+++ /dev/null
@@ -1,120 +0,0 @@
-	<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-		<PropertyGroup>
-			<ProjectGuid>{86AE16E4-18D4-4C07-B06C-491E22A26C74}</ProjectGuid>
-		</PropertyGroup>
-		<ItemGroup>
-			<Projects Include="test\client.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\server.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\multiplexed\Multiplex.Test.Client.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\multiplexed\Multiplex.Test.Server.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\serializer\TestSerializer.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\skip\skiptest_version2.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\skip\skiptest_version1.dproj">
-				<Dependencies/>
-			</Projects>
-			<Projects Include="test\typeregistry\TestTypeRegistry.dproj">
-				<Dependencies/>
-			</Projects>
-		</ItemGroup>
-		<ProjectExtensions>
-			<Borland.Personality>Default.Personality.12</Borland.Personality>
-			<Borland.ProjectType/>
-			<BorlandProject>
-				<Default.Personality/>
-			</BorlandProject>
-		</ProjectExtensions>
-		<Target Name="client">
-			<MSBuild Projects="test\client.dproj"/>
-		</Target>
-		<Target Name="client:Clean">
-			<MSBuild Projects="test\client.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="client:Make">
-			<MSBuild Projects="test\client.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="server">
-			<MSBuild Projects="test\server.dproj"/>
-		</Target>
-		<Target Name="server:Clean">
-			<MSBuild Projects="test\server.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="server:Make">
-			<MSBuild Projects="test\server.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="Multiplex_Test_Client">
-			<MSBuild Projects="test\multiplexed\Multiplex.Test.Client.dproj"/>
-		</Target>
-		<Target Name="Multiplex_Test_Client:Clean">
-			<MSBuild Projects="test\multiplexed\Multiplex.Test.Client.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="Multiplex_Test_Client:Make">
-			<MSBuild Projects="test\multiplexed\Multiplex.Test.Client.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="Multiplex_Test_Server">
-			<MSBuild Projects="test\multiplexed\Multiplex.Test.Server.dproj"/>
-		</Target>
-		<Target Name="Multiplex_Test_Server:Clean">
-			<MSBuild Projects="test\multiplexed\Multiplex.Test.Server.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="Multiplex_Test_Server:Make">
-			<MSBuild Projects="test\multiplexed\Multiplex.Test.Server.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="TestSerializer">
-			<MSBuild Projects="test\serializer\TestSerializer.dproj"/>
-		</Target>
-		<Target Name="TestSerializer:Clean">
-			<MSBuild Projects="test\serializer\TestSerializer.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="TestSerializer:Make">
-			<MSBuild Projects="test\serializer\TestSerializer.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="skiptest_version2">
-			<MSBuild Projects="test\skip\skiptest_version2.dproj"/>
-		</Target>
-		<Target Name="skiptest_version2:Clean">
-			<MSBuild Projects="test\skip\skiptest_version2.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="skiptest_version2:Make">
-			<MSBuild Projects="test\skip\skiptest_version2.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="skiptest_version1">
-			<MSBuild Projects="test\skip\skiptest_version1.dproj"/>
-		</Target>
-		<Target Name="skiptest_version1:Clean">
-			<MSBuild Projects="test\skip\skiptest_version1.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="skiptest_version1:Make">
-			<MSBuild Projects="test\skip\skiptest_version1.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="TestTypeRegistry">
-			<MSBuild Projects="test\typeregistry\TestTypeRegistry.dproj"/>
-		</Target>
-		<Target Name="TestTypeRegistry:Clean">
-			<MSBuild Projects="test\typeregistry\TestTypeRegistry.dproj" Targets="Clean"/>
-		</Target>
-		<Target Name="TestTypeRegistry:Make">
-			<MSBuild Projects="test\typeregistry\TestTypeRegistry.dproj" Targets="Make"/>
-		</Target>
-		<Target Name="Build">
-			<CallTarget Targets="client;server;Multiplex_Test_Client;Multiplex_Test_Server;TestSerializer;skiptest_version2;skiptest_version1;TestTypeRegistry"/>
-		</Target>
-		<Target Name="Clean">
-			<CallTarget Targets="client:Clean;server:Clean;Multiplex_Test_Client:Clean;Multiplex_Test_Server:Clean;TestSerializer:Clean;skiptest_version2:Clean;skiptest_version1:Clean;TestTypeRegistry:Clean"/>
-		</Target>
-		<Target Name="Make">
-			<CallTarget Targets="client:Make;server:Make;Multiplex_Test_Client:Make;Multiplex_Test_Server:Make;TestSerializer:Make;skiptest_version2:Make;skiptest_version1:Make;TestTypeRegistry:Make"/>
-		</Target>
-		<Import Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')" Project="$(BDS)\Bin\CodeGear.Group.Targets"/>
-	</Project>
diff --git a/lib/delphi/Thrift.groupproj.local b/lib/delphi/Thrift.groupproj.local
deleted file mode 100644
index 9e6e18d..0000000
--- a/lib/delphi/Thrift.groupproj.local
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<BorlandProject>
-	<Transactions>
-    <Transaction>1899.12.30 00:00:00.000.873,E:\D\TPCPP\Thrift\wc-XE-all\wc-JensG-haxe\lib\delphi\Thrift.groupproj=C:\Users\Jens\Documents\RAD Studio\Projekte\ProjectGroup1.groupproj</Transaction>
-  </Transactions>
-	<Default.Personality>
-		<Projects ActiveProject="E:\D\TPCPP\Thrift\wc-XE-all\wc-JensG-haxe\lib\delphi\test\client.dproj"/>
-	</Default.Personality>
-</BorlandProject>
diff --git a/lib/delphi/test/Performance/Referenz.txt b/lib/delphi/test/Performance/Referenz.txt
deleted file mode 100644
index 53cb154..0000000
--- a/lib/delphi/test/Performance/Referenz.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Delphi TestClient 0.14.0
-Setting up for ProtocolPeformanceTest ...
-RunTest(binary): write = 2650 msec
-RunTest(binary): read = 3135 msec
-RunTest(compact): write = 2807 msec
-RunTest(compact): read = 3053 msec
-RunTest(JSON): write = 13251 msec
-RunTest(JSON): read = 18759 msec
-RunTest(binary + buffered): write = 2635 msec
-RunTest(binary + buffered): read = 3109 msec
-RunTest(compact + buffered): write = 2788 msec
-RunTest(compact + buffered): read = 3069 msec
-RunTest(JSON + buffered): write = 13604 msec
-RunTest(JSON + buffered): read = 21537 msec
-RunTest(binary + framed): write = 3019 msec
-RunTest(binary + framed): read = 3573 msec
-RunTest(compact + framed): write = 3201 msec
-RunTest(compact + framed): read = 3504 msec
-RunTest(JSON + framed): write = 15093 msec
-RunTest(JSON + framed): read = 21548 msec
-Hit ENTER ...
\ No newline at end of file
diff --git a/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj b/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj
index 740d223..35138d8 100644
--- a/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj
+++ b/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj
@@ -25,7 +25,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
+    <PackageReference Include="BenchmarkDotNet" Version="0.12.0" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj b/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj
index 318757a..7c5639b 100644
--- a/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj
+++ b/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj
@@ -32,10 +32,10 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="CompareNETObjects" Version="4.66.0" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
-    <PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
-    <PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
+    <PackageReference Include="CompareNETObjects" Version="4.64.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
     <PackageReference Include="System.ServiceModel.Primitives" Version="4.7.0" />
   </ItemGroup>
   <ItemGroup>
diff --git a/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj b/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj
index 9b54a57..4b39e7d 100644
--- a/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj
+++ b/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj
@@ -21,11 +21,11 @@
     <TargetFramework>netcoreapp3.1</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
-    <PackageReference Include="CompareNETObjects" Version="4.66.0" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
-    <PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
-    <PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
-    <PackageReference Include="NSubstitute" Version="4.2.2" />
+    <PackageReference Include="CompareNETObjects" Version="4.64.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
+    <PackageReference Include="NSubstitute" Version="4.2.1" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\Thrift\Thrift.csproj" />
diff --git a/lib/netstd/Thrift/Thrift.csproj b/lib/netstd/Thrift/Thrift.csproj
index 991e64e..3278d98 100644
--- a/lib/netstd/Thrift/Thrift.csproj
+++ b/lib/netstd/Thrift/Thrift.csproj
@@ -44,16 +44,16 @@
 
   <ItemGroup>
     <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.5" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.5" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.5" />
-    <PackageReference Include="System.IO.Pipes" Version="4.3.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
+    <PackageReference Include="System.IO.Pipes" Version="[4.3,)" />
     <PackageReference Include="System.IO.Pipes.AccessControl" Version="4.5.1" />
-    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.2" />
-    <PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
-    <PackageReference Include="System.Net.Requests" Version="4.3.0" />
+    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.0" />
+    <PackageReference Include="System.Net.NameResolution" Version="[4.3,)" />
+    <PackageReference Include="System.Net.Requests" Version="[4.3,)" />
     <PackageReference Include="System.Net.Security" Version="4.3.2" />
-    <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
+    <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />
   </ItemGroup>
 
   <Target Name="SetTFMAssemblyAttributesPath" BeforeTargets="GenerateTargetFrameworkMonikerAttribute">
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index bdc6d87..ac49aee 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -23,7 +23,6 @@
 
 namespace c_glib TTest
 namespace cpp thrift.test
-namespace csharp Thrift.Test
 namespace delphi Thrift.Test
 namespace go thrifttest
 namespace java thrift.test
diff --git a/test/csharp/Makefile.am b/test/csharp/Makefile.am
deleted file mode 100644
index ad166e3..0000000
--- a/test/csharp/Makefile.am
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-GENERATED = \
-	gen-csharp/Thrift/Test/Bonk.cs \
-	gen-csharp/Thrift/Test/Bools.cs \
-	gen-csharp/Thrift/Test/BoolTest.cs \
-	gen-csharp/Thrift/Test/CrazyNesting.cs \
-	gen-csharp/Thrift/Test/EmptyStruct.cs \
-	gen-csharp/Thrift/Test/GuessProtocolStruct.cs \
-	gen-csharp/Thrift/Test/Insanity.cs \
-	gen-csharp/Thrift/Test/LargeDeltas.cs \
-	gen-csharp/Thrift/Test/ListBonks.cs \
-	gen-csharp/Thrift/Test/ListTypeVersioningV1.cs \
-	gen-csharp/Thrift/Test/ListTypeVersioningV2.cs \
-	gen-csharp/Thrift/Test/NestedListsBonk.cs \
-	gen-csharp/Thrift/Test/NestedListsI32x2.cs \
-	gen-csharp/Thrift/Test/NestedListsI32x3.cs \
-	gen-csharp/Thrift/Test/NestedMixedx2.cs \
-	gen-csharp/Thrift/Test/Numberz.cs \
-	gen-csharp/Thrift/Test/OneField.cs \
-	gen-csharp/Thrift/Test/SecondService.cs \
-	gen-csharp/Thrift/Test/StructA.cs \
-	gen-csharp/Thrift/Test/StructB.cs \
-	gen-csharp/Thrift/Test/ThriftTest.Constants.cs \
-	gen-csharp/Thrift/Test/ThriftTest.cs \
-	gen-csharp/Thrift/Test/VersioningTestV1.cs \
-	gen-csharp/Thrift/Test/VersioningTestV2.cs \
-	gen-csharp/Thrift/Test/Xception.cs \
-	gen-csharp/Thrift/Test/Xception2.cs \
-	gen-csharp/Thrift/Test/Xtruct.cs \
-	gen-csharp/Thrift/Test/Xtruct2.cs \
-	gen-csharp/Thrift/Test/Xtruct3.cs
-
-BUILT_SOURCES = $(GENERATED)
-
-if MONO_MCS
-CSC = mcs
-else
-CSC = gmcs
-endif
-
-if NET_2_0
-CSC_DEFINES = -d:NET_2_0
-endif
-
-LIBDIR = $(top_builddir)/lib/csharp
-
-THRIFT = $(top_builddir)/compiler/cpp/thrift
-
-$(GENERATED): $(top_srcdir)/test/ThriftTest.thrift $(THRIFT)
-	$(THRIFT) --gen csharp -o . $<
-
-precross: TestClientServer.exe
-
-ThriftImpl.dll: $(GENERATED) $(LIBDIR)/Thrift.dll
-	$(CSC) $(CSC_DEFINES) -t:library -out:$@ -reference:$(LIBDIR)/Thrift.dll $(GENERATED)
-
-SRCS = TestClient.cs TestServer.cs Program.cs
-
-TestClientServer.exe: $(SRCS) ThriftImpl.dll
-	$(CSC) $(CSC_DEFINES) -out:$@ -reference:$(LIBDIR)/Thrift.dll -reference:ThriftImpl.dll $(SRCS)
-
-clean-local:
-	$(RM) -rf gen-csharp *.exe *.dll
-
-TESTPORT = 9500
-check-local: TestClientServer.exe
-	MONO_PATH=$(LIBDIR) timeout 10 mono TestClientServer.exe server --port=$(TESTPORT) &
-	sleep 1
-	MONO_PATH=$(LIBDIR) mono TestClientServer.exe client --port=$(TESTPORT)
-
-EXTRA_DIST = \
-	Properties/AssemblyInfo.cs \
-	ThriftTest.csproj \
-	ThriftTest.sln \
-	Program.cs \
-	TestServer.cs \
-	TestClient.cs
diff --git a/test/csharp/Program.cs b/test/csharp/Program.cs
deleted file mode 100644
index 8ec00e3..0000000
--- a/test/csharp/Program.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// Distributed under the Thrift Software License
-//
-// See accompanying file LICENSE or visit the Thrift site at:
-// http://developers.facebook.com/thrift/
-
-using System;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Test; //generated code
-
-namespace Test
-{
-    class Program
-    {
-        static int Main(string[] args)
-        {
-            if (args.Length == 0)
-            {
-                Console.WriteLine("must provide 'server' or 'client' arg");
-                return -1;
-            }
-
-            try
-            {
-                Console.SetBufferSize(Console.BufferWidth, 4096);
-            }
-            catch (Exception)
-            {
-                Console.WriteLine("Failed to grow scroll-back buffer");
-            }
-
-            string[] subArgs = new string[args.Length - 1];
-            for(int i = 1; i < args.Length; i++)
-            {
-                subArgs[i-1] = args[i];
-            }
-            if (args[0] == "client")
-            {
-                return TestClient.Execute(subArgs);
-            }
-            else if (args[0] == "server")
-            {
-                return TestServer.Execute(subArgs) ? 0 : 1;
-            }
-            else
-            {
-                Console.WriteLine("first argument must be 'server' or 'client'");
-            }
-            return 0;
-        }
-    }
-}
diff --git a/test/csharp/Properties/AssemblyInfo.cs b/test/csharp/Properties/AssemblyInfo.cs
deleted file mode 100644
index 376ff25..0000000
--- a/test/csharp/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ThriftTest")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("f41b193b-f1ab-48ee-8843-f88e43084e26")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/test/csharp/TestClient.cs b/test/csharp/TestClient.cs
deleted file mode 100644
index 949c06e..0000000
--- a/test/csharp/TestClient.cs
+++ /dev/null
@@ -1,870 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Linq;
-using System.Diagnostics;
-using System.Collections.Generic;
-using System.Threading;
-using System.Security.Cryptography.X509Certificates;
-using Thrift.Collections;
-using Thrift.Protocol;
-using Thrift.Transport;
-using Thrift.Test;
-using System.Security.Authentication;
-
-namespace Test
-{
-    public class TestClient
-    {
-        public class TestParams
-        {
-            public int numIterations = 1;
-            public string host = "localhost";
-            public int port = 9090;
-            public string url;
-            public string pipe;
-            public bool buffered;
-            public bool framed;
-            public string protocol;
-            public bool encrypted = false;
-            public bool multiplexed = false;
-            protected bool _isFirstTransport = true;
-
-
-            public TTransport CreateTransport()
-            {
-                if (url == null)
-                {
-                    // endpoint transport
-                    TTransport trans = null;
-                    if (pipe != null)
-                        trans = new TNamedPipeClientTransport(pipe);
-                    else
-                    {
-                        if (encrypted)
-                        {
-                            string certPath = "../keys/client.p12";
-                            X509Certificate cert = new X509Certificate2(certPath, "thrift");
-                            trans = new TTLSSocket(host, port, 0, cert, 
-                                (o, c, chain, errors) => true, 
-                                null, SslProtocols.Tls);
-                        }
-                        else
-                        {
-                            trans = new TSocket(host, port);
-                        }
-                    }
-
-                    // layered transport
-                    if (buffered)
-                        trans = new TBufferedTransport(trans);
-                    if (framed)
-                        trans = new TFramedTransport(trans);
-
-                    if (_isFirstTransport)
-                    {
-                        //ensure proper open/close of transport
-                        trans.Open();
-                        trans.Close();
-                        _isFirstTransport = false;
-                    }
-                    return trans;
-                }
-                else
-                {
-                    return new THttpClient(new Uri(url));
-                }
-            }
-
-            public TProtocol CreateProtocol(TTransport transport)
-            {
-                if (protocol == "compact")
-                    return new TCompactProtocol(transport);
-                else if (protocol == "json")
-                    return new TJSONProtocol(transport);
-                else
-                    return new TBinaryProtocol(transport);
-            }
-        };
-
-        private const int ErrorBaseTypes = 1;
-        private const int ErrorStructs = 2;
-        private const int ErrorContainers = 4;
-        private const int ErrorExceptions = 8;
-        private const int ErrorProtocol = 16;
-        private const int ErrorUnknown = 64;
-
-        private class ClientTest
-        {
-            private readonly TestParams param;
-            private readonly TTransport transport;
-            private readonly SecondService.Client second;
-            private readonly ThriftTest.Client client;
-            private readonly int numIterations;
-            private bool done;
-
-            public int ReturnCode { get; set; }
-
-            public ClientTest(TestParams paramin)
-            {
-                param = paramin;
-                transport = param.CreateTransport();
-                TProtocol protocol = param.CreateProtocol(transport);
-                if (param.multiplexed)
-                {
-                    second = new SecondService.Client(new TMultiplexedProtocol(protocol, "SecondService"));
-                }
-                client = new ThriftTest.Client(protocol);
-                numIterations = param.numIterations;
-            }
-            public void Execute()
-            {
-                if (done)
-                {
-                    Console.WriteLine("Execute called more than once");
-                    throw new InvalidOperationException();
-                }
-
-                for (int i = 0; i < numIterations; i++)
-                {
-                    try
-                    {
-                        if (!transport.IsOpen)
-                            transport.Open();
-                    }
-                    catch (TTransportException ex)
-                    {
-                        Console.WriteLine("*** FAILED ***");
-                        Console.WriteLine("Connect failed: " + ex.Message);
-                        ReturnCode |= ErrorUnknown;
-                        Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-                        continue;
-                    }
-
-                    try
-                    {
-                        ReturnCode |= ExecuteClientTest(client, second, param);
-                    }
-                    catch (Exception ex)
-                    {
-                        Console.WriteLine("*** FAILED ***");
-                        Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-                        ReturnCode |= ErrorUnknown;
-                    }
-                }
-                try
-                {
-                    transport.Close();
-                }
-                catch(Exception ex)
-                {
-                    Console.WriteLine("Error while closing transport");
-                    Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-                }
-                done = true;
-            }
-        }
-
-        public static int Execute(string[] args)
-        {
-            try
-            {
-                TestParams param = new TestParams();
-                int numThreads = 1;
-                try
-                {
-                    for (int i = 0; i < args.Length; i++)
-                    {
-                        if (args[i] == "-u")
-                        {
-                            param.url = args[++i];
-                        }
-                        else if (args[i] == "-n")
-                        {
-                            param.numIterations = Convert.ToInt32(args[++i]);
-                        }
-                        else if (args[i] == "-pipe")  // -pipe <name>
-                        {
-                            param.pipe = args[++i];
-                            Console.WriteLine("Using named pipes transport");
-                        }
-                        else if (args[i].Contains("--host="))
-                        {
-                            param.host = args[i].Substring(args[i].IndexOf("=") + 1);
-                        }
-                        else if (args[i].Contains("--port="))
-                        {
-                            param.port = int.Parse(args[i].Substring(args[i].IndexOf("=")+1));
-                        }
-                        else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
-                        {
-                            param.buffered = true;
-                            Console.WriteLine("Using buffered sockets");
-                        }
-                        else if (args[i] == "-f" || args[i] == "--framed"  || args[i] == "--transport=framed")
-                        {
-                            param.framed = true;
-                            Console.WriteLine("Using framed transport");
-                        }
-                        else if (args[i] == "-t")
-                        {
-                            numThreads = Convert.ToInt32(args[++i]);
-                        }
-                        else if (args[i] == "--compact" || args[i] == "--protocol=compact" || args[i] == "--protocol=multic")
-                        {
-                            param.protocol = "compact";
-                            Console.WriteLine("Using compact protocol");
-                        }
-                        else if (args[i] == "--json" || args[i] == "--protocol=json" || args[i] == "--protocol=multij")
-                        {
-                            param.protocol = "json";
-                            Console.WriteLine("Using JSON protocol");
-                        }
-                        else if (args[i] == "--ssl")
-                        {
-                            param.encrypted = true;
-                            Console.WriteLine("Using encrypted transport");
-                        }
-
-                        if (args[i].StartsWith("--protocol=multi"))
-                        {
-                            param.multiplexed = true;
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    Console.WriteLine("Error while  parsing arguments");
-                    Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-                    return ErrorUnknown;
-                }
-
-                var tests = Enumerable.Range(0, numThreads).Select(_ => new ClientTest(param)).ToArray();
-                //issue tests on separate threads simultaneously
-                var threads = tests.Select(test => new Thread(test.Execute)).ToArray();
-                DateTime start = DateTime.Now;
-                foreach (var t in threads)
-                    t.Start();
-                foreach (var t in threads)
-                    t.Join();
-                Console.WriteLine("Total time: " + (DateTime.Now - start));
-                Console.WriteLine();
-                return tests.Select(t => t.ReturnCode).Aggregate((r1, r2) => r1 | r2);
-            }
-            catch (Exception outerEx)
-            {
-                Console.WriteLine("*** FAILED ***");
-                Console.WriteLine("Unexpected error");
-                Console.WriteLine(outerEx.Message + " ST: " + outerEx.StackTrace);
-                return ErrorUnknown;
-            }
-        }
-
-        public static string BytesToHex(byte[] data) {
-            return BitConverter.ToString(data).Replace("-", string.Empty);
-        }
-
-        public static byte[] PrepareTestData(bool randomDist, bool huge)
-        {
-            // huge = true tests for THRIFT-4372
-            byte[] retval = new byte[huge ? 0x12345 : 0x100];
-            int initLen = retval.Length;
-
-            // linear distribution, unless random is requested
-            if (!randomDist) {
-                for (var i = 0; i < initLen; ++i) {
-                    retval[i] = (byte)i;
-                }
-                return retval;
-            }
-
-            // random distribution
-            for (var i = 0; i < initLen; ++i) {
-                retval[i] = (byte)0;
-            }
-            var rnd = new Random();
-            for (var i = 1; i < initLen; ++i) {
-                while( true) {
-                    int nextPos = rnd.Next() % initLen;
-                    if (retval[nextPos] == 0) {
-                        retval[nextPos] = (byte)i;
-                        break;
-                    }
-                }
-            }
-            return retval;
-        }
-
-        public static int ExecuteClientTest(ThriftTest.Client client, SecondService.Client second, TestParams param)
-        {
-            int returnCode = 0;
-
-            Console.Write("testVoid()");
-            client.testVoid();
-            Console.WriteLine(" = void");
-
-            Console.Write("testString(\"Test\")");
-            string s = client.testString("Test");
-            Console.WriteLine(" = \"" + s + "\"");
-            if ("Test" != s)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            if (param.multiplexed)
-            {
-                Console.WriteLine("secondTestString(\"Test2\")");
-                s = second.secondtestString("Test2");
-              Console.WriteLine(" = \"" + s + "\"");
-              if ("testString(\"Test2\")" != s)
-              {
-                  Console.WriteLine("*** FAILED ***");
-                  returnCode |= ErrorProtocol;
-              }
-            }
-
-            Console.Write("testBool(true)");
-            bool t = client.testBool((bool)true);
-            Console.WriteLine(" = " + t);
-            if (!t)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-            Console.Write("testBool(false)");
-            bool f = client.testBool((bool)false);
-            Console.WriteLine(" = " + f);
-            if (f)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            Console.Write("testByte(1)");
-            sbyte i8 = client.testByte((sbyte)1);
-            Console.WriteLine(" = " + i8);
-            if (1 != i8)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            Console.Write("testI32(-1)");
-            int i32 = client.testI32(-1);
-            Console.WriteLine(" = " + i32);
-            if (-1 != i32)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            Console.Write("testI64(-34359738368)");
-            long i64 = client.testI64(-34359738368);
-            Console.WriteLine(" = " + i64);
-            if (-34359738368 != i64)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            // TODO: Validate received message
-            Console.Write("testDouble(5.325098235)");
-            double dub = client.testDouble(5.325098235);
-            Console.WriteLine(" = " + dub);
-            if (5.325098235 != dub)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-            Console.Write("testDouble(-0.000341012439638598279)");
-            dub = client.testDouble(-0.000341012439638598279);
-            Console.WriteLine(" = " + dub);
-            if (-0.000341012439638598279 != dub)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            for (i32 = 0; i32 < 2; ++i32)
-            {
-                var huge = (i32 > 0);
-                byte[] binOut = PrepareTestData(false,huge);
-                Console.Write("testBinary(" + BytesToHex(binOut) + ")");
-                try
-                {
-                    byte[] binIn = client.testBinary(binOut);
-                    Console.WriteLine(" = " + BytesToHex(binIn));
-                    if (binIn.Length != binOut.Length)
-                    {
-                        Console.WriteLine("*** FAILED ***");
-                        returnCode |= ErrorBaseTypes;
-                    }
-                    for (int ofs = 0; ofs < Math.Min(binIn.Length, binOut.Length); ++ofs)
-                        if (binIn[ofs] != binOut[ofs])
-                        {
-                            Console.WriteLine("*** FAILED ***");
-                            returnCode |= ErrorBaseTypes;
-                        }
-                }
-                catch (Thrift.TApplicationException ex)
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    returnCode |= ErrorBaseTypes;
-                    Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-                }
-            }
-
-            // binary equals? only with hashcode option enabled ...
-            Console.WriteLine("Test CrazyNesting");
-            if( typeof(CrazyNesting).GetMethod("Equals").DeclaringType == typeof(CrazyNesting))
-            {
-                CrazyNesting one = new CrazyNesting();
-                CrazyNesting two = new CrazyNesting();
-                one.String_field = "crazy";
-                two.String_field = "crazy";
-                one.Binary_field = new byte[10] { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xFF };
-                two.Binary_field = new byte[10] { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xFF };
-                if (!one.Equals(two))
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    returnCode |= ErrorContainers;
-                    throw new Exception("CrazyNesting.Equals failed");
-                }
-            }
-
-            // TODO: Validate received message
-            Console.Write("testStruct({\"Zero\", 1, -3, -5})");
-            Xtruct o = new Xtruct();
-            o.String_thing = "Zero";
-            o.Byte_thing = (sbyte)1;
-            o.I32_thing = -3;
-            o.I64_thing = -5;
-            Xtruct i = client.testStruct(o);
-            Console.WriteLine(" = {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}");
-
-            // TODO: Validate received message
-            Console.Write("testNest({1, {\"Zero\", 1, -3, -5}, 5})");
-            Xtruct2 o2 = new Xtruct2();
-            o2.Byte_thing = (sbyte)1;
-            o2.Struct_thing = o;
-            o2.I32_thing = 5;
-            Xtruct2 i2 = client.testNest(o2);
-            i = i2.Struct_thing;
-            Console.WriteLine(" = {" + i2.Byte_thing + ", {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}, " + i2.I32_thing + "}");
-
-            Dictionary<int, int> mapout = new Dictionary<int, int>();
-            for (int j = 0; j < 5; j++)
-            {
-                mapout[j] = j - 10;
-            }
-            Console.Write("testMap({");
-            bool first = true;
-            foreach (int key in mapout.Keys)
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    Console.Write(", ");
-                }
-                Console.Write(key + " => " + mapout[key]);
-            }
-            Console.Write("})");
-
-            Dictionary<int, int> mapin = client.testMap(mapout);
-
-            Console.Write(" = {");
-            first = true;
-            foreach (int key in mapin.Keys)
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    Console.Write(", ");
-                }
-                Console.Write(key + " => " + mapin[key]);
-            }
-            Console.WriteLine("}");
-
-            // TODO: Validate received message
-            List<int> listout = new List<int>();
-            for (int j = -2; j < 3; j++)
-            {
-                listout.Add(j);
-            }
-            Console.Write("testList({");
-            first = true;
-            foreach (int j in listout)
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    Console.Write(", ");
-                }
-                Console.Write(j);
-            }
-            Console.Write("})");
-
-            List<int> listin = client.testList(listout);
-
-            Console.Write(" = {");
-            first = true;
-            foreach (int j in listin)
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    Console.Write(", ");
-                }
-                Console.Write(j);
-            }
-            Console.WriteLine("}");
-
-            //set
-            // TODO: Validate received message
-            THashSet<int> setout = new THashSet<int>();
-            for (int j = -2; j < 3; j++)
-            {
-                setout.Add(j);
-            }
-            Console.Write("testSet({");
-            first = true;
-            foreach (int j in setout)
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    Console.Write(", ");
-                }
-                Console.Write(j);
-            }
-            Console.Write("})");
-
-            THashSet<int> setin = client.testSet(setout);
-
-            Console.Write(" = {");
-            first = true;
-            foreach (int j in setin)
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    Console.Write(", ");
-                }
-                Console.Write(j);
-            }
-            Console.WriteLine("}");
-
-
-            Console.Write("testEnum(ONE)");
-            Numberz ret = client.testEnum(Numberz.ONE);
-            Console.WriteLine(" = " + ret);
-            if (Numberz.ONE != ret)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorStructs;
-            }
-
-            Console.Write("testEnum(TWO)");
-            ret = client.testEnum(Numberz.TWO);
-            Console.WriteLine(" = " + ret);
-            if (Numberz.TWO != ret)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorStructs;
-            }
-
-            Console.Write("testEnum(THREE)");
-            ret = client.testEnum(Numberz.THREE);
-            Console.WriteLine(" = " + ret);
-            if (Numberz.THREE != ret)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorStructs;
-            }
-
-            Console.Write("testEnum(FIVE)");
-            ret = client.testEnum(Numberz.FIVE);
-            Console.WriteLine(" = " + ret);
-            if (Numberz.FIVE != ret)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorStructs;
-            }
-
-            Console.Write("testEnum(EIGHT)");
-            ret = client.testEnum(Numberz.EIGHT);
-            Console.WriteLine(" = " + ret);
-            if (Numberz.EIGHT != ret)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorStructs;
-            }
-
-            Console.Write("testTypedef(309858235082523)");
-            long uid = client.testTypedef(309858235082523L);
-            Console.WriteLine(" = " + uid);
-            if (309858235082523L != uid)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorStructs;
-            }
-
-            // TODO: Validate received message
-            Console.Write("testMapMap(1)");
-            Dictionary<int, Dictionary<int, int>> mm = client.testMapMap(1);
-            Console.Write(" = {");
-            foreach (int key in mm.Keys)
-            {
-                Console.Write(key + " => {");
-                Dictionary<int, int> m2 = mm[key];
-                foreach (int k2 in m2.Keys)
-                {
-                    Console.Write(k2 + " => " + m2[k2] + ", ");
-                }
-                Console.Write("}, ");
-            }
-            Console.WriteLine("}");
-
-            // TODO: Validate received message
-            Insanity insane = new Insanity();
-            insane.UserMap = new Dictionary<Numberz, long>();
-            insane.UserMap[Numberz.FIVE] = 5000L;
-            Xtruct truck = new Xtruct();
-            truck.String_thing = "Truck";
-            truck.Byte_thing = (sbyte)8;
-            truck.I32_thing = 8;
-            truck.I64_thing = 8;
-            insane.Xtructs = new List<Xtruct>();
-            insane.Xtructs.Add(truck);
-            Console.Write("testInsanity()");
-            Dictionary<long, Dictionary<Numberz, Insanity>> whoa = client.testInsanity(insane);
-            Console.Write(" = {");
-            foreach (long key in whoa.Keys)
-            {
-                Dictionary<Numberz, Insanity> val = whoa[key];
-                Console.Write(key + " => {");
-
-                foreach (Numberz k2 in val.Keys)
-                {
-                    Insanity v2 = val[k2];
-
-                    Console.Write(k2 + " => {");
-                    Dictionary<Numberz, long> userMap = v2.UserMap;
-
-                    Console.Write("{");
-                    if (userMap != null)
-                    {
-                        foreach (Numberz k3 in userMap.Keys)
-                        {
-                            Console.Write(k3 + " => " + userMap[k3] + ", ");
-                        }
-                    }
-                    else
-                    {
-                        Console.Write("null");
-                    }
-                    Console.Write("}, ");
-
-                    List<Xtruct> xtructs = v2.Xtructs;
-
-                    Console.Write("{");
-                    if (xtructs != null)
-                    {
-                        foreach (Xtruct x in xtructs)
-                        {
-                            Console.Write("{\"" + x.String_thing + "\", " + x.Byte_thing + ", " + x.I32_thing + ", " + x.I32_thing + "}, ");
-                        }
-                    }
-                    else
-                    {
-                        Console.Write("null");
-                    }
-                    Console.Write("}");
-
-                    Console.Write("}, ");
-                }
-                Console.Write("}, ");
-            }
-            Console.WriteLine("}");
-
-            sbyte arg0 = 1;
-            int arg1 = 2;
-            long arg2 = long.MaxValue;
-            Dictionary<short, string> multiDict = new Dictionary<short, string>();
-            multiDict[1] = "one";
-            Numberz arg4 = Numberz.FIVE;
-            long arg5 = 5000000;
-            Console.Write("Test Multi(" + arg0 + "," + arg1 + "," + arg2 + "," + multiDict + "," + arg4 + "," + arg5 + ")");
-            Xtruct multiResponse = client.testMulti(arg0, arg1, arg2, multiDict, arg4, arg5);
-            Console.Write(" = Xtruct(byte_thing:" + multiResponse.Byte_thing + ",String_thing:" + multiResponse.String_thing
-                        + ",i32_thing:" + multiResponse.I32_thing + ",i64_thing:" + multiResponse.I64_thing + ")\n");
-
-            try
-            {
-                Console.WriteLine("testException(\"Xception\")");
-                client.testException("Xception");
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-            }
-            catch (Xception ex)
-            {
-                if (ex.ErrorCode != 1001 || ex.Message != "Xception")
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    returnCode |= ErrorExceptions;
-                }
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-                Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-            }
-            try
-            {
-                Console.WriteLine("testException(\"TException\")");
-                client.testException("TException");
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-            }
-            catch (Thrift.TException)
-            {
-                // OK
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-                Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-            }
-            try
-            {
-                Console.WriteLine("testException(\"ok\")");
-                client.testException("ok");
-                // OK
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-                Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-            }
-
-            try
-            {
-                Console.WriteLine("testMultiException(\"Xception\", ...)");
-                client.testMultiException("Xception", "ignore");
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-            }
-            catch (Xception ex)
-            {
-                if (ex.ErrorCode != 1001 || ex.Message != "This is an Xception")
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    returnCode |= ErrorExceptions;
-                }
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-                Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-            }
-            try
-            {
-                Console.WriteLine("testMultiException(\"Xception2\", ...)");
-                client.testMultiException("Xception2", "ignore");
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-            }
-            catch (Xception2 ex)
-            {
-                if (ex.ErrorCode != 2002 || ex.Struct_thing.String_thing != "This is an Xception2")
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    returnCode |= ErrorExceptions;
-                }
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-                Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-            }
-            try
-            {
-                Console.WriteLine("testMultiException(\"success\", \"OK\")");
-                if ("OK" != client.testMultiException("success", "OK").String_thing)
-                {
-                    Console.WriteLine("*** FAILED ***");
-                    returnCode |= ErrorExceptions;
-                }
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorExceptions;
-                Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
-            }
-
-            Stopwatch sw = new Stopwatch();
-            sw.Start();
-            Console.WriteLine("Test Oneway(1)");
-            client.testOneway(1);
-            sw.Stop();
-            if (sw.ElapsedMilliseconds > 1000)
-            {
-                Console.WriteLine("*** FAILED ***");
-                returnCode |= ErrorBaseTypes;
-            }
-
-            Console.Write("Test Calltime()");
-            var times = 50;
-            sw.Reset();
-            sw.Start();
-            for (int k = 0; k < times; ++k)
-                client.testVoid();
-            sw.Stop();
-            Console.WriteLine(" = {0} ms a testVoid() call", sw.ElapsedMilliseconds / times);
-            return returnCode;
-        }
-    }
-}
diff --git a/test/csharp/TestServer.cs b/test/csharp/TestServer.cs
deleted file mode 100644
index bf645c2..0000000
--- a/test/csharp/TestServer.cs
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// Distributed under the Thrift Software License
-//
-// See accompanying file LICENSE or visit the Thrift site at:
-// http://developers.facebook.com/thrift/
-using System;
-using System.Collections.Generic;
-using System.Security.Cryptography.X509Certificates;
-using Thrift.Collections;
-using Thrift.Test; //generated code
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift;
-using System.Threading;
-using System.Text;
-using System.Security.Authentication;
-
-namespace Test
-{
-    public class TestServer
-    {
-        public static int _clientID = -1;
-        public delegate void TestLogDelegate(string msg, params object[] values);
-
-        public class TradeServerEventHandler : TServerEventHandler
-        {
-            public int callCount = 0;
-            public void preServe()
-            {
-                callCount++;
-            }
-            public Object createContext(Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output)
-            {
-                callCount++;
-                return null;
-            }
-            public void deleteContext(Object serverContext, Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output)
-            {
-                callCount++;
-            }
-            public void processContext(Object serverContext, Thrift.Transport.TTransport transport)
-            {
-                callCount++;
-            }
-        };
-
-
-        public class TestHandler : ThriftTest.Iface, Thrift.TControllingHandler
-        {
-            public TServer server { get; set; }
-            private int handlerID;
-            private StringBuilder reusableStringBuilder = new StringBuilder();
-            private TestLogDelegate testLogDelegate;
-
-            public TestHandler()
-            {
-                handlerID = Interlocked.Increment(ref _clientID);
-                testLogDelegate += testConsoleLogger;
-                testLogDelegate.Invoke("New TestHandler instance created");
-            }
-
-            public void testConsoleLogger(string msg, params object[] values)
-            {
-                reusableStringBuilder.Clear();
-                reusableStringBuilder.AppendFormat("handler{0:D3}:",handlerID);
-                reusableStringBuilder.AppendFormat(msg, values);
-                reusableStringBuilder.AppendLine();
-                Console.Write( reusableStringBuilder.ToString() );
-            }
-
-            public void testVoid()
-            {
-                testLogDelegate.Invoke("testVoid()");
-            }
-
-            public string testString(string thing)
-            {
-                testLogDelegate.Invoke("testString({0})", thing);
-                return thing;
-            }
-
-            public bool testBool(bool thing)
-            {
-                testLogDelegate.Invoke("testBool({0})", thing);
-                return thing;
-            }
-
-            public sbyte testByte(sbyte thing)
-            {
-                testLogDelegate.Invoke("testByte({0})", thing);
-                return thing;
-            }
-
-            public int testI32(int thing)
-            {
-                testLogDelegate.Invoke("testI32({0})", thing);
-                return thing;
-            }
-
-            public long testI64(long thing)
-            {
-                testLogDelegate.Invoke("testI64({0})", thing);
-                return thing;
-            }
-
-            public double testDouble(double thing)
-            {
-                testLogDelegate.Invoke("testDouble({0})", thing);
-                return thing;
-            }
-
-            public byte[] testBinary(byte[] thing)
-            {
-                string hex = BitConverter.ToString(thing).Replace("-", string.Empty);
-                testLogDelegate.Invoke("testBinary({0:X})", hex);
-                return thing;
-            }
-
-            public Xtruct testStruct(Xtruct thing)
-            {
-                testLogDelegate.Invoke("testStruct({{\"{0}\", {1}, {2}, {3}}})", thing.String_thing, thing.Byte_thing, thing.I32_thing, thing.I64_thing);
-                return thing;
-            }
-
-            public Xtruct2 testNest(Xtruct2 nest)
-            {
-                Xtruct thing = nest.Struct_thing;
-                testLogDelegate.Invoke("testNest({{{0}, {{\"{1}\", {2}, {3}, {4}, {5}}}}})",
-                                 nest.Byte_thing,
-                                 thing.String_thing,
-                                 thing.Byte_thing,
-                                 thing.I32_thing,
-                                 thing.I64_thing,
-                                 nest.I32_thing);
-                return nest;
-            }
-
-            public Dictionary<int, int> testMap(Dictionary<int, int> thing)
-            {
-                reusableStringBuilder.Clear();
-                reusableStringBuilder.Append("testMap({{");
-                bool first = true;
-                foreach (int key in thing.Keys)
-                {
-                    if (first)
-                    {
-                        first = false;
-                    }
-                    else
-                    {
-                        reusableStringBuilder.Append(", ");
-                    }
-                    reusableStringBuilder.AppendFormat("{0} => {1}", key, thing[key]);
-                }
-                reusableStringBuilder.Append("}})");
-                testLogDelegate.Invoke(reusableStringBuilder.ToString());
-                return thing;
-            }
-
-            public Dictionary<string, string> testStringMap(Dictionary<string, string> thing)
-            {
-                reusableStringBuilder.Clear();
-                reusableStringBuilder.Append("testStringMap({{");
-                bool first = true;
-                foreach (string key in thing.Keys)
-                {
-                    if (first)
-                    {
-                        first = false;
-                    }
-                    else
-                    {
-                        reusableStringBuilder.Append(", ");
-                    }
-                    reusableStringBuilder.AppendFormat("{0} => {1}", key, thing[key]);
-                }
-                reusableStringBuilder.Append("}})");
-                testLogDelegate.Invoke(reusableStringBuilder.ToString());
-                return thing;
-            }
-
-            public THashSet<int> testSet(THashSet<int> thing)
-            {
-                reusableStringBuilder.Clear();
-                reusableStringBuilder.Append("testSet({{");
-                bool first = true;
-                foreach (int elem in thing)
-                {
-                    if (first)
-                    {
-                        first = false;
-                    }
-                    else
-                    {
-                        reusableStringBuilder.Append(", ");
-                    }
-                    reusableStringBuilder.AppendFormat("{0}", elem);
-                }
-                reusableStringBuilder.Append("}})");
-                testLogDelegate.Invoke(reusableStringBuilder.ToString());
-                return thing;
-            }
-
-            public List<int> testList(List<int> thing)
-            {
-                reusableStringBuilder.Clear();
-                reusableStringBuilder.Append("testList({{");
-                bool first = true;
-                foreach (int elem in thing)
-                {
-                    if (first)
-                    {
-                        first = false;
-                    }
-                    else
-                    {
-                        reusableStringBuilder.Append(", ");
-                    }
-                    reusableStringBuilder.AppendFormat("{0}", elem);
-                }
-                reusableStringBuilder.Append("}})");
-                testLogDelegate.Invoke(reusableStringBuilder.ToString());
-                return thing;
-            }
-
-            public Numberz testEnum(Numberz thing)
-            {
-                testLogDelegate.Invoke("testEnum({0})", thing);
-                return thing;
-            }
-
-            public long testTypedef(long thing)
-            {
-                testLogDelegate.Invoke("testTypedef({0})", thing);
-                return thing;
-            }
-
-            public Dictionary<int, Dictionary<int, int>> testMapMap(int hello)
-            {
-                testLogDelegate.Invoke("testMapMap({0})", hello);
-                Dictionary<int, Dictionary<int, int>> mapmap =
-                  new Dictionary<int, Dictionary<int, int>>();
-
-                Dictionary<int, int> pos = new Dictionary<int, int>();
-                Dictionary<int, int> neg = new Dictionary<int, int>();
-                for (int i = 1; i < 5; i++)
-                {
-                    pos[i] = i;
-                    neg[-i] = -i;
-                }
-
-                mapmap[4] = pos;
-                mapmap[-4] = neg;
-
-                return mapmap;
-            }
-
-            // Insanity
-            // returns:
-            // { 1 => { 2 => argument,
-            //          3 => argument,
-            //        },
-            //   2 => { 6 => <empty Insanity struct>, },
-            // }
-            public Dictionary<long, Dictionary<Numberz, Insanity>> testInsanity(Insanity argument)
-            {
-                testLogDelegate.Invoke("testInsanity()");
-
-                Dictionary<Numberz, Insanity> first_map = new Dictionary<Numberz, Insanity>();
-                Dictionary<Numberz, Insanity> second_map = new Dictionary<Numberz, Insanity>(); ;
-
-                first_map[Numberz.TWO] = argument;
-                first_map[Numberz.THREE] = argument;
-
-                second_map[Numberz.SIX] = new Insanity();
-
-                Dictionary<long, Dictionary<Numberz, Insanity>> insane =
-                  new Dictionary<long, Dictionary<Numberz, Insanity>>();
-                insane[(long)1] = first_map;
-                insane[(long)2] = second_map;
-
-                return insane;
-            }
-
-            public Xtruct testMulti(sbyte arg0, int arg1, long arg2, Dictionary<short, string> arg3, Numberz arg4, long arg5)
-            {
-                testLogDelegate.Invoke("testMulti()");
-
-                Xtruct hello = new Xtruct(); ;
-                hello.String_thing = "Hello2";
-                hello.Byte_thing = arg0;
-                hello.I32_thing = arg1;
-                hello.I64_thing = arg2;
-                return hello;
-            }
-
-            /**
-             * Print 'testException(%s)' with arg as '%s'
-             * @param string arg - a string indication what type of exception to throw
-             * if arg == "Xception" throw Xception with errorCode = 1001 and message = arg
-             * elsen if arg == "TException" throw TException
-             * else do not throw anything
-             */
-            public void testException(string arg)
-            {
-                testLogDelegate.Invoke("testException({0})", arg);
-                if (arg == "Xception")
-                {
-                    Xception x = new Xception();
-                    x.ErrorCode = 1001;
-                    x.Message = arg;
-                    throw x;
-                }
-                if (arg == "TException")
-                {
-                    throw new Thrift.TException();
-                }
-                return;
-            }
-
-            public Xtruct testMultiException(string arg0, string arg1)
-            {
-                testLogDelegate.Invoke("testMultiException({0}, {1})", arg0,arg1);
-                if (arg0 == "Xception")
-                {
-                    Xception x = new Xception();
-                    x.ErrorCode = 1001;
-                    x.Message = "This is an Xception";
-                    throw x;
-                }
-                else if (arg0 == "Xception2")
-                {
-                    Xception2 x = new Xception2();
-                    x.ErrorCode = 2002;
-                    x.Struct_thing = new Xtruct();
-                    x.Struct_thing.String_thing = "This is an Xception2";
-                    throw x;
-                }
-
-                Xtruct result = new Xtruct();
-                result.String_thing = arg1;
-                return result;
-            }
-
-            public void testStop()
-            {
-                if (server != null)
-                {
-                    server.Stop();
-                }
-            }
-
-            public void testOneway(int arg)
-            {
-                testLogDelegate.Invoke("testOneway({0}), sleeping...", arg);
-                System.Threading.Thread.Sleep(arg * 1000);
-                testLogDelegate.Invoke("testOneway finished");
-            }
-
-        } // class TestHandler
-
-        private enum ServerType
-        {
-            TSimpleServer,
-            TThreadedServer,
-            TThreadPoolServer,
-        }
-
-        private enum ProcessorFactoryType
-        {
-            TSingletonProcessorFactory,
-            TPrototypeProcessorFactory,
-        }
-
-        public static bool Execute(string[] args)
-        {
-            try
-            {
-                bool useBufferedSockets = false, useFramed = false, useEncryption = false, compact = false, json = false;
-                ServerType serverType = ServerType.TSimpleServer;
-                ProcessorFactoryType processorFactoryType = ProcessorFactoryType.TSingletonProcessorFactory;
-                int port = 9090;
-                string pipe = null;
-                for (int i = 0; i < args.Length; i++)
-                {
-                    if (args[i] == "-pipe")  // -pipe name
-                    {
-                        pipe = args[++i];
-                    }
-                    else if (args[i].Contains("--port="))
-                    {
-                        port = int.Parse(args[i].Substring(args[i].IndexOf("=") + 1));
-                    }
-                    else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
-                    {
-                        useBufferedSockets = true;
-                    }
-                    else if (args[i] == "-f" || args[i] == "--framed" || args[i] == "--transport=framed")
-                    {
-                        useFramed = true;
-                    }
-                    else if (args[i] == "--compact" || args[i] == "--protocol=compact")
-                    {
-                        compact = true;
-                    }
-                    else if (args[i] == "--json" || args[i] == "--protocol=json")
-                    {
-                        json = true;
-                    }
-                    else if (args[i] == "--threaded" || args[i] == "--server-type=threaded")
-                    {
-                        serverType = ServerType.TThreadedServer;
-                    }
-                    else if (args[i] == "--threadpool" || args[i] == "--server-type=threadpool")
-                    {
-                        serverType = ServerType.TThreadPoolServer;
-                    }
-                    else if (args[i] == "--prototype" || args[i] == "--processor=prototype")
-                    {
-                        processorFactoryType = ProcessorFactoryType.TPrototypeProcessorFactory;
-                    }
-                    else if (args[i] == "--ssl")
-                    {
-                        useEncryption = true;
-                    }
-                }
-
-                // Transport
-                TServerTransport trans;
-                if (pipe != null)
-                {
-                    trans = new TNamedPipeServerTransport(pipe);
-                }
-                else
-                {
-                    if (useEncryption)
-                    {
-                        string certPath = "../keys/server.p12";
-                        trans = new TTLSServerSocket(port, 0, useBufferedSockets, new X509Certificate2(certPath, "thrift"), 
-                            null,
-                            null, SslProtocols.Tls);
-                    }
-                    else
-                    {
-                        trans = new TServerSocket(port, 0, useBufferedSockets);
-                    }
-                }
-
-                TProtocolFactory proto;
-                if (compact)
-                    proto = new TCompactProtocol.Factory();
-                else if (json)
-                    proto = new TJSONProtocol.Factory();
-                else
-                    proto = new TBinaryProtocol.Factory();
-
-                TProcessorFactory processorFactory;
-                if (processorFactoryType == ProcessorFactoryType.TPrototypeProcessorFactory)
-                {
-                    processorFactory = new TPrototypeProcessorFactory<ThriftTest.Processor, TestHandler>();
-                }
-                else
-                {
-                    // Processor
-                    TestHandler testHandler = new TestHandler();
-                    ThriftTest.Processor testProcessor = new ThriftTest.Processor(testHandler);
-                    processorFactory = new TSingletonProcessorFactory(testProcessor);
-                }
-
-                TTransportFactory transFactory;
-                if (useFramed)
-                    transFactory = new TFramedTransport.Factory();
-                else
-                    transFactory = new TTransportFactory();
-
-                TServer serverEngine;
-                switch (serverType)
-                {
-                    case ServerType.TThreadPoolServer:
-                        serverEngine = new TThreadPoolServer(processorFactory, trans, transFactory, proto);
-                        break;
-                    case ServerType.TThreadedServer:
-                        serverEngine = new TThreadedServer(processorFactory, trans, transFactory, proto);
-                        break;
-                    default:
-                        serverEngine = new TSimpleServer(processorFactory, trans, transFactory, proto);
-                        break;
-                }
-
-                //Server event handler
-                TradeServerEventHandler serverEvents = new TradeServerEventHandler();
-                serverEngine.setEventHandler(serverEvents);
-
-                // Run it
-                string where = (pipe != null ? "on pipe " + pipe : "on port " + port);
-                Console.WriteLine("Starting the " + serverType.ToString() + " " + where +
-                    (processorFactoryType == ProcessorFactoryType.TPrototypeProcessorFactory ? " with processor prototype factory " : "") +
-                    (useBufferedSockets ? " with buffered socket" : "") +
-                    (useFramed ? " with framed transport" : "") +
-                    (useEncryption ? " with encryption" : "") +
-                    (compact ? " with compact protocol" : "") +
-                    (json ? " with json protocol" : "") +
-                    "...");
-                serverEngine.Serve();
-
-            }
-            catch (Exception x)
-            {
-                Console.Error.Write(x);
-                return false;
-            }
-            Console.WriteLine("done.");
-            return true;
-        }
-    }
-}
diff --git a/test/csharp/ThriftTest.csproj b/test/csharp/ThriftTest.csproj
deleted file mode 100644
index 2ff0926..0000000
--- a/test/csharp/ThriftTest.csproj
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>ThriftTest</RootNamespace>
-    <AssemblyName>ThriftTest</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>0.14.0.0</ApplicationVersion>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="ThriftImpl, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>.\ThriftImpl.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Program.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="TestClient.cs" />
-    <Compile Include="TestServer.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\lib\csharp\Thrift.csproj">
-      <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
-      <Name>Thrift</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-  <PropertyGroup>
-    <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-SET THRIFT_FILE=$(ProjectDir)\..\ThriftTest.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-$(MSBuildToolsPath)\Csc.exe /t:library /out:"$(ProjectDir)ThriftImpl.dll" /recurse:"$(ProjectDir)gen-csharp"\* /reference:"$(ProjectDir)..\..\lib\csharp\bin\Debug\Thrift.dll"</PreBuildEvent>
-  </PropertyGroup>
-</Project>
diff --git a/test/csharp/ThriftTest.sln b/test/csharp/ThriftTest.sln
deleted file mode 100644
index 1765a03..0000000
--- a/test/csharp/ThriftTest.sln
+++ /dev/null
@@ -1,17 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftTest", "ThriftTest.csproj", "{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-EndGlobal
diff --git a/test/haxe/src/Arguments.hx b/test/haxe/src/Arguments.hx
index 023f250..56e5253 100644
--- a/test/haxe/src/Arguments.hx
+++ b/test/haxe/src/Arguments.hx
@@ -92,7 +92,7 @@
     #if sys
 
     private static function GetHelp() : String {
-        var sProg = Path.withoutDirectory( Sys.programPath());
+        var sProg = Path.withoutDirectory( Sys.executablePath());
         return "\n"
             +sProg+"  [client|server]  [options]\n"
             +"\n"
diff --git a/test/netstd/Client/Client.csproj b/test/netstd/Client/Client.csproj
index ce71809..4ed57cb 100644
--- a/test/netstd/Client/Client.csproj
+++ b/test/netstd/Client/Client.csproj
@@ -31,7 +31,7 @@
     <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
   </PropertyGroup>
   <ItemGroup>
-    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.2" />
+    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.0" />
     <PackageReference Include="System.Runtime.Serialization.Primitives" Version="[4.3,)" />
     <PackageReference Include="System.ServiceModel.Primitives" Version="4.7.0" />
     <PackageReference Include="System.Threading" Version="[4.3,)" />
diff --git a/test/netstd/Referenz.txt b/test/netstd/Referenz.txt
deleted file mode 100644
index 58088e4..0000000
--- a/test/netstd/Referenz.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-E:\D\TPCPP\Thrift\wc-XE-all\wc-JensG-haxe\test\netstd\Client\bin\Release\netcoreapp3.1>Client.exe --performance
-Setting up for ProtocolPeformanceTestAsync ...
-RunTestAsync(TBinaryProtocol): write = 1982 msec
-RunTestAsync(TBinaryProtocol): read = 4995 msec
-RunTestAsync(TCompactProtocol): write = 1240 msec
-RunTestAsync(TCompactProtocol): read = 3964 msec
-RunTestAsync(TJsonProtocol): write = 5206 msec
-RunTestAsync(TJsonProtocol): read = 23249 msec
-RunTestAsync(TBinaryProtocol + TBufferedTransport): write = 1990 msec
-RunTestAsync(TBinaryProtocol + TBufferedTransport): read = 5777 msec
-RunTestAsync(TCompactProtocol + TBufferedTransport): write = 1453 msec
-RunTestAsync(TCompactProtocol + TBufferedTransport): read = 4761 msec
-RunTestAsync(TJsonProtocol + TBufferedTransport): write = 8859 msec
-RunTestAsync(TJsonProtocol + TBufferedTransport): read = 30925 msec
-RunTestAsync(TBinaryProtocol + TFramedTransport): write = 2042 msec
-RunTestAsync(TBinaryProtocol + TFramedTransport): read = 5726 msec
-RunTestAsync(TCompactProtocol + TFramedTransport): write = 1480 msec
-RunTestAsync(TCompactProtocol + TFramedTransport): read = 4818 msec
-RunTestAsync(TJsonProtocol + TFramedTransport): write = 8612 msec
-RunTestAsync(TJsonProtocol + TFramedTransport): read = 30810 msec
diff --git a/test/netstd/Server/Server.csproj b/test/netstd/Server/Server.csproj
index cbd0fb1..fa5ce46 100644
--- a/test/netstd/Server/Server.csproj
+++ b/test/netstd/Server/Server.csproj
@@ -33,7 +33,7 @@
   <ItemGroup>
     <PackageReference Include="System.IO.Pipes" Version="4.3.0" />
     <PackageReference Include="System.IO.Pipes.AccessControl" Version="4.5.1" />
-    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.2" />
+    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.0" />
     <PackageReference Include="System.Runtime.Serialization.Primitives" Version="[4.3,)" />
     <PackageReference Include="System.ServiceModel.Primitives" Version="4.7.0" />
     <PackageReference Include="System.Threading" Version="[4.3,)" />
diff --git a/test/netstd/ThriftTest.sln b/test/netstd/ThriftTest.sln
index 7e101d9..352576e 100644
--- a/test/netstd/ThriftTest.sln
+++ b/test/netstd/ThriftTest.sln
@@ -1,7 +1,6 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.30104.148
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26730.12
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift", "..\..\lib\netstd\Thrift\Thrift.csproj", "{C20EA2A9-7660-47DE-9A49-D1EF12FB2895}"
 EndProject
@@ -9,14 +8,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{0C6E8685-F191-4479-9842-882A38961127}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.IntegrationTests", "..\..\lib\netstd\Tests\Thrift.IntegrationTests\Thrift.IntegrationTests.csproj", "{C8148BFF-B943-4474-8D33-A641C6FD3DAB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.PublicInterfaces.Compile.Tests", "..\..\lib\netstd\Tests\Thrift.PublicInterfaces.Compile.Tests\Thrift.PublicInterfaces.Compile.Tests.csproj", "{5D86C1B6-0CDA-4D1D-80A5-240583B21148}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.Tests", "..\..\lib\netstd\Tests\Thrift.Tests\Thrift.Tests.csproj", "{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.Benchmarks", "..\..\lib\netstd\Benchmarks\Thrift.Benchmarks\Thrift.Benchmarks.csproj", "{66946544-8DE7-45E9-8D0E-93EADA028D44}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -63,54 +54,6 @@
 		{0C6E8685-F191-4479-9842-882A38961127}.Release|x64.Build.0 = Release|Any CPU
 		{0C6E8685-F191-4479-9842-882A38961127}.Release|x86.ActiveCfg = Release|Any CPU
 		{0C6E8685-F191-4479-9842-882A38961127}.Release|x86.Build.0 = Release|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x64.Build.0 = Debug|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x86.Build.0 = Debug|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x64.ActiveCfg = Release|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x64.Build.0 = Release|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x86.ActiveCfg = Release|Any CPU
-		{C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x86.Build.0 = Release|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x64.Build.0 = Debug|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x86.Build.0 = Debug|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|Any CPU.Build.0 = Release|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x64.ActiveCfg = Release|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x64.Build.0 = Release|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x86.ActiveCfg = Release|Any CPU
-		{5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x86.Build.0 = Release|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x64.Build.0 = Debug|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x86.Build.0 = Debug|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|Any CPU.Build.0 = Release|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x64.ActiveCfg = Release|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x64.Build.0 = Release|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x86.ActiveCfg = Release|Any CPU
-		{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x86.Build.0 = Release|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x64.Build.0 = Debug|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x86.Build.0 = Debug|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|Any CPU.Build.0 = Release|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x64.ActiveCfg = Release|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x64.Build.0 = Release|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x86.ActiveCfg = Release|Any CPU
-		{66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/tutorial/csharp/CsharpClient/CsharpClient.cs b/tutorial/csharp/CsharpClient/CsharpClient.cs
deleted file mode 100644
index 113a472..0000000
--- a/tutorial/csharp/CsharpClient/CsharpClient.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using Thrift;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift.Transport;
-
-
-namespace CSharpTutorial
-{
-    public class CSharpClient
-    {
-        public static void Main()
-        {
-            try
-            {
-                TTransport transport = new TSocket("localhost", 9090);
-                TProtocol protocol = new TBinaryProtocol(transport);
-                Calculator.Client client = new Calculator.Client(protocol);
-
-                transport.Open();
-                try
-                {
-                    client.ping();
-                    Console.WriteLine("ping()");
-
-                    int sum = client.add(1, 1);
-                    Console.WriteLine("1+1={0}", sum);
-
-                    Work work = new Work();
-
-                    work.Op = Operation.DIVIDE;
-                    work.Num1 = 1;
-                    work.Num2 = 0;
-                    try
-                    {
-                        int quotient = client.calculate(1, work);
-                        Console.WriteLine("Whoa we can divide by 0");
-                    }
-                    catch (InvalidOperation io)
-                    {
-                        Console.WriteLine("Invalid operation: " + io.Why);
-                    }
-
-                    work.Op = Operation.SUBTRACT;
-                    work.Num1 = 15;
-                    work.Num2 = 10;
-                    try
-                    {
-                        int diff = client.calculate(1, work);
-                        Console.WriteLine("15-10={0}", diff);
-                    }
-                    catch (InvalidOperation io)
-                    {
-                        Console.WriteLine("Invalid operation: " + io.Why);
-                    }
-
-                    SharedStruct log = client.getStruct(1);
-                    Console.WriteLine("Check log: {0}", log.Value);
-
-                }
-                finally
-                {
-                    transport.Close();
-                }
-            }
-            catch (TApplicationException x)
-            {
-                Console.WriteLine(x.StackTrace);
-            }
-
-        }
-    }
-}
diff --git a/tutorial/csharp/CsharpClient/CsharpClient.csproj b/tutorial/csharp/CsharpClient/CsharpClient.csproj
deleted file mode 100644
index 1ea7ff6..0000000
--- a/tutorial/csharp/CsharpClient/CsharpClient.csproj
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{18F24087-4760-43DA-ACAB-7B9F0E096B11}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>CsharpClient</RootNamespace>
-    <AssemblyName>CsharpClient</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Xml.Linq">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.DataSetExtensions">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="..\gen-csharp\Calculator.cs">
-      <Link>Calculator.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\InvalidOperation.cs">
-      <Link>InvalidOperation.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\Operation.cs">
-      <Link>Operation.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\SharedService.cs">
-      <Link>SharedService.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\SharedStruct.cs">
-      <Link>SharedStruct.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\tutorial.Constants.cs">
-      <Link>tutorial.Constants.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\Work.cs">
-      <Link>Work.cs</Link>
-    </Compile>
-    <Compile Include="CsharpClient.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\..\lib\csharp\src\Thrift.csproj">
-      <Project>{499eb63c-d74c-47e8-ae48-a2fc94538e9d}</Project>
-      <Name>Thrift</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>pushd "$(SolutionDir)"
-thrift  -gen csharp   -r  ../tutorial.thrift
-popd
-</PreBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs b/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8f5b32a..0000000
--- a/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("CsharpClient")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("1a461214-fa28-452a-bd1d-d23ca8e947e3")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/tutorial/csharp/CsharpServer/CsharpServer.cs b/tutorial/csharp/CsharpServer/CsharpServer.cs
deleted file mode 100644
index 439790a..0000000
--- a/tutorial/csharp/CsharpServer/CsharpServer.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using Thrift.Server;
-using Thrift.Transport;
-
-namespace CSharpTutorial
-{
-    public class CalculatorHandler : Calculator.Iface
-    {
-        Dictionary<int, SharedStruct> log;
-
-        public CalculatorHandler()
-        {
-            log = new Dictionary<int, SharedStruct>();
-        }
-
-        public void ping()
-        {
-            Console.WriteLine("ping()");
-        }
-
-        public int add(int n1, int n2)
-        {
-            Console.WriteLine("add({0},{1})", n1, n2);
-            return n1 + n2;
-        }
-
-        public int calculate(int logid, Work work)
-        {
-            Console.WriteLine("calculate({0}, [{1},{2},{3}])", logid, work.Op, work.Num1, work.Num2);
-            int val = 0;
-            switch (work.Op)
-            {
-                case Operation.ADD:
-                    val = work.Num1 + work.Num2;
-                    break;
-
-                case Operation.SUBTRACT:
-                    val = work.Num1 - work.Num2;
-                    break;
-
-                case Operation.MULTIPLY:
-                    val = work.Num1 * work.Num2;
-                    break;
-
-                case Operation.DIVIDE:
-                    if (work.Num2 == 0)
-                    {
-                        InvalidOperation io = new InvalidOperation();
-                        io.WhatOp = (int)work.Op;
-                        io.Why = "Cannot divide by 0";
-                        throw io;
-                    }
-                    val = work.Num1 / work.Num2;
-                    break;
-
-                default:
-                    {
-                        InvalidOperation io = new InvalidOperation();
-                        io.WhatOp = (int)work.Op;
-                        io.Why = "Unknown operation";
-                        throw io;
-                    }
-            }
-
-            SharedStruct entry = new SharedStruct();
-            entry.Key = logid;
-            entry.Value = val.ToString();
-            log[logid] = entry;
-
-            return val;
-        }
-
-        public SharedStruct getStruct(int key)
-        {
-            Console.WriteLine("getStruct({0})", key);
-            return log[key];
-        }
-
-        public void zip()
-        {
-            Console.WriteLine("zip()");
-        }
-    }
-
-    public class CSharpServer
-    {
-        public static void Main()
-        {
-            try
-            {
-                CalculatorHandler handler = new CalculatorHandler();
-                Calculator.Processor processor = new Calculator.Processor(handler);
-                TServerTransport serverTransport = new TServerSocket(9090);
-                TServer server = new TSimpleServer(processor, serverTransport);
-
-                // Use this for a multithreaded server
-                // server = new TThreadPoolServer(processor, serverTransport);
-
-                Console.WriteLine("Starting the server...");
-                server.Serve();
-            }
-            catch (Exception x)
-            {
-                Console.WriteLine(x.StackTrace);
-            }
-            Console.WriteLine("done.");
-        }
-    }
-}
diff --git a/tutorial/csharp/CsharpServer/CsharpServer.csproj b/tutorial/csharp/CsharpServer/CsharpServer.csproj
deleted file mode 100644
index 0748180..0000000
--- a/tutorial/csharp/CsharpServer/CsharpServer.csproj
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{66707BAE-BBF9-4F03-B53E-BE3AD58322F8}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>CsharpServer</RootNamespace>
-    <AssemblyName>CsharpServer</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Xml.Linq">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.DataSetExtensions">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="..\gen-csharp\Calculator.cs">
-      <Link>Calculator.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\InvalidOperation.cs">
-      <Link>InvalidOperation.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\Operation.cs">
-      <Link>Operation.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\SharedService.cs">
-      <Link>SharedService.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\SharedStruct.cs">
-      <Link>SharedStruct.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\tutorial.Constants.cs">
-      <Link>tutorial.Constants.cs</Link>
-    </Compile>
-    <Compile Include="..\gen-csharp\Work.cs">
-      <Link>Work.cs</Link>
-    </Compile>
-    <Compile Include="CsharpServer.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\..\lib\csharp\src\Thrift.csproj">
-      <Project>{499eb63c-d74c-47e8-ae48-a2fc94538e9d}</Project>
-      <Name>Thrift</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>pushd "$(SolutionDir)"
-thrift  -gen csharp   -r  ../tutorial.thrift
-popd
-
-</PreBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs b/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs
deleted file mode 100644
index 0d4f0fb..0000000
--- a/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("CsharpServer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("e3b428f4-b2e9-4fc1-8a34-84abc4339860")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/tutorial/csharp/tutorial.sln b/tutorial/csharp/tutorial.sln
deleted file mode 100644
index ec57a18..0000000
--- a/tutorial/csharp/tutorial.sln
+++ /dev/null
@@ -1,39 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift", "..\..\lib\csharp\src\Thrift.csproj", "{499EB63C-D74C-47E8-AE48-A2FC94538E9D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CsharpClient", "CsharpClient\CsharpClient.csproj", "{18F24087-4760-43DA-ACAB-7B9F0E096B11}"
-    ProjectSection(ProjectDependencies) = postProject
-        {499EB63C-D74C-47E8-AE48-A2FC94538E9D} = {499EB63C-D74C-47E8-AE48-A2FC94538E9D}
-        {66707BAE-BBF9-4F03-B53E-BE3AD58322F8} = {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}
-    EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CsharpServer", "CsharpServer\CsharpServer.csproj", "{66707BAE-BBF9-4F03-B53E-BE3AD58322F8}"
-    ProjectSection(ProjectDependencies) = postProject
-        {499EB63C-D74C-47E8-AE48-A2FC94538E9D} = {499EB63C-D74C-47E8-AE48-A2FC94538E9D}
-    EndProjectSection
-EndProject
-Global
-    GlobalSection(SolutionConfigurationPlatforms) = preSolution
-        Debug|Any CPU = Debug|Any CPU
-        Release|Any CPU = Release|Any CPU
-    EndGlobalSection
-    GlobalSection(ProjectConfigurationPlatforms) = postSolution
-        {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-        {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-        {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-        {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.Build.0 = Release|Any CPU
-        {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-        {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Debug|Any CPU.Build.0 = Debug|Any CPU
-        {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Release|Any CPU.ActiveCfg = Release|Any CPU
-        {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Release|Any CPU.Build.0 = Release|Any CPU
-        {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-        {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
-        {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
-        {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Release|Any CPU.Build.0 = Release|Any CPU
-    EndGlobalSection
-    GlobalSection(SolutionProperties) = preSolution
-        HideSolutionNode = FALSE
-    EndGlobalSection
-EndGlobal
diff --git a/tutorial/netstd/Client/Client.csproj b/tutorial/netstd/Client/Client.csproj
index 81b503f..10d5040 100644
--- a/tutorial/netstd/Client/Client.csproj
+++ b/tutorial/netstd/Client/Client.csproj
@@ -30,7 +30,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/tutorial/netstd/Server/Server.csproj b/tutorial/netstd/Server/Server.csproj
index 95eabd3..b3ff516 100644
--- a/tutorial/netstd/Server/Server.csproj
+++ b/tutorial/netstd/Server/Server.csproj
@@ -38,7 +38,7 @@
     <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
     <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.2.1" />
     <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.4" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
   </ItemGroup>
 
 </Project>