Bläddra i källkod

Introduce VS 2017 solution and MSBuild-based .NET Core project

* Introduced VS 2017 solution
* Use MSBuild-based project for .NET Core.
* Removed Renci.SshNet.NETCore project from VS 2015 solution (as only VS
2017 supports MSBuild-based project for .NET Core)
* Added build script since MSBuild v15.0 cannot be used to build the VS
2012 solution (pfffff).
Gert Driesen 8 år sedan
förälder
incheckning
6d8f545bb4

+ 12 - 0
build/build.cmd

@@ -0,0 +1,12 @@
+@echo off
+
+set MSBUILD14_EXE=%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe
+set MSBUILD15_EXE=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\\MSBuild\15.0\bin\MSBuild.exe
+
+call "%MSBUILD14_EXE%" build.proj /t:Clean
+call "%MSBUILD15_EXE%" build.proj /t:Clean
+
+call "%MSBUILD14_EXE%" build.proj /t:Build
+call "%MSBUILD15_EXE%" build.proj /t:Build
+
+call "%MSBUILD15_EXE%" build.proj /t:Package /p:ReleaseVersion=%1

+ 18 - 9
build/build.proj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Clean;CreateNuGetPackage;CreateBinPackage;GenerateHelpFile" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 	<UsingTask TaskName="Zip" AssemblyFile="$(MSBuildThisFileDirectory)target\nuget\packages\$(MSBuildTasksPackageId).$(MSBuildTasksPackageVersion)\tools\MSBuild.Community.Tasks.dll"/>
 	<PropertyGroup>
 		<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
@@ -11,9 +11,17 @@
 	<ItemGroup>
 		<VisualStudioVersion Include="2012">
 			<SolutionFile>$(MSBuildThisFileDirectory)..\src\Renci.SshNet.VS2012.sln</SolutionFile>
+			<MSBuildToolsVersion>14.0</MSBuildToolsVersion>
+			<NuGetPackageRestore>true</NuGetPackageRestore>
 		</VisualStudioVersion>
 		<VisualStudioVersion Include="2015">
 			<SolutionFile>$(MSBuildThisFileDirectory)..\src\Renci.SshNet.VS2015.sln</SolutionFile>
+			<MSBuildToolsVersion>14.0</MSBuildToolsVersion>
+			<NuGetPackageRestore>true</NuGetPackageRestore>
+		</VisualStudioVersion>
+		<VisualStudioVersion Include="2017">
+			<SolutionFile>$(MSBuildThisFileDirectory)..\src\Renci.SshNet.VS2017.sln</SolutionFile>
+			<MSBuildToolsVersion>15.0</MSBuildToolsVersion>
 		</VisualStudioVersion>
 	</ItemGroup>
 	<ItemGroup>
@@ -54,11 +62,11 @@
 		<RemoveDir Directories="$(MSBuildThisFileDirectory)target"/>
 		<ItemGroup>
 			<ProjectToBuild Remove="@(ProjectToBuild)"/>
-			<ProjectToBuild Include="%(VisualStudioVersion.SolutionFile)">
+			<ProjectToBuild Include="%(VisualStudioVersion.SolutionFile)" Condition="'%(VisualStudioVersion.MSBuildToolsVersion)'=='$(MSBuildToolsVersion)'">
 				<Properties>Configuration=Release</Properties>
 			</ProjectToBuild>
 		</ItemGroup>
-		<MSBuild Projects="@(ProjectToBuild)" Targets="Clean"/>
+		<MSBuild Projects="@(ProjectToBuild)" Targets="Clean" />
 	</Target>
 	<Target Name="DownloadNuGet">
 		<MakeDir Directories="$(MSBuildThisFileDirectory)target\nuget"/>
@@ -67,22 +75,23 @@
 			FileName="$(MSBuildThisFileDirectory)target\nuget\nuget.exe"/>
 	</Target>
 	<Target Name="RestoreNuGetPackages" DependsOnTargets="DownloadNuGet" Outputs="%(VisualStudioVersion.Identity)">
