diff --git a/src/csharp/build_nuget.sh b/src/csharp/build_nuget.sh
new file mode 100755
index 00000000000..df87422b054
--- /dev/null
+++ b/src/csharp/build_nuget.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+# Copyright 2020 The gRPC Authors
+#
+# Licensed 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.
+
+set -ex
+
+cd "$(dirname "$0")"
+
+mkdir -p ../../artifacts
+
+# Collect the artifacts built by the previous build step
+mkdir -p nativelibs
+cp -r "${EXTERNAL_GIT_ROOT}"/input_artifacts/csharp_ext_* nativelibs || true
+
+# Collect protoc artifacts built by the previous build step
+mkdir -p protoc_plugins
+cp -r "${EXTERNAL_GIT_ROOT}"/input_artifacts/protoc_* protoc_plugins || true
+
+# Add current timestamp to dev nugets
+./expand_dev_version.sh
+
+dotnet restore Grpc.sln
+
+# To be able to build the Grpc.Core project, we also need to put grpc_csharp_ext to where Grpc.Core.csproj
+# expects it.
+mkdir -p ../../cmake/build
+cp nativelibs/csharp_ext_linux_x64/libgrpc_csharp_ext.so ../../cmake/build
+
+dotnet pack --configuration Release Grpc.Core.Api --output ../../../artifacts
+dotnet pack --configuration Release Grpc.Core --output ../../../artifacts
+dotnet pack --configuration Release Grpc.Core.Testing --output ../../../artifacts
+dotnet pack --configuration Release Grpc.Auth --output ../../../artifacts
+dotnet pack --configuration Release Grpc.HealthCheck --output ../../../artifacts
+dotnet pack --configuration Release Grpc.Reflection --output ../../../artifacts
+dotnet pack --configuration Release Grpc.Tools --output ../../../artifacts
+# rem build auxiliary packages
+dotnet pack --configuration Release Grpc --output ../../../artifacts
+dotnet pack --configuration Release Grpc.Core.NativeDebug --output ../../../artifacts
+
+# Create a zipfile with all the nugets we just created
+cd ../../artifacts
+zip csharp_nugets_windows_dotnetcli.zip *.nupkg
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
deleted file mode 100755
index f500310865b..00000000000
--- a/src/csharp/build_packages_dotnetcli.bat
+++ /dev/null
@@ -1,57 +0,0 @@
-@rem Copyright 2016 gRPC authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-
-set DOTNET=dotnet
-
-mkdir ..\..\artifacts
-
-@rem Collect the artifacts built by the previous build step
-mkdir nativelibs
-powershell -Command "cp -r ..\..\input_artifacts\csharp_ext_* nativelibs"
-
-@rem Collect protoc artifacts built by the previous build step
-mkdir protoc_plugins
-powershell -Command "cp -r ..\..\input_artifacts\protoc_* protoc_plugins"
-
-@rem Add current timestamp to dev nugets
-expand_dev_version.sh
-
-%DOTNET% restore Grpc.sln || goto :error
-
-@rem To be able to build, we also need to put grpc_csharp_ext to its normal location
-xcopy /Y /I nativelibs\csharp_ext_windows_x64\grpc_csharp_ext.dll ..\..\cmake\build\x64\Release\
-
-%DOTNET% pack --configuration Release Grpc.Core.Api --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.Core --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.Core.Testing --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.Auth --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.HealthCheck --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.Reflection --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.Tools --output ..\..\..\artifacts || goto :error
-@rem build auxiliary packages
-%DOTNET% pack --configuration Release Grpc --output ..\..\..\artifacts || goto :error
-%DOTNET% pack --configuration Release Grpc.Core.NativeDebug --output ..\..\..\artifacts || goto :error
-
-@rem copy resulting nuget packages to artifacts directory
-xcopy /Y /I *.nupkg ..\..\artifacts\ || goto :error
-
-@rem create a zipfile with the artifacts as well
-powershell -Command "Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::CreateFromDirectory('..\..\artifacts', 'csharp_nugets_windows_dotnetcli.zip');"
-xcopy /Y /I csharp_nugets_windows_dotnetcli.zip ..\..\artifacts\ || goto :error
-
-goto :EOF
-
-:error
-echo Failed!
-exit /b %errorlevel%
diff --git a/src/csharp/build_unitypackage.bat b/src/csharp/build_unitypackage.bat
deleted file mode 100644
index 790c65c2049..00000000000
--- a/src/csharp/build_unitypackage.bat
+++ /dev/null
@@ -1,85 +0,0 @@
-@rem Copyright 2018 The gRPC Authors
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-
-@rem Current package versions
-set VERSION=2.34.0-dev
-
-@rem Adjust the location of nuget.exe
-set NUGET=nuget
-set DOTNET=dotnet
-
-mkdir ..\..\artifacts
-
-@rem Collect the artifacts built by the previous build step
-mkdir nativelibs
-powershell -Command "cp -r ..\..\input_artifacts\csharp_ext_* nativelibs"
-
-@rem Collect protoc artifacts built by the previous build step
-mkdir protoc_plugins
-powershell -Command "cp -r ..\..\input_artifacts\protoc_* protoc_plugins"
-
-%DOTNET% restore Grpc.sln || goto :error
-
-@rem To be able to build, we also need to put grpc_csharp_ext to its normal location
-xcopy /Y /I nativelibs\csharp_ext_windows_x64\grpc_csharp_ext.dll ..\..\cmake\build\x64\Release\
-
-%DOTNET% build --configuration Release Grpc.Core || goto :error
-@rem build HealthCheck to get hold of Google.Protobuf.dll assembly
-%DOTNET% build --configuration Release Grpc.HealthCheck || goto :error
-
-@rem copy Grpc assemblies to the unity package skeleton
-@rem TODO(jtattermusch): Add Grpc.Auth assembly and its dependencies
-copy /Y Grpc.Core.Api\bin\Release\net45\Grpc.Core.Api.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core.Api\lib\net45\Grpc.Core.Api.dll || goto :error
-copy /Y Grpc.Core.Api\bin\Release\net45\Grpc.Core.Api.pdb unitypackage\unitypackage_skeleton\Plugins\Grpc.Core.Api\lib\net45\Grpc.Core.Api.pdb || goto :error
-copy /Y Grpc.Core.Api\bin\Release\net45\Grpc.Core.Api.xml unitypackage\unitypackage_skeleton\Plugins\Grpc.Core.Api\lib\net45\Grpc.Core.Api.xml || goto :error
-copy /Y Grpc.Core\bin\Release\net45\Grpc.Core.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\lib\net45\Grpc.Core.dll || goto :error
-copy /Y Grpc.Core\bin\Release\net45\Grpc.Core.pdb unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\lib\net45\Grpc.Core.pdb || goto :error
-copy /Y Grpc.Core\bin\Release\net45\Grpc.Core.xml unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\lib\net45\Grpc.Core.xml || goto :error
-
-@rem copy desktop native libraries to the unity package skeleton
-copy /Y nativelibs\csharp_ext_linux_x86\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\linux\x86\libgrpc_csharp_ext.so || goto :error
-copy /Y nativelibs\csharp_ext_linux_x64\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\linux\x64\libgrpc_csharp_ext.so || goto :error
-copy /Y nativelibs\csharp_ext_macos_x86\libgrpc_csharp_ext.dylib unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\osx\x86\grpc_csharp_ext.bundle || goto :error
-copy /Y nativelibs\csharp_ext_macos_x64\libgrpc_csharp_ext.dylib unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\osx\x64\grpc_csharp_ext.bundle || goto :error
-copy /Y nativelibs\csharp_ext_windows_x86\grpc_csharp_ext.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\win\x86\grpc_csharp_ext.dll || goto :error
-copy /Y nativelibs\csharp_ext_windows_x64\grpc_csharp_ext.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\win\x64\grpc_csharp_ext.dll || goto :error
-
-@rem add Android and iOS native libraries
-copy /Y nativelibs\csharp_ext_linux_android_armeabi-v7a\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\android\armeabi-v7a\libgrpc_csharp_ext.so || goto :error
-copy /Y nativelibs\csharp_ext_linux_android_arm64-v8a\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\android\arm64-v8a\libgrpc_csharp_ext.so || goto :error
-copy /Y nativelibs\csharp_ext_linux_android_x86\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\android\x86\libgrpc_csharp_ext.so || goto :error
-copy /Y nativelibs\csharp_ext_macos_ios\libgrpc_csharp_ext.a unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\ios\libgrpc_csharp_ext.a || goto :error
-copy /Y nativelibs\csharp_ext_macos_ios\libgrpc.a unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\ios\libgrpc.a || goto :error
-
-@rem add gRPC dependencies
-@rem TODO(jtattermusch): also include XMLdoc
-copy /Y Grpc.Core\bin\Release\net45\System.Runtime.CompilerServices.Unsafe.dll unitypackage\unitypackage_skeleton\Plugins\System.Runtime.CompilerServices.Unsafe\lib\net45\System.Runtime.CompilerServices.Unsafe.dll || goto :error
-copy /Y Grpc.Core\bin\Release\net45\System.Buffers.dll unitypackage\unitypackage_skeleton\Plugins\System.Buffers\lib\net45\System.Buffers.dll || goto :error
-copy /Y Grpc.Core\bin\Release\net45\System.Memory.dll unitypackage\unitypackage_skeleton\Plugins\System.Memory\lib\net45\System.Memory.dll || goto :error
-
-@rem add Google.Protobuf
-@rem TODO(jtattermusch): also include XMLdoc
-copy /Y Grpc.HealthCheck\bin\Release\net45\Google.Protobuf.dll unitypackage\unitypackage_skeleton\Plugins\Google.Protobuf\lib\net45\Google.Protobuf.dll || goto :error
-
-@rem create a zipfile that will act as a Unity package
-cd unitypackage\unitypackage_skeleton
-zip -r ..\..\grpc_unity_package.zip Plugins
-cd ..\..
-copy /Y grpc_unity_package.zip ..\..\artifacts\grpc_unity_package.%VERSION%.zip || goto :error
-
-goto :EOF
-
-:error
-echo Failed!
-exit /b %errorlevel%
diff --git a/src/csharp/build_unitypackage.sh b/src/csharp/build_unitypackage.sh
new file mode 100755
index 00000000000..e1d47cb04f9
--- /dev/null
+++ b/src/csharp/build_unitypackage.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+# Copyright 2020 The gRPC Authors
+#
+# Licensed 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.
+
+set -ex
+
+cd "$(dirname "$0")"
+
+mkdir -p ../../artifacts
+
+# Collect the artifacts built by the previous build step
+mkdir -p nativelibs
+cp -r "${EXTERNAL_GIT_ROOT}"/input_artifacts/csharp_ext_* nativelibs || true
+
+# Add current timestamp to dev nugets
+./expand_dev_version.sh
+
+# Extract current Grpc.Core version from build/dependencies.props
+UNITYPACKAGE_VERSION="$(grep -o '.*' build/dependencies.props | sed 's///' | sed 's/<\/GrpcCsharpVersion>//')"
+
+dotnet restore Grpc.sln
+
+# To be able to build the Grpc.Core project, we also need to put grpc_csharp_ext to where Grpc.Core.csproj
+# expects it.
+mkdir -p ../../cmake/build
+cp nativelibs/csharp_ext_linux_x64/libgrpc_csharp_ext.so ../../cmake/build
+
+dotnet build --configuration Release Grpc.Core
+# build HealthCheck to get hold of Google.Protobuf.dll assembly
+dotnet build --configuration Release Grpc.HealthCheck
+
+# copy Grpc assemblies to the unity package skeleton
+# TODO(jtattermusch): Add Grpc.Auth assembly and its dependencies
+cp Grpc.Core.Api/bin/Release/net45/Grpc.Core.Api.dll unitypackage/unitypackage_skeleton/Plugins/Grpc.Core.Api/lib/net45/Grpc.Core.Api.dll
+cp Grpc.Core.Api/bin/Release/net45/Grpc.Core.Api.pdb unitypackage/unitypackage_skeleton/Plugins/Grpc.Core.Api/lib/net45/Grpc.Core.Api.pdb
+cp Grpc.Core.Api/bin/Release/net45/Grpc.Core.Api.xml unitypackage/unitypackage_skeleton/Plugins/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml
+cp Grpc.Core/bin/Release/net45/Grpc.Core.dll unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/lib/net45/Grpc.Core.dll
+cp Grpc.Core/bin/Release/net45/Grpc.Core.pdb unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/lib/net45/Grpc.Core.pdb
+cp Grpc.Core/bin/Release/net45/Grpc.Core.xml unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/lib/net45/Grpc.Core.xml
+
+# copy desktop native libraries to the unity package skeleton
+cp nativelibs/csharp_ext_linux_x86/libgrpc_csharp_ext.so unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so
+cp nativelibs/csharp_ext_linux_x64/libgrpc_csharp_ext.so unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so
+cp nativelibs/csharp_ext_macos_x86/libgrpc_csharp_ext.dylib unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle
+cp nativelibs/csharp_ext_macos_x64/libgrpc_csharp_ext.dylib unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle
+cp nativelibs/csharp_ext_windows_x86/grpc_csharp_ext.dll unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll
+cp nativelibs/csharp_ext_windows_x64/grpc_csharp_ext.dll unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll
+
+# add Android and iOS native libraries
+cp nativelibs/csharp_ext_linux_android_armeabi-v7a/libgrpc_csharp_ext.so unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so
+cp nativelibs/csharp_ext_linux_android_arm64-v8a/libgrpc_csharp_ext.so unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so
+cp nativelibs/csharp_ext_linux_android_x86/libgrpc_csharp_ext.so unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so
+cp nativelibs/csharp_ext_macos_ios/libgrpc_csharp_ext.a unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a
+cp nativelibs/csharp_ext_macos_ios/libgrpc.a unitypackage/unitypackage_skeleton/Plugins/Grpc.Core/runtimes/ios/libgrpc.a
+
+# add gRPC dependencies
+# TODO(jtattermusch): also include XMLdoc
+cp Grpc.Core/bin/Release/net45/System.Runtime.CompilerServices.Unsafe.dll unitypackage/unitypackage_skeleton/Plugins/System.Runtime.CompilerServices.Unsafe/lib/net45/System.Runtime.CompilerServices.Unsafe.dll
+cp Grpc.Core/bin/Release/net45/System.Buffers.dll unitypackage/unitypackage_skeleton/Plugins/System.Buffers/lib/net45/System.Buffers.dll
+cp Grpc.Core/bin/Release/net45/System.Memory.dll unitypackage/unitypackage_skeleton/Plugins/System.Memory/lib/net45/System.Memory.dll
+
+# add Google.Protobuf
+# TODO(jtattermusch): also include XMLdoc
+cp Grpc.HealthCheck/bin/Release/net45/Google.Protobuf.dll unitypackage/unitypackage_skeleton/Plugins/Google.Protobuf/lib/net45/Google.Protobuf.dll
+
+# create a zipfile that will act as a Unity package
+pushd unitypackage/unitypackage_skeleton
+zip -r ../../grpc_unity_package.zip Plugins
+popd
+
+cp grpc_unity_package.zip ../../artifacts/grpc_unity_package.${UNITYPACKAGE_VERSION}.zip
diff --git a/src/csharp/expand_dev_version.sh b/src/csharp/expand_dev_version.sh
old mode 100644
new mode 100755
diff --git a/templates/src/csharp/build_unitypackage.bat.template b/templates/src/csharp/build_unitypackage.bat.template
deleted file mode 100755
index 497858ecbb1..00000000000
--- a/templates/src/csharp/build_unitypackage.bat.template
+++ /dev/null
@@ -1,87 +0,0 @@
-%YAML 1.2
---- |
- @rem Copyright 2018 The gRPC Authors
- @rem
- @rem Licensed under the Apache License, Version 2.0 (the "License");
- @rem you may not use this file except in compliance with the License.
- @rem You may obtain a copy of the License at
- @rem
- @rem http://www.apache.org/licenses/LICENSE-2.0
- @rem
- @rem Unless required by applicable law or agreed to in writing, software
- @rem distributed under the License is distributed on an "AS IS" BASIS,
- @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- @rem See the License for the specific language governing permissions and
- @rem limitations under the License.
-
- @rem Current package versions
- set VERSION=${settings.csharp_version}
-
- @rem Adjust the location of nuget.exe
- set NUGET=nuget
- set DOTNET=dotnet
-
- mkdir ..\..\artifacts
-
- @rem Collect the artifacts built by the previous build step
- mkdir nativelibs
- powershell -Command "cp -r ..\..\input_artifacts\csharp_ext_* nativelibs"
-
- @rem Collect protoc artifacts built by the previous build step
- mkdir protoc_plugins
- powershell -Command "cp -r ..\..\input_artifacts\protoc_* protoc_plugins"
-
- %%DOTNET% restore Grpc.sln || goto :error
-
- @rem To be able to build, we also need to put grpc_csharp_ext to its normal location
- xcopy /Y /I nativelibs\csharp_ext_windows_x64\grpc_csharp_ext.dll ..\..\cmake\build\x64\Release${"\\"}
-
- %%DOTNET% build --configuration Release Grpc.Core || goto :error
- @rem build HealthCheck to get hold of Google.Protobuf.dll assembly
- %%DOTNET% build --configuration Release Grpc.HealthCheck || goto :error
-
- @rem copy Grpc assemblies to the unity package skeleton
- @rem TODO(jtattermusch): Add Grpc.Auth assembly and its dependencies
- copy /Y Grpc.Core.Api\bin\Release\net45\Grpc.Core.Api.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core.Api\lib\net45\Grpc.Core.Api.dll || goto :error
- copy /Y Grpc.Core.Api\bin\Release\net45\Grpc.Core.Api.pdb unitypackage\unitypackage_skeleton\Plugins\Grpc.Core.Api\lib\net45\Grpc.Core.Api.pdb || goto :error
- copy /Y Grpc.Core.Api\bin\Release\net45\Grpc.Core.Api.xml unitypackage\unitypackage_skeleton\Plugins\Grpc.Core.Api\lib\net45\Grpc.Core.Api.xml || goto :error
- copy /Y Grpc.Core\bin\Release\net45\Grpc.Core.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\lib\net45\Grpc.Core.dll || goto :error
- copy /Y Grpc.Core\bin\Release\net45\Grpc.Core.pdb unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\lib\net45\Grpc.Core.pdb || goto :error
- copy /Y Grpc.Core\bin\Release\net45\Grpc.Core.xml unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\lib\net45\Grpc.Core.xml || goto :error
-
- @rem copy desktop native libraries to the unity package skeleton
- copy /Y nativelibs\csharp_ext_linux_x86\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\linux\x86\libgrpc_csharp_ext.so || goto :error
- copy /Y nativelibs\csharp_ext_linux_x64\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\linux\x64\libgrpc_csharp_ext.so || goto :error
- copy /Y nativelibs\csharp_ext_macos_x86\libgrpc_csharp_ext.dylib unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\osx\x86\grpc_csharp_ext.bundle || goto :error
- copy /Y nativelibs\csharp_ext_macos_x64\libgrpc_csharp_ext.dylib unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\osx\x64\grpc_csharp_ext.bundle || goto :error
- copy /Y nativelibs\csharp_ext_windows_x86\grpc_csharp_ext.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\win\x86\grpc_csharp_ext.dll || goto :error
- copy /Y nativelibs\csharp_ext_windows_x64\grpc_csharp_ext.dll unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\win\x64\grpc_csharp_ext.dll || goto :error
-
- @rem add Android and iOS native libraries
- copy /Y nativelibs\csharp_ext_linux_android_armeabi-v7a\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\android\armeabi-v7a\libgrpc_csharp_ext.so || goto :error
- copy /Y nativelibs\csharp_ext_linux_android_arm64-v8a\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\android\arm64-v8a\libgrpc_csharp_ext.so || goto :error
- copy /Y nativelibs\csharp_ext_linux_android_x86\libgrpc_csharp_ext.so unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\android\x86\libgrpc_csharp_ext.so || goto :error
- copy /Y nativelibs\csharp_ext_macos_ios\libgrpc_csharp_ext.a unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\ios\libgrpc_csharp_ext.a || goto :error
- copy /Y nativelibs\csharp_ext_macos_ios\libgrpc.a unitypackage\unitypackage_skeleton\Plugins\Grpc.Core\runtimes\ios\libgrpc.a || goto :error
-
- @rem add gRPC dependencies
- @rem TODO(jtattermusch): also include XMLdoc
- copy /Y Grpc.Core\bin\Release\net45\System.Runtime.CompilerServices.Unsafe.dll unitypackage\unitypackage_skeleton\Plugins\System.Runtime.CompilerServices.Unsafe\lib\net45\System.Runtime.CompilerServices.Unsafe.dll || goto :error
- copy /Y Grpc.Core\bin\Release\net45\System.Buffers.dll unitypackage\unitypackage_skeleton\Plugins\System.Buffers\lib\net45\System.Buffers.dll || goto :error
- copy /Y Grpc.Core\bin\Release\net45\System.Memory.dll unitypackage\unitypackage_skeleton\Plugins\System.Memory\lib\net45\System.Memory.dll || goto :error
-
- @rem add Google.Protobuf
- @rem TODO(jtattermusch): also include XMLdoc
- copy /Y Grpc.HealthCheck\bin\Release\net45\Google.Protobuf.dll unitypackage\unitypackage_skeleton\Plugins\Google.Protobuf\lib\net45\Google.Protobuf.dll || goto :error
-
- @rem create a zipfile that will act as a Unity package
- cd unitypackage\unitypackage_skeleton
- zip -r ..\..\grpc_unity_package.zip Plugins
- cd ..\..
- copy /Y grpc_unity_package.zip ..\..\artifacts\grpc_unity_package.%VERSION%.zip || goto :error
-
- goto :EOF
-
- :error
- echo Failed!
- exit /b %errorlevel%
diff --git a/tools/internal_ci/windows/grpc_build_packages.bat b/tools/internal_ci/windows/grpc_build_packages.bat
index a5bffb28c24..8f1e5794e29 100644
--- a/tools/internal_ci/windows/grpc_build_packages.bat
+++ b/tools/internal_ci/windows/grpc_build_packages.bat
@@ -17,12 +17,12 @@ cd /d %~dp0\..\..\..
call tools/internal_ci/helper_scripts/prepare_build_windows.bat || exit /b 1
-@rem Move artifacts generated by the previous step in the build chain.
-powershell -Command "mv %KOKORO_GFILE_DIR%\github\grpc\artifacts input_artifacts"
-dir input_artifacts
-
-python tools/run_tests/task_runner.py -f package windows -j 4
-set RUNTESTS_EXITCODE=%errorlevel%
+rem NOTHING TO DO HERE
+rem This script used to run "task_runner.py -f package windows", but
+rem currently there are no build_packages tasks that need to be run on windows.
+rem The only build_packages task that ever needed to run on windows was C#, but we switched to
+rem building C# nugets on linux (as dotnet SDK on linux does a good job)
+rem TODO(jtattermusch): remove the infrastructure for running "build_packages" kokoro job on windows.
bash tools/internal_ci/helper_scripts/delete_nonartifacts.sh
diff --git a/tools/run_tests/artifacts/package_targets.py b/tools/run_tests/artifacts/package_targets.py
index 9a52bec1d53..cc057ec7387 100644
--- a/tools/run_tests/artifacts/package_targets.py
+++ b/tools/run_tests/artifacts/package_targets.py
@@ -76,12 +76,12 @@ class CSharpPackage:
def __init__(self, unity=False):
self.unity = unity
- self.labels = ['package', 'csharp', 'windows']
+ self.labels = ['package', 'csharp', 'linux']
if unity:
- self.name = 'csharp_package_unity_windows'
+ self.name = 'csharp_package_unity_linux'
self.labels += ['unity']
else:
- self.name = 'csharp_package_nuget_windows'
+ self.name = 'csharp_package_nuget_linux'
self.labels += ['nuget']
def pre_build_jobspecs(self):
@@ -89,16 +89,13 @@ class CSharpPackage:
def build_jobspec(self):
if self.unity:
- # use very high CPU cost to avoid running nuget package build
- # and unity build concurrently
- return create_jobspec(self.name, ['build_unitypackage.bat'],
- cwd='src\\csharp',
- cpu_cost=1e6,
- shell=True)
+ return create_docker_jobspec(
+ self.name, 'tools/dockerfile/test/csharp_stretch_x64',
+ 'src/csharp/build_unitypackage.sh')
else:
- return create_jobspec(self.name, ['build_packages_dotnetcli.bat'],
- cwd='src\\csharp',
- shell=True)
+ return create_docker_jobspec(
+ self.name, 'tools/dockerfile/test/csharp_stretch_x64',
+ 'src/csharp/build_nuget.sh')
def __str__(self):
return self.name