diff --git a/compiler/cpp/tests/CMakeLists.txt b/compiler/cpp/tests/CMakeLists.txt
index 91cc35d..7798c15 100644
--- a/compiler/cpp/tests/CMakeLists.txt
+++ b/compiler/cpp/tests/CMakeLists.txt
@@ -116,7 +116,7 @@
 THRIFT_ADD_COMPILER(js      "Enable compiler for JavaScript" OFF)
 THRIFT_ADD_COMPILER(json    "Enable compiler for JSON" OFF)
 THRIFT_ADD_COMPILER(lua     "Enable compiler for Lua" OFF)
-THRIFT_ADD_COMPILER(netcore "Enable compiler for .NET Core" ON)
+THRIFT_ADD_COMPILER(netstd  "Enable compiler for .NET Standard" ON)
 THRIFT_ADD_COMPILER(ocaml   "Enable compiler for OCaml" OFF)
 THRIFT_ADD_COMPILER(perl    "Enable compiler for Perl" OFF)
 THRIFT_ADD_COMPILER(php     "Enable compiler for PHP" OFF)
diff --git a/compiler/cpp/tests/README.md b/compiler/cpp/tests/README.md
index 27be491..91c0625 100644
--- a/compiler/cpp/tests/README.md
+++ b/compiler/cpp/tests/README.md
@@ -16,7 +16,7 @@
 
 ## General information 
 