-		<Message Text="Restoring nuget packages for '%(VisualStudioVersion.SolutionFile)'..." Importance="High"/>
-		<Exec Command="$(NuGetExe) restore &quot;%(VisualStudioVersion.SolutionFile)&quot;"/>
+		<Message Text="Restoring nuget packages for '%(VisualStudioVersion.SolutionFile)'..." Importance="High" Condition="'%(VisualStudioVersion.MSBuildToolsVersion)'=='$(MSBuildToolsVersion)' and '%(VisualStudioVersion.NuGetPackageRestore)'=='true'"/>
+		<Exec Command="$(NuGetExe) restore &quot;%(VisualStudioVersion.SolutionFile)&quot;" Condition="'%(VisualStudioVersion.MSBuildToolsVersion)'=='$(MSBuildToolsVersion)' and '%(VisualStudioVersion.NuGetPackageRestore)'=='true'"/>
 	</Target>
 	<Target Name="Build" DependsOnTargets="RestoreNuGetPackages" Outputs="%(VisualStudioVersion.Identity)">
 		<ItemGroup>
 			<ProjectToBuild Remove="@(ProjectToBuild)"/>
-			<ProjectToBuild Include="%(VisualStudioVersion.SolutionFile)">
+			<ProjectToBuild Include="%(VisualStudioVersion.SolutionFile)" Condition="'%(VisualStudioVersion.MSBuildToolsVersion)'=='$(MSBuildToolsVersion)'">
 				<Properties>Configuration=Release</Properties>
 			</ProjectToBuild>
 		</ItemGroup>
 		<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>
 	</Target>
+	<Target Name="Package" DependsOnTargets="CreateNuGetPackage;CreateBinPackage;GenerateHelpFile"/>
 	<Target Name="CreateNuGetPackage" DependsOnTargets="CopyBuildOutputToPackage">
 		<Exec Command="$(NuGetExe) pack $(MSBuildThisFileDirectory)nuget\SSH.NET.nuspec -OutputDirectory &quot;$(MSBuildThisFileDirectory)target&quot; -BasePath &quot;$(MSBuildThisFileDirectory)target\package&quot; -NonInteractive"/>
 	</Target>
-	<Target Name="CopyBuildOutputToPackage" DependsOnTargets="Build" Outputs="%(TargetFramework.Identity)">
+	<Target Name="CopyBuildOutputToPackage" Outputs="%(TargetFramework.Identity)">
 		<ItemGroup>
 			<BuildOutput Remove="@(BuildOutput)"/>
 			<BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFramework.OutputDirectory)\Renci.SshNet.dll"/>
@@ -90,12 +99,12 @@
 		</ItemGroup>
 		<Copy SourceFiles="@(BuildOutput)" DestinationFolder="$(MSBuildThisFileDirectory)target\package\lib\%(TargetFramework.Moniker)"/>
 	</Target>
-	<Target Name="GenerateHelpFile" DependsOnTargets="Build;CheckReleaseVersion">
+	<Target Name="GenerateHelpFile" DependsOnTargets="CheckReleaseVersion">
 		<Error Text="Please install Sandcastle, and ensure the SHFBFolder environment variable is set." Condition="'$(SHFBFolder)'==''"/>
 		<MSBuild Projects="$(MSBuildThisFileDirectory)sandcastle\SSH.NET.shfbproj"/>
 		<Move SourceFiles="$(MSBuildThisFileDirectory)target\help\SshNet.Help.chm" DestinationFiles="$(MSBuildThisFileDirectory)target\SSH.NET-$(ReleaseVersion)-help.chm"/>
 	</Target>
-	<Target Name="CopyBuildOutputToBin" DependsOnTargets="Build" Outputs="%(TargetFramework.Identity)">
+	<Target Name="CopyBuildOutputToBin" Outputs="%(TargetFramework.Identity)">
 		<ItemGroup>
 			<BuildOutput Remove="@(BuildOutput)"/>
 			<BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFramework.OutputDirectory)\*.dll"/>

+ 117 - 0
src/Renci.SshNet.NETCore/Renci.SshNet.NETCore.csproj

