diff --git a/bin/csharp-http-client-petstore.sh b/bin/csharp-http-client-petstore.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1ccb7e23d2c17f77d1598e4826b949a8e4587256
--- /dev/null
+++ b/bin/csharp-http-client-petstore.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+SCRIPT="$0"
+
+while [ -h "$SCRIPT" ] ; do
+  ls=$(ls -ld "$SCRIPT")
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=$(dirname "$SCRIPT")/"$link"
+  fi
+done
+
+if [ ! -d "${APP_DIR}" ]; then
+  APP_DIR=$(dirname "$SCRIPT")/..
+  APP_DIR=$(cd "${APP_DIR}"; pwd)
+fi
+
+executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar"
+
+if [ ! -f "$executable" ]
+then
+  mvn clean package
+fi
+
+# if you've executed sbt assembly previously it will use that instead.
+export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
+ags="$@ generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g csharp-http -o samples/client/petstore/csharp/http"
+
+java ${JAVA_OPTS} -jar ${executable} ${ags}
diff --git a/bin/windows/csharp-http-client-petstore.bat b/bin/windows/csharp-http-client-petstore.bat
new file mode 100644
index 0000000000000000000000000000000000000000..20b2116bf2ecb06e64c89313b1c9cf419d1c5665
--- /dev/null
+++ b/bin/windows/csharp-http-client-petstore.bat
@@ -0,0 +1,10 @@
+set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar
+
+If Not Exist %executable% (
+  mvn clean package
+)
+
+REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties
+set ags=generate  --artifact-id "csharp-http-petstore-client" -i modules\openapi-generator\src\test\resources\2_0\petstore.yaml -g csharp-http -o samples\client\petstore\csharp\http
+
+java %JAVA_OPTS% -jar %executable% %ags%
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CsharpHttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CsharpHttpClientCodegen.java
new file mode 100644
index 0000000000000000000000000000000000000000..a7275027c8726ab81fbbd4dfb77896ca8dc0eb95
--- /dev/null
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CsharpHttpClientCodegen.java
@@ -0,0 +1,46 @@
+package org.openapitools.codegen.languages;
+
+import org.openapitools.codegen.*;
+import io.swagger.models.properties.ArrayProperty;
+import io.swagger.models.properties.MapProperty;
+import io.swagger.models.properties.Property;
+import io.swagger.models.parameters.Parameter;
+
+import java.io.File;
+import java.util.*;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CsharpHttpClientCodegen extends DefaultCodegen implements CodegenConfig {
+    public static final String PROJECT_NAME = "projectName";
+
+    static Logger LOGGER = LoggerFactory.getLogger(CsharpHttpClientCodegen.class);
+
+    public CodegenType getTag() {
+        return CodegenType.CLIENT;
+    }
+
+    public String getName() {
+        return "csharp-http";
+    }
+
+    public String getHelp() {
+        return "Generates a csharp-http client.";
+    }
+
+    public CsharpHttpClientCodegen() {
+        super();
+
+        outputFolder = "generated-code" + File.separator + "csharp-http";
+        modelTemplateFiles.put("model.mustache", ".zz");
+        apiTemplateFiles.put("api.mustache", ".zz");
+        embeddedTemplateDir = templateDir = "csharp-http-client";
+        apiPackage = File.separator + "Apis";
+        modelPackage = File.separator + "Models";
+        supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
+        // TODO: Fill this out.
+    }
+}
diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig
index 67c0f473b506bc5035a33125925c6494961e2991..a4fe70134d80e74b287406dfc53e27348253ee4c 100644
--- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig
+++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig
@@ -117,4 +117,5 @@ org.openapitools.codegen.languages.TypeScriptNodeClientCodegen
 org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen
 org.openapitools.codegen.languages.FsharpGiraffeServerCodegen
 org.openapitools.codegen.languages.AsciidocDocumentationCodegen
+org.openapitools.codegen.languages.CsharpHttpClientCodegen
 org.openapitools.codegen.languages.FsharpFunctionsServerCodegen