-Added generic way to cover code by tests for many languages (you just need to make a correct header file for generator for your language - example in **netcore** implementation)
+Added generic way to cover code by tests for many languages (you just need to make a correct header file for generator for your language - example in **netstd** implementation)
 
 At current moment these tests use free Catch library (https://github.com/catchorg/Catch2/tree/Catch1.x) for easy test creation and usage.
 Decision to use it was because of simplicity, easy usage, one header file to use, stable community and growing interest  (https://cpp.libhunt.com/project/googletest-google/vs/catch?rel=cmp-cmp)
@@ -29,7 +29,7 @@
 - Set **On** to call of **THRIFT_ADD_COMPILER** for your language
 
 ``` cmake 
-THRIFT_ADD_COMPILER(netcore "Enable compiler for .NET Core" ON)
+THRIFT_ADD_COMPILER(netstd "Enable compiler for .NET Standard" ON)
 ```
 
 - Create folder with name specified in list of languages in **CMakeLists.txt**
diff --git a/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests.cc b/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests.cc
index 0b8c837..a2f0a50 100644
--- a/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests.cc
+++ b/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests.cc
@@ -17,18 +17,18 @@
 
 #include "../catch/catch.hpp"
 #include <thrift/parse/t_program.h>
-#include <thrift/generate/t_netcore_generator.h>
-#include "t_netcore_generator_functional_tests_helpers.h"
+#include <thrift/generate/t_netstd_generator.h>
+#include "t_netstd_generator_functional_tests_helpers.h"
 
-TEST_CASE( "t_netcore_generator should generate valid enum", "[functional]" )
+TEST_CASE( "t_netstd_generator should generate valid enum", "[functional]" )
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
 
     std::pair<string, t_enum*> pair = TestDataGenerator::get_test_enum_data(program);
     string expected_result = pair.first;
@@ -53,15 +53,15 @@
     delete program;	
 }
 
-TEST_CASE("t_netcore_generator should generate valid void", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid void", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_void_const_data(gen);
     string expected_result = pair.first;
@@ -86,15 +86,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid string with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid string with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_string_const_data(gen);
@@ -122,15 +122,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid bool with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid bool with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_bool_const_data(gen);
@@ -158,15 +158,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid sbyte (i8) with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid sbyte (i8) with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_i8_const_data(gen);
@@ -194,15 +194,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid short (i16) with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid short (i16) with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_i16_const_data(gen);
@@ -230,15 +230,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid integer (i32) with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid integer (i32) with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_i32_const_data(gen);
@@ -266,15 +266,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid long (i64) with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid long (i64) with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_i64_const_data(gen);
@@ -302,15 +302,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should generate valid double with escaping keyword", "[functional]")
+TEST_CASE("t_netstd_generator should generate valid double with escaping keyword", "[functional]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
 
     std::pair<string, t_const*> pair = TestDataGenerator::get_test_double_const_data(gen);
diff --git a/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.cc b/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.cc
index 92c170b..db4ce78 100644
--- a/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.cc
+++ b/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.cc
@@ -17,8 +17,8 @@
 
 #include <thrift/parse/t_program.h>
 #include "thrift/common.h"
-#include <thrift/generate/t_netcore_generator.h>
-#include "t_netcore_generator_functional_tests_helpers.h"
+#include <thrift/generate/t_netstd_generator.h>
+#include "t_netstd_generator_functional_tests_helpers.h"
 
 const string TestDataGenerator::DEFAULT_FILE_HEADER = "/**" "\n"
             " * Autogenerated by Thrift Compiler ()" "\n"
@@ -52,7 +52,7 @@
     return std::pair<string, t_enum*>(expected_result, enum_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_void_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_void_const_data(t_netstd_generator* gen)
 {
     string expected_result = DEFAULT_FILE_HEADER;
 
@@ -68,11 +68,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_string_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_string_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() + 
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() + 
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
@@ -92,11 +92,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_bool_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_bool_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() +
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() +
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
@@ -116,11 +116,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_i8_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_i8_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() +
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() +
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
@@ -140,11 +140,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_i16_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_i16_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() +
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() +
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
@@ -164,11 +164,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_i32_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_i32_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() +
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() +
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
@@ -188,11 +188,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_i64_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_i64_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() +
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() +
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
@@ -212,11 +212,11 @@
     return std::pair<string, t_const*>(expected_result, const_);
 }
 
-std::pair<string, t_const*> TestDataGenerator::get_test_double_const_data(t_netcore_generator* gen)
+std::pair<string, t_const*> TestDataGenerator::get_test_double_const_data(t_netstd_generator* gen)
 {
-    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netcore_type_usings() +
+    string expected_result = DEFAULT_FILE_HEADER + "\n" +gen->netstd_type_usings() +
         "\n"
-        "public static class netcoreConstants\n"
+        "public static class netstdConstants\n"
         "{\n"
         "  /// <summary>\n"
         "  /// TestDoc\n"
diff --git a/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.h b/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.h
index c6eaac2..9829197 100644
--- a/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.h
+++ b/compiler/cpp/tests/netcore/t_netcore_generator_functional_tests_helpers.h
@@ -23,12 +23,12 @@
     static const string DEFAULT_FILE_HEADER;
 
     static std::pair<string, t_enum*> get_test_enum_data(t_program* program);
-    static std::pair<string, t_const*> get_test_void_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_string_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_bool_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_i8_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_i16_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_i32_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_i64_const_data(t_netcore_generator* gen);
-    static std::pair<string, t_const*> get_test_double_const_data(t_netcore_generator* gen);
+    static std::pair<string, t_const*> get_test_void_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_string_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_bool_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_i8_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_i16_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_i32_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_i64_const_data(t_netstd_generator* gen);
+    static std::pair<string, t_const*> get_test_double_const_data(t_netstd_generator* gen);
 };
diff --git a/compiler/cpp/tests/netcore/t_netcore_generator_helpers_tests.cc b/compiler/cpp/tests/netcore/t_netcore_generator_helpers_tests.cc
index 0bcbeed..6acedc0 100644
--- a/compiler/cpp/tests/netcore/t_netcore_generator_helpers_tests.cc
+++ b/compiler/cpp/tests/netcore/t_netcore_generator_helpers_tests.cc
@@ -17,14 +17,14 @@
 
 #include "../catch/catch.hpp"
 #include <thrift/parse/t_program.h>
-#include <thrift/generate/t_netcore_generator.h>
+#include <thrift/generate/t_netstd_generator.h>
 
 using std::vector;
 
-TEST_CASE("t_netcore_generator::netcore_type_usings() without option wcf should return valid namespaces", "[helpers]")
+TEST_CASE("t_netstd_generator::netstd_type_usings() without option wcf should return valid namespaces", "[helpers]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "union", "union" } };
     string option_string = "";
 
@@ -39,19 +39,19 @@
                                 "using Thrift.Collections;\n" + endl;
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
 
     REQUIRE_FALSE(gen->is_wcf_enabled());
-    REQUIRE(gen->netcore_type_usings() == expected_namespaces);
+    REQUIRE(gen->netstd_type_usings() == expected_namespaces);
 
     delete gen;
     delete program;
 }
 
-TEST_CASE("t_netcore_generator::netcore_type_usings() with option wcf should return valid namespaces", "[helpers]")
+TEST_CASE("t_netstd_generator::netstd_type_usings() with option wcf should return valid namespaces", "[helpers]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
 
@@ -68,19 +68,19 @@
                                     "using System.Runtime.Serialization;\n" + endl;
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
 
     REQUIRE(gen->is_wcf_enabled());
-    REQUIRE(gen->netcore_type_usings() == expected_namespaces_wcf);
+    REQUIRE(gen->netstd_type_usings() == expected_namespaces_wcf);
 
     delete gen;
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should contains latest C# keywords to normalize with @", "[helpers]")
+TEST_CASE("t_netstd_generator should contains latest C# keywords to normalize with @", "[helpers]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" } };
     string option_string = "";
     vector<string> current_keywords = {
@@ -190,7 +190,7 @@
     string missed_keywords = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
     gen->init_generator();
     map<string, int> generators_keywords = gen->get_keywords_list();
 
diff --git a/compiler/cpp/tests/netcore/t_netcore_generator_initialization_tests.cc b/compiler/cpp/tests/netcore/t_netcore_generator_initialization_tests.cc
index ec17733..530e290 100644
--- a/compiler/cpp/tests/netcore/t_netcore_generator_initialization_tests.cc
+++ b/compiler/cpp/tests/netcore/t_netcore_generator_initialization_tests.cc
@@ -17,35 +17,35 @@
 
 #include "../catch/catch.hpp"
 #include <thrift/parse/t_program.h>
-#include <thrift/generate/t_netcore_generator.h>
+#include <thrift/generate/t_netstd_generator.h>
 
-TEST_CASE( "t_netcore_generator should throw error with unknown options", "[initialization]" )
+TEST_CASE( "t_netstd_generator should throw error with unknown options", "[initialization]" )
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "keys", "keys" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = nullptr;
+    t_netstd_generator* gen = nullptr;
 
-    REQUIRE_THROWS(gen = new t_netcore_generator(program, parsed_options, option_string));	
+    REQUIRE_THROWS(gen = new t_netstd_generator(program, parsed_options, option_string));	
 
     delete gen;
     delete program;	
 }
 
-TEST_CASE("t_netcore_generator should create valid instance with valid options", "[initialization]")
+TEST_CASE("t_netstd_generator should create valid instance with valid options", "[initialization]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" }, { "nullable", "nullable"} };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = nullptr;
+    t_netstd_generator* gen = nullptr;
 
-    REQUIRE_NOTHROW(gen = new t_netcore_generator(program, parsed_options, option_string));
+    REQUIRE_NOTHROW(gen = new t_netstd_generator(program, parsed_options, option_string));
     REQUIRE(gen != nullptr);
     REQUIRE(gen->is_wcf_enabled());
     REQUIRE(gen->is_nullable_enabled());
@@ -57,15 +57,15 @@
     delete program;
 }
 
-TEST_CASE("t_netcore_generator should pass init succesfully", "[initialization]")
+TEST_CASE("t_netstd_generator should pass init succesfully", "[initialization]")
 {
     string path = "CassandraTest.thrift";
-    string name = "netcore";
+    string name = "netstd";
     map<string, string> parsed_options = { { "wcf", "wcf" },{ "nullable", "nullable" } };
     string option_string = "";
 
     t_program* program = new t_program(path, name);
-    t_netcore_generator* gen = new t_netcore_generator(program, parsed_options, option_string);
+    t_netstd_generator* gen = new t_netstd_generator(program, parsed_options, option_string);
 
     REQUIRE_NOTHROW(gen->init_generator());
 