@@ -0,0 +1,117 @@
+<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
+
+  <PropertyGroup>
+    <AssemblyTitle>SSH.NET</AssemblyTitle>
+    <TargetFramework>netstandard1.3</TargetFramework>
+    <WarningsAsErrors>true</WarningsAsErrors>
+    <GenerateDocumentationFile>true</GenerateDocumentationFile>
+    <AssemblyName>Renci.SshNet</AssemblyName>
+    <AssemblyOriginatorKeyFile>../Renci.SshNet.snk</AssemblyOriginatorKeyFile>
+    <SignAssembly>true</SignAssembly>
+    <PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
+    <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
+    <GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>
+    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
+    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
+    <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
+    <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
+    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
+    <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
+    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Include="**\*.cs" />
+    <Compile Include="..\Renci.SshNet\**\*.cs" Exclude="..\Renci.SshNet\Properties\AssemblyInfo.cs">
+      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
+    </Compile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="NETStandard.Library">
+      <Version>1.6.0</Version>
+    </PackageReference>
+  </ItemGroup>
+
+  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
+    <PackageReference Include="Microsoft.CSharp">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="SshNet.Security.Cryptography">
+      <Version>[1.2.0]</Version>
+    </PackageReference>
+    <PackageReference Include="System.Diagnostics.Debug">
+      <Version>4.0.11</Version>
+    </PackageReference>
+    <PackageReference Include="System.Diagnostics.Tools">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="System.Diagnostics.TraceSource">
+      <Version>4.0.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Globalization">
+      <Version>4.0.11</Version>
+    </PackageReference>
+    <PackageReference Include="System.IO">
+      <Version>4.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.IO.FileSystem">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="System.IO.FileSystem.Primitives">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="System.Linq">
+      <Version>4.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Net.NameResolution">
+      <Version>4.0.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Net.Sockets">
+      <Version>4.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Reflection.Extensions">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="System.Runtime.Extensions">
+      <Version>4.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Security.Cryptography.Algorithms">
+      <Version>4.2.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Text.RegularExpressions">
+      <Version>4.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Threading">
+      <Version>4.0.11</Version>
+    </PackageReference>
+    <PackageReference Include="System.Threading.Thread">
+      <Version>4.0.0</Version>
+    </PackageReference>
+    <PackageReference Include="System.Threading.ThreadPool">
+      <Version>4.0.10</Version>
+    </PackageReference>
+    <PackageReference Include="System.Threading.Timer">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="System.Xml.XmlDocument">
+      <Version>4.0.1</Version>
+    </PackageReference>
+    <PackageReference Include="System.Xml.XPath.XmlDocument">
+      <Version>4.0.1</Version>
+    </PackageReference>
+  </ItemGroup>
+
+  <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
+    <DefineConstants>$(DefineConstants);FEATURE_ENCODING_ASCII;FEATURE_DIAGNOSTICS_TRACESOURCE;FEATURE_DIRECTORYINFO_ENUMERATEFILES;FEATURE_MEMORYSTREAM_TRYGETBUFFER;FEATURE_REFLECTION_TYPEINFO;FEATURE_RNG_CREATE;FEATURE_SOCKET_TAP;FEATURE_SOCKET_EAP;FEATURE_SOCKET_SYNC;FEATURE_SOCKET_SETSOCKETOPTION;FEATURE_SOCKET_POLL;FEATURE_DNS_TAP;FEATURE_STREAM_TAP;FEATURE_THREAD_COUNTDOWNEVENT;FEATURE_THREAD_THREADPOOL;FEATURE_THREAD_SLEEP;FEATURE_HASH_MD5;FEATURE_HASH_SHA1_CREATE;FEATURE_HASH_SHA256_CREATE;FEATURE_HASH_SHA384_CREATE;FEATURE_HASH_SHA512_CREATE;FEATURE_HMAC_MD5;FEATURE_HMAC_SHA1;FEATURE_HMAC_SHA256;FEATURE_HMAC_SHA384;FEATURE_HMAC_SHA512</DefineConstants>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+    <DebugType>none</DebugType>
+  </PropertyGroup>
+
+</Project>

+ 0 - 19
src/Renci.SshNet.NETCore/Renci.SshNet.NETCore.xproj

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>8e8229eb-6780-4a8a-b470-e2023fa55ab5</ProjectGuid>
-    <RootNamespace>Renci.SshNet</RootNamespace>
-    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
-    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
-    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SchemaVersion>2.0</SchemaVersion>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
-</Project>

+ 0 - 90
src/Renci.SshNet.NETCore/project.json

