[REEF-1798] Migrate Wake projects to VS2017 cs projects

  * Adds the new DotNet projects for Wake and Wake.Tests.
  * Updates references that are dotnet core compliant.
  * Added a NOT_DOTNET_BUILD directive so that code can change usings based
    upon the build that is being used. NOT_DOTNET_BUILD is only defined in
    the older build.props file. Both the ConnectionRetryHandler and
    RemoteConnectionHandler leverage this switch to use the right namespace.

JIRA:
  [REEF-1798](https://issues.apache.org/jira/browse/REEF-1798)

Pull request
  This closes #1305
diff --git a/lang/cs/Org.Apache.REEF.DotNet.sln b/lang/cs/Org.Apache.REEF.DotNet.sln
index c10a132..87f190f 100644
--- a/lang/cs/Org.Apache.REEF.DotNet.sln
+++ b/lang/cs/Org.Apache.REEF.DotNet.sln
@@ -1,12 +1,16 @@
 

 Microsoft Visual Studio Solution File, Format Version 12.00

 # Visual Studio 15

-VisualStudioVersion = 15.0.26228.10

+VisualStudioVersion = 15.0.26403.7

 MinimumVisualStudioVersion = 10.0.40219.1

 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Org.Apache.Reef.Utilities.DotNet", "Org.Apache.REEF.Utilities\Org.Apache.Reef.Utilities.DotNet.csproj", "{FE4CEA75-2F26-4C97-B256-375AA698B4A9}"

 EndProject

 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Org.Apache.REEF.Tang.DotNet", "Org.Apache.REEF.Tang\Org.Apache.REEF.Tang.DotNet.csproj", "{16E1218C-9A3C-49E2-A939-C29944BBB72E}"

 EndProject

+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Org.Apache.REEF.Wake.DotNet", "Org.Apache.REEF.Wake\Org.Apache.REEF.Wake.DotNet.csproj", "{C7314C70-7D05-4A77-B442-712712C60E16}"

+EndProject

+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Org.Apache.REEF.Wake.Tests.DotNet", "Org.Apache.REEF.Wake.Tests\Org.Apache.REEF.Wake.Tests.DotNet.csproj", "{1E2B189D-239E-419F-BA09-2A3B28EF98EB}"

+EndProject

 Global

 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

 		Debug|x64 = Debug|x64

@@ -21,6 +25,14 @@
 		{16E1218C-9A3C-49E2-A939-C29944BBB72E}.Debug|x64.Build.0 = Debug|x64

 		{16E1218C-9A3C-49E2-A939-C29944BBB72E}.Release|x64.ActiveCfg = Release|x64

 		{16E1218C-9A3C-49E2-A939-C29944BBB72E}.Release|x64.Build.0 = Release|x64

+		{C7314C70-7D05-4A77-B442-712712C60E16}.Debug|x64.ActiveCfg = Debug|x64

+		{C7314C70-7D05-4A77-B442-712712C60E16}.Debug|x64.Build.0 = Debug|x64

+		{C7314C70-7D05-4A77-B442-712712C60E16}.Release|x64.ActiveCfg = Release|x64

+		{C7314C70-7D05-4A77-B442-712712C60E16}.Release|x64.Build.0 = Release|x64

+		{1E2B189D-239E-419F-BA09-2A3B28EF98EB}.Debug|x64.ActiveCfg = Debug|x64

+		{1E2B189D-239E-419F-BA09-2A3B28EF98EB}.Debug|x64.Build.0 = Debug|x64

+		{1E2B189D-239E-419F-BA09-2A3B28EF98EB}.Release|x64.ActiveCfg = Release|x64

+		{1E2B189D-239E-419F-BA09-2A3B28EF98EB}.Release|x64.Build.0 = Release|x64

 	EndGlobalSection

 	GlobalSection(SolutionProperties) = preSolution

 		HideSolutionNode = FALSE

diff --git a/lang/cs/Org.Apache.REEF.Tang/Properties/AssemblyInfo.DotNet.cs b/lang/cs/Org.Apache.REEF.Tang/Properties/AssemblyInfo.DotNet.cs
new file mode 100644
index 0000000..5a43114
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Tang/Properties/AssemblyInfo.DotNet.cs
@@ -0,0 +1,21 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+using System.Runtime.CompilerServices;
+
+// Allow the tests access to `internal` APIs
+[assembly: InternalsVisibleTo("Org.Apache.REEF.Tang.Tests")]
diff --git a/lang/cs/Org.Apache.REEF.Wake.Tests/Org.Apache.REEF.Wake.Tests.DotNet.csproj b/lang/cs/Org.Apache.REEF.Wake.Tests/Org.Apache.REEF.Wake.Tests.DotNet.csproj
new file mode 100644
index 0000000..33c2bdb
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Wake.Tests/Org.Apache.REEF.Wake.Tests.DotNet.csproj
@@ -0,0 +1,32 @@
+<Project Sdk="Microsoft.NET.Sdk">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+  <PropertyGroup>
+    <AssemblyName>Org.Apache.REEF.Wake.Tests</AssemblyName>
+    <TargetFrameworks>net46;net451</TargetFrameworks>
+  </PropertyGroup>
+  <Import Project="..\build.DotNet.props" />
+  <ItemGroup>
+    <PackageReference Include="System.Reactive.Core" Version="$(RxVersion)" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="$(RxVersion)" />
+  </ItemGroup>
+  <Import Project="..\xunit.DotNet.props" />
+  <ItemGroup>
+    <ProjectReference Include="..\Org.Apache.REEF.Tang\Org.Apache.Reef.Tang.DotNet.csproj" />
+    <ProjectReference Include="..\Org.Apache.REEF.Wake\Org.Apache.Reef.Wake.DotNet.csproj" />
+  </ItemGroup>
+</Project>
diff --git a/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.DotNet.csproj b/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.DotNet.csproj
new file mode 100644
index 0000000..8d8ce5f
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.DotNet.csproj
@@ -0,0 +1,37 @@
+<Project Sdk="Microsoft.NET.Sdk">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+  <PropertyGroup>
+    <AssemblyName>Org.Apache.REEF.Wake</AssemblyName>
+    <Description>Wake is an event-driven framework</Description>
+    <PackageTags>wake event-driven</PackageTags>
+    <TargetFrameworks>net46;net451</TargetFrameworks>
+  </PropertyGroup>
+  <Import Project="..\build.DotNet.props" />
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml" />
+    <PackageReference Include="protobuf-net" Version="$(ProtobufVersion)" />
+    <PackageReference Include="EnterpriseLibrary.TransientFaultHandling.Core" Version="$(TransientFaultHandlingVersion)" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="$(RxVersion)" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Org.Apache.REEF.Tang\Org.Apache.Reef.Tang.DotNet.csproj" />
+    <ProjectReference Include="..\Org.Apache.REEF.Utilities\Org.Apache.Reef.Utilities.DotNet.csproj" />
+  </ItemGroup>
+</Project>
diff --git a/lang/cs/Org.Apache.REEF.Wake/Properties/AssemblyInfo.DotNet.cs b/lang/cs/Org.Apache.REEF.Wake/Properties/AssemblyInfo.DotNet.cs
new file mode 100644
index 0000000..6caaaa2
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Wake/Properties/AssemblyInfo.DotNet.cs
@@ -0,0 +1,20 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleToAttribute("Org.Apache.REEF.Wake.Tests")]
diff --git a/lang/cs/Org.Apache.REEF.Wake/Remote/IConnectionRetryHandler.cs b/lang/cs/Org.Apache.REEF.Wake/Remote/IConnectionRetryHandler.cs
index 4b89b83..80be721 100644
--- a/lang/cs/Org.Apache.REEF.Wake/Remote/IConnectionRetryHandler.cs
+++ b/lang/cs/Org.Apache.REEF.Wake/Remote/IConnectionRetryHandler.cs
@@ -15,7 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#if DOTNET_BUILD
+using Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling;
+#else
 using Microsoft.Practices.TransientFaultHandling;
