diff --git a/build.json b/build.json
index 22a404503ef..bbff314aa26 100644
--- a/build.json
+++ b/build.json
@@ -347,7 +347,8 @@
"deps": [
"gpr",
"grpc"
- ]
+ ],
+ "vs_project_guid": "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
},
{
"name": "grpc_test_util",
diff --git a/templates/vsprojects/vs2013/gpr.vcxproj.filters.template b/templates/vsprojects/vs2013/gpr.vcxproj.filters.template
index 0ed1ed85d0d..c8b2ce099ea 100644
--- a/templates/vsprojects/vs2013/gpr.vcxproj.filters.template
+++ b/templates/vsprojects/vs2013/gpr.vcxproj.filters.template
@@ -1,2 +1,2 @@
-<%namespace file="vcxproj.filters_defs.include" import="gen_project"/>\
-${gen_project('gpr', libs, targets)}
+<%namespace file="vcxproj.filters_defs.include" import="gen_filters"/>\
+${gen_filters('gpr', libs, targets)}
diff --git a/templates/vsprojects/vs2013/grpc.vcxproj.filters.template b/templates/vsprojects/vs2013/grpc.vcxproj.filters.template
index 0327c9422d9..b8e91bd61c4 100644
--- a/templates/vsprojects/vs2013/grpc.vcxproj.filters.template
+++ b/templates/vsprojects/vs2013/grpc.vcxproj.filters.template
@@ -1,2 +1,2 @@
-<%namespace file="vcxproj.filters_defs.include" import="gen_project"/>\
-${gen_project('grpc', libs, targets)}
+<%namespace file="vcxproj.filters_defs.include" import="gen_filters"/>\
+${gen_filters('grpc', libs, targets)}
diff --git a/templates/vsprojects/vs2013/grpc_csharp_ext.vcxproj.filters.template b/templates/vsprojects/vs2013/grpc_csharp_ext.vcxproj.filters.template
new file mode 100644
index 00000000000..2b2fc8fadd7
--- /dev/null
+++ b/templates/vsprojects/vs2013/grpc_csharp_ext.vcxproj.filters.template
@@ -0,0 +1,2 @@
+<%namespace file="vcxproj.filters_defs.include" import="gen_filters"/>\
+${gen_filters('grc_csharp_ext', libs, targets)}
diff --git a/templates/vsprojects/vs2013/grpc_csharp_ext.vcxproj.template b/templates/vsprojects/vs2013/grpc_csharp_ext.vcxproj.template
new file mode 100644
index 00000000000..84aa50209aa
--- /dev/null
+++ b/templates/vsprojects/vs2013/grpc_csharp_ext.vcxproj.template
@@ -0,0 +1,2 @@
+<%namespace file="vcxproj_defs.include" import="gen_project"/>\
+${gen_project('grpc_csharp_ext', libs, targets)}
diff --git a/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.filters.template b/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.filters.template
index 48cbbd30bb6..ef918922ef7 100644
--- a/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.filters.template
+++ b/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.filters.template
@@ -1,2 +1,2 @@
-<%namespace file="vcxproj.filters_defs.include" import="gen_project"/>\
-${gen_project('grpc_unsecure', libs, targets)}
+<%namespace file="vcxproj.filters_defs.include" import="gen_filters"/>\
+${gen_filters('grpc_unsecure', libs, targets)}
diff --git a/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.template b/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.template
index 3de6453f520..4f62b85a856 100644
--- a/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.template
+++ b/templates/vsprojects/vs2013/grpc_unsecure.vcxproj.template
@@ -1,2 +1,2 @@
<%namespace file="vcxproj_defs.include" import="gen_project"/>\
-${gen_project('grpc', libs, targets)}
\ No newline at end of file
+${gen_project('grpc_unsecure', libs, targets)}
\ No newline at end of file
diff --git a/templates/vsprojects/vs2013/vcxproj.filters_defs.include b/templates/vsprojects/vs2013/vcxproj.filters_defs.include
index c25718b8025..539ae932f14 100644
--- a/templates/vsprojects/vs2013/vcxproj.filters_defs.include
+++ b/templates/vsprojects/vs2013/vcxproj.filters_defs.include
@@ -8,7 +8,7 @@
<%def name="to_windows_path(path)">${path.replace('/','\\')}%def>\
<%def name="to_filter(path)">${calc_to_filter(path)}%def>\
<%def name="filter_to_guid(proj, filter)">${re.sub('(........)(....)(....)(....)', r'\1-\2-\3-\4-', hashlib.md5(''.join([filter, proj])).hexdigest())}%def>\
-<%def name="gen_project(name, libs, targets)">\
+<%def name="gen_filters(name, libs, targets)">\
% for project in vsprojects:
% if project.name == name:
diff --git a/vsprojects/vs2013/grpc.sln b/vsprojects/vs2013/grpc.sln
index 9b3ebaf633b..efc4725ed18 100644
--- a/vsprojects/vs2013/grpc.sln
+++ b/vsprojects/vs2013/grpc.sln
@@ -12,6 +12,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "grpc.vcxproj", "{29
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_csharp_ext", "grpc_csharp_ext.vcxproj", "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
+ ProjectSection(ProjectDependencies) = postProject
+ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+ {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_unsecure", "grpc_unsecure.vcxproj", "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}"
@@ -41,6 +47,10 @@ Global
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Debug|Win32.Build.0 = Debug|Win32
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.ActiveCfg = Release|Win32
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.Build.0 = Release|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Debug|Win32.Build.0 = Debug|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Release|Win32.ActiveCfg = Release|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Release|Win32.Build.0 = Release|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.Build.0 = Debug|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/vsprojects/vs2013/grpc_csharp_ext.vcxproj b/vsprojects/vs2013/grpc_csharp_ext.vcxproj
new file mode 100644
index 00000000000..0f355661869
--- /dev/null
+++ b/vsprojects/vs2013/grpc_csharp_ext.vcxproj
@@ -0,0 +1,91 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}
+
+
+
+ StaticLibrary
+ true
+ v120
+ Unicode
+ $(Configuration)\$(ProjectName)\
+
+
+ StaticLibrary
+ false
+ v120
+ true
+ Unicode
+ $(Configuration)\$(ProjectName)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NotUsing
+ Level3
+ Disabled
+ WIN32;_DEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)
+ true
+
+
+ Windows
+ true
+
+
+
+
+ Level3
+ NotUsing
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)
+ true
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+
+
+ {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+
+
+
+
+
+
+
diff --git a/vsprojects/vs2013/grpc_csharp_ext.vcxproj.filters b/vsprojects/vs2013/grpc_csharp_ext.vcxproj.filters
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/vsprojects/vs2013/grpc_csharp_ext.vcxproj.filters
@@ -0,0 +1 @@
+
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj b/vsprojects/vs2013/grpc_unsecure.vcxproj
index 12428bd4b16..3dab86c6e94 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj
@@ -11,7 +11,7 @@
- {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+ {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}
@@ -73,24 +73,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -182,32 +170,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-