@@ -1,90 +0,0 @@
-{
-  "title": "SSH.NET",
-  "configurations": {
-    "debug": {
-      "buildOptions": {
-        "debugType": "portable",
-        "define": [ "DEBUG", "TRACE" ]
-      }
-    },
-    "release": {
-      "buildOptions": {
-        "debugType": "none",
-        "define": [ "TRACE" ]
-      }
-    }
-  },
-  "buildOptions": {
-    "outputName": "Renci.SshNet",
-    "keyFile": "../Renci.SshNet.snk",
-    "compile": {
-      "include": [
-        "../Renci.SshNet/**/*.cs"
-      ],
-      "exclude": [
-        "../Renci.SshNet/Properties/AssemblyInfo.cs"
-      ]
-    },
-    "optimize": true,
-    "xmlDoc": true,
-    "warningsAsErrors": true
-  },
-  "frameworks": {
-    "netstandard1.3": {
-      "dependencies": {
-        "Microsoft.CSharp": "4.0.1",
-        "SshNet.Security.Cryptography": "[1.2.0]",
-        "System.Diagnostics.Debug": "4.0.11",
-        "System.Diagnostics.Tools": "4.0.1",
-        "System.Diagnostics.TraceSource": "4.0.0",
-        "System.Globalization": "4.0.11",
-        "System.IO": "4.1.0",
-        "System.IO.FileSystem": "4.0.1",
-        "System.IO.FileSystem.Primitives": "4.0.1",
-        "System.Linq": "4.1.0",
-        "System.Net.NameResolution": "4.0.0",
-        "System.Net.Sockets": "4.1.0",
-        "System.Reflection.Extensions": "4.0.1",
-        "System.Runtime.Extensions": "4.1.0",
-        "System.Security.Cryptography.Algorithms": "4.2.0",
-        "System.Text.RegularExpressions": "4.1.0",
-        "System.Threading": "4.0.11",
-        "System.Threading.Thread": "4.0.0",
-        "System.Threading.ThreadPool": "4.0.10",
-        "System.Threading.Timer": "4.0.1",
-        "System.Xml.XmlDocument": "4.0.1",
-        "System.Xml.XPath.XmlDocument": "4.0.1"
-      },
-      "buildOptions": {
-        "define": [
-          "FEATURE_ENCODING_ASCII",
-          "FEATURE_DIAGNOSTICS_TRACESOURCE",
-          "FEATURE_DIRECTORYINFO_ENUMERATEFILES",
-          "FEATURE_MEMORYSTREAM_TRYGETBUFFER",
-          "FEATURE_REFLECTION_TYPEINFO",
-          "FEATURE_RNG_CREATE",
-          "FEATURE_SOCKET_TAP",
-          "FEATURE_SOCKET_EAP",
-          "FEATURE_SOCKET_SYNC",
-          "FEATURE_SOCKET_SETSOCKETOPTION",
-          "FEATURE_SOCKET_POLL",
-          "FEATURE_DNS_TAP",
-          "FEATURE_STREAM_TAP",
-          "FEATURE_THREAD_COUNTDOWNEVENT",
-          "FEATURE_THREAD_THREADPOOL",
-          "FEATURE_THREAD_SLEEP",
-          "FEATURE_HASH_MD5",
-          "FEATURE_HASH_SHA1_CREATE",
-          "FEATURE_HASH_SHA256_CREATE",
-          "FEATURE_HASH_SHA384_CREATE",
-          "FEATURE_HASH_SHA512_CREATE",
-          "FEATURE_HMAC_MD5",
-          "FEATURE_HMAC_SHA1",
-          "FEATURE_HMAC_SHA256",
-          "FEATURE_HMAC_SHA384",
-          "FEATURE_HMAC_SHA512"
-        ]
-      }
-    }
-  }
-}

+ 1 - 23
src/Renci.SshNet.VS2015.sln

@@ -37,12 +37,10 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Renci.SshNet.Shared.Tests",
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Renci.SshNet.WindowsPhone8.Tests", "..\test\Renci.SshNet.WindowsPhone8.Tests\Renci.SshNet.WindowsPhone8.Tests.csproj", "{26F0D644-B3EF-47DF-8040-E9E4B2E63884}"
 EndProject
-Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Renci.SshNet.NETCore", "Renci.SshNet.NETCore\Renci.SshNet.NETCore.xproj", "{8E8229EB-6780-4A8A-B470-E2023FA55AB5}"
-EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
-		..\test\Renci.SshNet.Shared.Tests\Renci.SshNet.Shared.Tests.projitems*{fae3948f-a438-458e-8e0e-7f6e39a5dd8a}*SharedItemsImports = 13
 		..\test\Renci.SshNet.Shared.Tests\Renci.SshNet.Shared.Tests.projitems*{26f0d644-b3ef-47df-8040-e9e4b2e63884}*SharedItemsImports = 4
