diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 6b84daea544b0047daeb9f571f9ebbf4c8fbc160..a9438045aa6d4802dad55caaf5b6d76a38d703b4 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -120,12 +120,7 @@ def get_c_tests(travis, test_lang) :
 
 def _check_compiler(compiler, supported_compilers):
   if compiler not in supported_compilers:
-    raise Exception('Compiler %s not supported (on this platform).' % compiler)
-
-
-def _check_arch(arch, supported_archs):
-  if arch not in supported_archs:
-    raise Exception('Architecture %s not supported.' % arch)
+    raise Exception('Compiler %s not supported.' % compiler)
 
 
 def _is_use_docker_child():
@@ -469,19 +464,7 @@ class CSharpLanguage(object):
   def configure(self, config, args):
     self.config = config
     self.args = args
-    if self.platform == 'windows':
-      # Explicitly choosing between x86 and x64 arch doesn't work yet
-      _check_arch(self.args.arch, ['default'])
-      self._make_options = [_windows_toolset_option(self.args.compiler),
-                            _windows_arch_option(self.args.arch)]
-    else:
-      _check_compiler(self.args.compiler, ['default'])
-      if self.platform == 'mac':
-        # On Mac, official distribution of mono is 32bit.
-        self._make_options = ['EMBED_OPENSSL=true', 'EMBED_ZLIB=true',
-                              'CFLAGS=-arch i386', 'LDFLAGS=-arch i386']
-      else:
-        self._make_options = ['EMBED_OPENSSL=true', 'EMBED_ZLIB=true']
+    _check_compiler(self.args.compiler, ['default'])
 
   def test_specs(self):
     with open('src/csharp/tests.json') as f:
@@ -528,16 +511,23 @@ class CSharpLanguage(object):
       return [['tools/run_tests/pre_build_csharp.sh']]
 
   def make_targets(self):
-    return ['grpc_csharp_ext']
+    # For Windows, this target doesn't really build anything,
+    # everything is build by buildall script later.
+    if self.platform == 'windows':
+      return []
+    else:
+      return ['grpc_csharp_ext']
 
   def make_options(self):
-    return self._make_options;
+    if self.platform == 'mac':
+      # On Mac, official distribution of mono is 32bit.
+      return ['CFLAGS=-arch i386', 'LDFLAGS=-arch i386']
+    else:
+      return []
 
   def build_steps(self):
     if self.platform == 'windows':
-      return [[_windows_build_bat(self.args.compiler),
-               'src/csharp/Grpc.sln',
-               '/p:Configuration=%s' % _MSBUILD_CONFIG[self.config.build_config]]]
+      return [['src\\csharp\\buildall.bat']]
     else:
       return [['tools/run_tests/build_csharp.sh']]
 
diff --git a/vsprojects/build_vs2010.bat b/vsprojects/build_vs2010.bat
index 1bc3c86a92f4bd9c6a16bb1cad4ed0d7cdf42b0e..64b0ed5d3f51262996bf14945493183d373b7325 100644
--- a/vsprojects/build_vs2010.bat
+++ b/vsprojects/build_vs2010.bat
@@ -1,5 +1,5 @@
 @rem Convenience wrapper that runs specified gRPC target using msbuild
-@rem Usage: build_vs2010.bat TARGET_NAME
+@rem Usage: build.bat TARGET_NAME
 
 setlocal
 @rem Set VS variables (uses Visual Studio 2010)
diff --git a/vsprojects/build_vs2013.bat b/vsprojects/build_vs2013.bat
index 82c0a3ad824d91966dd43464f3eb505bfe09ca12..be3caa9298c81eb45b4d68faabd17343b0be4f45 100644
--- a/vsprojects/build_vs2013.bat
+++ b/vsprojects/build_vs2013.bat
@@ -1,5 +1,5 @@
 @rem Convenience wrapper that runs specified gRPC target using msbuild
-@rem Usage: build_vs2013.bat TARGET_NAME
+@rem Usage: build.bat TARGET_NAME
 
 setlocal
 @rem Set VS variables (uses Visual Studio 2013)
diff --git a/vsprojects/build_vs2015.bat b/vsprojects/build_vs2015.bat
index c6e1b433a3e9fcf1526332d58ec52d41b807b925..50485a30f3070a9b5816548fa647f267ee4a9137 100644
--- a/vsprojects/build_vs2015.bat
+++ b/vsprojects/build_vs2015.bat
@@ -1,5 +1,5 @@
 @rem Convenience wrapper that runs specified gRPC target using msbuild
-@rem Usage: build_vs2015.bat TARGET_NAME
+@rem Usage: build.bat TARGET_NAME
 
 setlocal
 @rem Set VS variables (uses Visual Studio 2015)