+#endif
+
 using Org.Apache.REEF.Tang.Annotations;
 using Org.Apache.REEF.Wake.Remote.Impl;
 
diff --git a/lang/cs/Org.Apache.REEF.Wake/Remote/Impl/RemoteConnectionRetryHandler.cs b/lang/cs/Org.Apache.REEF.Wake/Remote/Impl/RemoteConnectionRetryHandler.cs
index aef68af..802e0d7 100644
--- a/lang/cs/Org.Apache.REEF.Wake/Remote/Impl/RemoteConnectionRetryHandler.cs
+++ b/lang/cs/Org.Apache.REEF.Wake/Remote/Impl/RemoteConnectionRetryHandler.cs
@@ -16,7 +16,11 @@
 // under the License.
 
 using System;
+#if DOTNET_BUILD
+using Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling;
+#else
 using Microsoft.Practices.TransientFaultHandling;
+#endif
 using Org.Apache.REEF.Tang.Annotations;
 using Org.Apache.REEF.Utilities.Logging;
 using Org.Apache.REEF.Wake.Remote.Parameters;
diff --git a/lang/cs/build.DotNet.props b/lang/cs/build.DotNet.props
index cd58b9c..9e623a5 100644
--- a/lang/cs/build.DotNet.props
+++ b/lang/cs/build.DotNet.props
@@ -34,13 +34,18 @@
   </PropertyGroup>
 
   <PropertyGroup>