diff --git a/modules/openapi-generator/src/main/resources/csharp-http-client/README.mustache b/modules/openapi-generator/src/main/resources/csharp-http-client/README.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/modules/openapi-generator/src/main/resources/csharp-http-client/api.mustache b/modules/openapi-generator/src/main/resources/csharp-http-client/api.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/modules/openapi-generator/src/main/resources/csharp-http-client/model.mustache b/modules/openapi-generator/src/main/resources/csharp-http-client/model.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenModelTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenModelTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8858fc86e3020b65121b256d1edf8e75362f16b5
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenModelTest.java
@@ -0,0 +1,29 @@
+package org.openapitools.codegen.csharp.http;
+
+import org.openapitools.codegen.*;
+import org.openapitools.codegen.languages.CsharpHttpClientCodegen;
+import io.swagger.models.*;
+import io.swagger.models.properties.*;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+@SuppressWarnings("static-method")
+public class CsharpHttpClientCodegenModelTest {
+
+    @Test(description = "convert a simple java model")
+    public void simpleModelTest() {
+        final Model model = new ModelImpl()
+                .description("a sample model")
+                .property("id", new LongProperty())
+                .property("name", new StringProperty())
+                .required("id")
+                .required("name");
+        final DefaultCodegen codegen = new CsharpHttpClientCodegen();
+
+        // TODO: Complete this test.
+        Assert.fail("Not implemented.");
+    }
+
+}
+
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenOptionsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b7ffd13cf503604623f405cba634321690226f8
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenOptionsTest.java
@@ -0,0 +1,34 @@
+package org.openapitools.codegen.csharp.http;
+
+import org.openapitools.codegen.AbstractOptionsTest;
+import org.openapitools.codegen.CodegenConfig;
+import org.openapitools.codegen.languages.CsharpHttpClientCodegen;
+import org.openapitools.codegen.options.CsharpHttpClientCodegenOptionsProvider;
+
+import mockit.Expectations;
+import mockit.Tested;
+
+public class CsharpHttpClientCodegenOptionsTest extends AbstractOptionsTest {
+
+    @Tested
+    private CsharpHttpClientCodegen codegen;
+
+    public CsharpHttpClientCodegenOptionsTest() {
+        super(new CsharpHttpClientCodegenOptionsProvider());
+    }
+
+    @Override
+    protected CodegenConfig getCodegenConfig() {
+        return codegen;
+    }
+
+    @SuppressWarnings("unused")
+    @Override
+    protected void setExpectations() {
+        // TODO: Complete options
+        new Expectations(codegen) {{
+
+        }};
+    }
+}
+
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..b946bb9b27e9e665db5c77722381069ab01250e9
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/http/CsharpHttpClientCodegenTest.java
@@ -0,0 +1,19 @@
+package org.openapitools.codegen.csharp.http;
+
+import org.openapitools.codegen.*;
+import org.openapitools.codegen.languages.CsharpHttpClientCodegen;
+import io.swagger.models.*;
+import io.swagger.parser.SwaggerParser;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class CsharpHttpClientCodegenTest {
+
+    CsharpHttpClientCodegen codegen = new CsharpHttpClientCodegen();
+
+    @Test
+    public void shouldSucceed() throws Exception {
+        // TODO: Complete this test.
+        Assert.fail("Not implemented.");
+    }
+}
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/CsharpHttpClientCodegenOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/CsharpHttpClientCodegenOptionsProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..88a7a2bc05ee70f06186d92b09dedc50caed2c29
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/CsharpHttpClientCodegenOptionsProvider.java
@@ -0,0 +1,31 @@
+package org.openapitools.codegen.options;
+
+import org.openapitools.codegen.CodegenConstants;
+import org.openapitools.codegen.languages.CsharpHttpClientCodegen;
+
+import com.google.common.collect.ImmutableMap;
+
+import java.util.Map;
+
+public class CsharpHttpClientCodegenOptionsProvider implements OptionsProvider {
+    public static final String PROJECT_NAME_VALUE = "OpenAPI";
+
+    @Override
+    public String getLanguage() {
+        return "csharp-http";
+    }
+
+    @Override
+    public Map<String, String> createOptions() {
+        ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
+        return builder
+                .put(CsharpHttpClientCodegen.PROJECT_NAME, PROJECT_NAME_VALUE)
+                .build();
+    }
+
+    @Override
+    public boolean isServer() {
+        return false;
+    }
+}
+