+		..\test\Renci.SshNet.Shared.Tests\Renci.SshNet.Shared.Tests.projitems*{fae3948f-a438-458e-8e0e-7f6e39a5dd8a}*SharedItemsImports = 13
 	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -183,26 +181,6 @@ Global
 		{26F0D644-B3EF-47DF-8040-E9E4B2E63884}.Release|x86.ActiveCfg = Release|x86
 		{26F0D644-B3EF-47DF-8040-E9E4B2E63884}.Release|x86.Build.0 = Release|x86
 		{26F0D644-B3EF-47DF-8040-E9E4B2E63884}.Release|x86.Deploy.0 = Release|x86
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|ARM.ActiveCfg = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|ARM.Build.0 = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x64.Build.0 = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x86.Build.0 = Debug|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|ARM.ActiveCfg = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|ARM.Build.0 = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x64.ActiveCfg = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x64.Build.0 = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x86.ActiveCfg = Release|Any CPU
-		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 117 - 0
src/Renci.SshNet.VS2017.sln

@@ -0,0 +1,117 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26014.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2D6CAE62-D053-476F-9BDD-2B1F27FA9C5D}"
+	ProjectSection(SolutionItems) = preProject
+		..\build\build.cmd = ..\build\build.cmd
+		..\build\build.proj = ..\build\build.proj
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nuget", "nuget", "{94EE3919-19FA-4D9B-8DA9-249050B15232}"
+	ProjectSection(SolutionItems) = preProject
+		..\build\nuget\SSH.NET.nuspec = ..\build\nuget\SSH.NET.nuspec
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sandcastle", "sandcastle", "{A6C3FFD3-16A5-44D3-8C1F-3613D6DD17D1}"
+	ProjectSection(SolutionItems) = preProject
+		..\build\sandcastle\SSH.NET.shfbproj = ..\build\sandcastle\SSH.NET.shfbproj
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Renci.SshNet", "Renci.SshNet\Renci.SshNet.csproj", "{2F5F8C90-0BD1-424F-997C-7BC6280919D1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Renci.SshNet.Tests", "Renci.SshNet.Tests\Renci.SshNet.Tests.csproj", "{C45379B9-17B1-4E89-BC2E-6D41726413E8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Renci.SshNet.NET35", "Renci.SshNet.NET35\Renci.SshNet.NET35.csproj", "{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Renci.SshNet.NETCore", "Renci.SshNet.NETCore\Renci.SshNet.NETCore.csproj", "{8E8229EB-6780-4A8A-B470-E2023FA55AB5}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|ARM = Debug|ARM
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|ARM = Release|ARM
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|ARM.ActiveCfg = Release|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|x64.ActiveCfg = Release|Any CPU
+		{2F5F8C90-0BD1-424F-997C-7BC6280919D1}.Release|x86.ActiveCfg = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|ARM.ActiveCfg = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|x64.ActiveCfg = Release|Any CPU
+		{C45379B9-17B1-4E89-BC2E-6D41726413E8}.Release|x86.ActiveCfg = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|ARM.ActiveCfg = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|ARM.ActiveCfg = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|x64.ActiveCfg = Release|Any CPU
+		{DD1C552F-7F48-4269-ABB3-2E4C89B7E43A}.Release|x86.ActiveCfg = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|ARM.Build.0 = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x64.Build.0 = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Debug|x86.Build.0 = Debug|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|ARM.ActiveCfg = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|ARM.Build.0 = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x64.ActiveCfg = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x64.Build.0 = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x86.ActiveCfg = Release|Any CPU
+		{8E8229EB-6780-4A8A-B470-E2023FA55AB5}.Release|x86.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{94EE3919-19FA-4D9B-8DA9-249050B15232} = {2D6CAE62-D053-476F-9BDD-2B1F27FA9C5D}
+		{A6C3FFD3-16A5-44D3-8C1F-3613D6DD17D1} = {2D6CAE62-D053-476F-9BDD-2B1F27FA9C5D}
+	EndGlobalSection
+	GlobalSection(TestCaseManagementSettings) = postSolution
+		CategoryFile = Renci.SshNet1.vsmdi
+	EndGlobalSection
+EndGlobal