+    <PlatformTarget>x64</PlatformTarget>
+    <DefineConstants>DOTNET_BUILD</DefineConstants>
     <OutputPath>..\bin\$(AssemblyName)</OutputPath>
     <AvroVersion>1.5.6</AvroVersion>
     <NewtonsoftJsonVersion>10.0.1</NewtonsoftJsonVersion>
+    <NSubstituteVersion>1.8.2.0</NSubstituteVersion>
     <ProtobufVersion>2.0.0.668</ProtobufVersion>
     <RxVersion>2.2.5</RxVersion>
     <StyleCopVersion>4.7.49.1</StyleCopVersion>
-    <NSubstituteVersion>1.8.2.0</NSubstituteVersion>
+    <TransientFaultHandlingVersion>1.0.0</TransientFaultHandlingVersion>
+    <RxVersion>3.0.0</RxVersion>
+    <NSubstituteVersion>2.0.3</NSubstituteVersion>
   </PropertyGroup>
 
 </Project>
diff --git a/lang/cs/nuget.config b/lang/cs/nuget.config
new file mode 100644
index 0000000..771b00e
--- /dev/null
+++ b/lang/cs/nuget.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+    <packageSources>
+        <add key="dotnet" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
+    </packageSources>
+</configuration>
diff --git a/lang/cs/xunit.DotNet.props b/lang/cs/xunit.DotNet.props
new file mode 100644
index 0000000..b866911
--- /dev/null
+++ b/lang/cs/xunit.DotNet.props
@@ -0,0 +1,29 @@
+<Project>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<ItemGroup>
+    <PackageReference Include="xunit" Version="2.2.0"/>
+    <PackageReference Include="xunit.abstractions" Version="2.0.1"/>
+    <PackageReference Include="xunit.assert" Version="2.2.0"/>
+    <PackageReference Include="xunit.core" Version="2.2.0"/>
+    <PackageReference Include="xunit.extensibility.core" Version="2.2.0"/>
+    <PackageReference Include="xunit.extensibility.execution" Version="2.2.0"/>
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0"/>
+</ItemGroup>
+
+</Project>
+