build.proj 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  3. <UsingTask TaskName="Zip" AssemblyFile="$(MSBuildThisFileDirectory)target\nuget\packages\$(MSBuildTasksPackageId).$(MSBuildTasksPackageVersion)\tools\MSBuild.Community.Tasks.dll"/>
  4. <PropertyGroup>
  5. <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
  6. <BuildRoot>$(MSBuildThisFileDirectory)</BuildRoot>
  7. <NuGetExe>$(BuildRoot)target\nuget\nuget.exe</NuGetExe>
  8. <MSBuildTasksPackageId>MSBuildTasks</MSBuildTasksPackageId>
  9. <MSBuildTasksPackageVersion>1.5.0.214</MSBuildTasksPackageVersion>
  10. </PropertyGroup>
  11. <ItemGroup>
  12. <VisualStudioVersionClassic Include="2012">
  13. <SolutionFile>$(MSBuildThisFileDirectory)..\src\Renci.SshNet.VS2012.sln</SolutionFile>
  14. <ToolsVersion>14.0</ToolsVersion>
  15. <VisualStudioVersion>14.0</VisualStudioVersion>
  16. </VisualStudioVersionClassic>
  17. <VisualStudioVersionClassic Include="2015">
  18. <SolutionFile>$(MSBuildThisFileDirectory)..\src\Renci.SshNet.VS2015.sln</SolutionFile>
  19. <ToolsVersion>14.0</ToolsVersion>
  20. <VisualStudioVersion>14.0</VisualStudioVersion>
  21. </VisualStudioVersionClassic>
  22. </ItemGroup>
  23. <ItemGroup>
  24. <VisualStudioVersionModern Include="2019">
  25. <SolutionFile>$(MSBuildThisFileDirectory)..\src\Renci.SshNet.VS2019.sln</SolutionFile>
  26. <VisualStudioVersion>16.0</VisualStudioVersion>
  27. </VisualStudioVersionModern>
  28. </ItemGroup>
  29. <ItemGroup>
  30. <TargetFrameworkClassic Include="Windows Phone Silverlight 7.1">
  31. <OutputDirectory>Renci.SshNet.WindowsPhone\bin\$(Configuration)</OutputDirectory>
  32. <Moniker>wp71</Moniker>
  33. </TargetFrameworkClassic>
  34. <TargetFrameworkClassic Include="Windows Phone Silverlight 8.0">
  35. <OutputDirectory>Renci.SshNet.WindowsPhone8\bin\$(Configuration)</OutputDirectory>
  36. <Moniker>wp8</Moniker>
  37. </TargetFrameworkClassic>
  38. <TargetFrameworkClassic Include="Silverlight 4">
  39. <OutputDirectory>Renci.SshNet.Silverlight\bin\$(Configuration)</OutputDirectory>
  40. <Moniker>sl4</Moniker>
  41. </TargetFrameworkClassic>
  42. <TargetFrameworkClassic Include="Silverlight 5">
  43. <OutputDirectory>Renci.SshNet.Silverlight5\bin\$(Configuration)</OutputDirectory>
  44. <Moniker>sl5</Moniker>
  45. </TargetFrameworkClassic>
  46. <TargetFrameworkClassic Include="Universal Windows Platform 10">
  47. <OutputDirectory>Renci.SshNet.UAP10\bin\$(Configuration)</OutputDirectory>
  48. <Moniker>uap10</Moniker>
  49. </TargetFrameworkClassic>
  50. </ItemGroup>
  51. <ItemGroup>
  52. <TargetFrameworkModern Include=".NET Framework 3.5">
  53. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\net35</OutputDirectory>
  54. <Moniker>net35</Moniker>
  55. </TargetFrameworkModern>
  56. <TargetFrameworkModern Include=".NET Framework 4.0">
  57. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\net40</OutputDirectory>
  58. <Moniker>net40</Moniker>
  59. </TargetFrameworkModern>
  60. <TargetFrameworkModern Include=".NETStandard 1.3">
  61. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\netstandard1.3</OutputDirectory>
  62. <Moniker>netstandard1.3</Moniker>
  63. </TargetFrameworkModern>
  64. <TargetFrameworkModern Include=".NETStandard 2.0">
  65. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\netstandard2.0</OutputDirectory>
  66. <Moniker>netstandard2.0</Moniker>
  67. </TargetFrameworkModern>
  68. </ItemGroup>
  69. <Target Name="CleanClassic" DependsOnTargets="CleanSolutionClassic">
  70. <RemoveDir Directories="$(MSBuildThisFileDirectory)target"/>
  71. </Target>
  72. <Target Name="CleanModern" DependsOnTargets="CleanSolutionModern">
  73. <RemoveDir Directories="$(MSBuildThisFileDirectory)target"/>
  74. </Target>
  75. <Target Name="CleanSolutionClassic" Outputs="%(VisualStudioVersionClassic.Identity)">
  76. <ItemGroup>
  77. <ProjectToBuild Remove="@(ProjectToBuild)"/>
  78. <ProjectToBuild Include="%(VisualStudioVersionClassic.SolutionFile)">
  79. <Properties>Configuration=Release;VisualStudioVersion=%(VisualStudioVersionClassic.VisualStudioVersion)</Properties>
  80. </ProjectToBuild>
  81. </ItemGroup>
  82. <MSBuild Projects="@(ProjectToBuild)" ToolsVersion="%(VisualStudioVersionClassic.ToolsVersion)" Targets="Clean"/>
  83. </Target>
  84. <Target Name="CleanSolutionModern" Outputs="%(VisualStudioVersionModern.Identity)">
  85. <ItemGroup>
  86. <ProjectToBuild Remove="@(ProjectToBuild)"/>
  87. <ProjectToBuild Include="%(VisualStudioVersionModern.SolutionFile)">
  88. <Properties>Configuration=Release;VisualStudioVersion=%(VisualStudioVersionModern.VisualStudioVersion)</Properties>
  89. </ProjectToBuild>
  90. </ItemGroup>
  91. <MSBuild Projects="@(ProjectToBuild)" Targets="Clean"/>
  92. </Target>
  93. <Target Name="RestoreNuGetPackagesClassic" DependsOnTargets="DownloadNuGet" Outputs="%(VisualStudioVersionClassic.Identity)">
  94. <Message Text="Restoring nuget packages for '%(VisualStudioVersionClassic.SolutionFile)'..." Importance="High"/>
  95. <Exec Command="$(NuGetExe) restore &quot;%(VisualStudioVersionClassic.SolutionFile)&quot;"/>
  96. </Target>
  97. <Target Name="RestoreNuGetPackagesModern" DependsOnTargets="DownloadNuGet" Outputs="%(VisualStudioVersionModern.Identity)">
  98. <Message Text="Restoring nuget packages for '%(VisualStudioVersionModern.SolutionFile)'..." Importance="High"/>
  99. <Exec Command="$(NuGetExe) restore &quot;%(VisualStudioVersionModern.SolutionFile)&quot;"/>
  100. </Target>
  101. <Target Name="BuildClassic" DependsOnTargets="RestoreNuGetPackagesClassic" Outputs="%(VisualStudioVersionClassic.Identity)">
  102. <ItemGroup>
  103. <ProjectToBuild Remove="@(ProjectToBuild)"/>
  104. <ProjectToBuild Include="%(VisualStudioVersionClassic.SolutionFile)">
  105. <Properties>Configuration=Release;VisualStudioVersion=%(VisualStudioVersionClassic.VisualStudioVersion)</Properties>
  106. </ProjectToBuild>
  107. </ItemGroup>
  108. <MSBuild Projects="@(ProjectToBuild)" ToolsVersion="%(VisualStudioVersionClassic.ToolsVersion)" Targets="Rebuild"/>
  109. </Target>
  110. <Target Name="BuildModern" DependsOnTargets="RestoreNuGetPackagesModern" Outputs="%(VisualStudioVersionModern.Identity)">
  111. <ItemGroup>
  112. <ProjectToBuild Remove="@(ProjectToBuild)"/>
  113. <ProjectToBuild Include="%(VisualStudioVersionModern.SolutionFile)">
  114. <Properties>Configuration=Release;VisualStudioVersion=%(VisualStudioVersionModern.VisualStudioVersion)</Properties>
  115. </ProjectToBuild>
  116. </ItemGroup>
  117. <MSBuild Projects="@(ProjectToBuild)" ToolsVersion="%(VisualStudioVersionModern.ToolsVersion)" Targets="Rebuild"/>
  118. </Target>
  119. <Target Name="Package" DependsOnTargets="CreateNuGetPackage;CreateBinPackage;GenerateHelpFile"/>
  120. <Target Name="ValidatePackage" DependsOnTargets="ValidatePackageClassic;ValidatePackageModern"/>
  121. <Target Name="ValidatePackageClassic" DependsOnTargets="CheckNuGetPackageDirectory" Outputs="%(TargetFrameworkClassic.Identity)">
  122. <Error Text="The 'Renci.SshNet.dll' file is not available for %(TargetFrameworkClassic.Identity) in $(NuGetPackageDirectory)\lib\%(TargetFrameworkClassic.Moniker)." Condition="!Exists('$(NuGetPackageDirectory)\lib\%(TargetFrameworkClassic.Moniker)\Renci.SshNet.dll')"/>
  123. <Error Text="The 'Renci.SshNet.xml' file is not available for %(TargetFrameworkClassic.Identity) in $(NuGetPackageDirectory)\lib\%(TargetFrameworkClassic.Moniker)." Condition="!Exists('$(NuGetPackageDirectory)\lib\%(TargetFrameworkClassic.Moniker)\Renci.SshNet.xml')"/>
  124. </Target>
  125. <Target Name="ValidatePackageModern" DependsOnTargets="CheckNuGetPackageDirectory" Outputs="%(TargetFrameworkModern.Identity)">
  126. <Error Text="The 'Renci.SshNet.dll' file is not available for %(TargetFrameworkModern.Identity) in $(NuGetPackageDirectory)\lib\%(TargetFrameworkModern.Moniker)." Condition="!Exists('$(NuGetPackageDirectory)\lib\%(TargetFrameworkModern.Moniker)\Renci.SshNet.dll')"/>
  127. <Error Text="The 'Renci.SshNet.xml' file is not available for %(TargetFrameworkModern.Identity) in $(NuGetPackageDirectory)\lib\%(TargetFrameworkModern.Moniker)." Condition="!Exists('$(NuGetPackageDirectory)\lib\%(TargetFrameworkModern.Moniker)\Renci.SshNet.xml')"/>
  128. </Target>
  129. <Target Name="CreateNuGetPackage" DependsOnTargets="ValidatePackage;CheckNuGetPackageDirectory;CheckReleaseVersion">
  130. <Exec Command="$(NuGetExe) pack $(MSBuildThisFileDirectory)nuget\SSH.NET.nuspec -OutputDirectory &quot;$(MSBuildThisFileDirectory)target&quot; -Version &quot;$(ReleaseVersion)&quot; -Properties &quot;copyright=2012-$([System.DateTime]::Now.Year), RENCI&quot; -BasePath &quot;$(NuGetPackageDirectory)&quot; -NonInteractive"/>
  131. </Target>
  132. <Target Name="GenerateHelpFile" DependsOnTargets="CheckReleaseVersion">
  133. <Error Text="Please install Sandcastle, and ensure the SHFBROOT environment variable is set." Condition="'$(SHFBROOT)'==''"/>
  134. <MSBuild Projects="$(MSBuildThisFileDirectory)sandcastle\SSH.NET.shfbproj"/>
  135. <Move SourceFiles="$(MSBuildThisFileDirectory)target\help\SshNet.Help.chm" DestinationFiles="$(MSBuildThisFileDirectory)target\SSH.NET-$(ReleaseVersion)-help.chm"/>
  136. </Target>
  137. <Target Name="PreparePackageClassic" DependsOnTargets="BuildClassic;CheckNuGetPackageDirectory;CheckBinaryZipPackageDirectory" Outputs="%(TargetFrameworkClassic.Identity)">
  138. <ItemGroup>
  139. <BuildOutput Remove="@(BuildOutput)"/>
  140. <BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFrameworkClassic.OutputDirectory)\Renci.SshNet.dll"/>
  141. <BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFrameworkClassic.OutputDirectory)\Renci.SshNet.xml"/>
  142. </ItemGroup>
  143. <Copy SourceFiles="@(BuildOutput)" DestinationFolder="$(NuGetPackageDirectory)\lib\%(TargetFrameworkClassic.Moniker)"/>
  144. <Copy SourceFiles="@(BuildOutput)" DestinationFolder="$(BinPackageDirectory)\lib\%(TargetFrameworkClassic.Moniker)"/>
  145. </Target>
  146. <Target Name="PreparePackageModern" DependsOnTargets="BuildModern;CheckNuGetPackageDirectory" Outputs="%(TargetFrameworkModern.Identity)">
  147. <ItemGroup>
  148. <BuildOutput Remove="@(BuildOutput)"/>
  149. <BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFrameworkModern.OutputDirectory)\Renci.SshNet.dll"/>
  150. <BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFrameworkModern.OutputDirectory)\Renci.SshNet.xml"/>
  151. </ItemGroup>
  152. <Copy SourceFiles="@(BuildOutput)" DestinationFolder="$(NuGetPackageDirectory)\lib\%(TargetFrameworkModern.Moniker)"/>
  153. </Target>
  154. <Target Name="CreateBinPackage" DependsOnTargets="PrepareMSBuildTasksPackage;ValidatePackage;CheckReleaseVersion;CheckBinaryZipPackageDirectory">
  155. <ItemGroup>
  156. <Files Remove="@(Files)"/>
  157. <Files Include="$(NuGetPackageDirectory)\lib\**\*.*"/>
  158. <Files Include="$(MSBuildThisFileDirectory)..\LICENSE"/>
  159. <Files Include="$(MSBuildThisFileDirectory)..\THIRD-PARTY-NOTICES.TXT"/>
  160. </ItemGroup>
  161. <Copy SourceFiles="@(Files)" DestinationFolder="$(BinaryZipPackageDirectory)\%(RecursiveDir)"/>
  162. <ItemGroup>
  163. <Files Remove="@(Files)"/>
  164. <Files Include="$(BinaryZipPackageDirectory)\**"/>
  165. </ItemGroup>
  166. <Zip ZipFileName="$(MSBuildThisFileDirectory)target\SSH.NET-$(ReleaseVersion)-bin.zip" Files="@(Files)" WorkingDirectory="$(BinaryZipPackageDirectory)"/>
  167. </Target>
  168. <Target Name="DownloadNuGet">
  169. <MakeDir Directories="$(MSBuildThisFileDirectory)target\nuget"/>
  170. <DownloadFile
  171. Address="https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
  172. FileName="$(MSBuildThisFileDirectory)target\nuget\nuget.exe"/>
  173. </Target>
  174. <Target Name="PrepareMSBuildTasksPackage" DependsOnTargets="DownloadNuGet">
  175. <Exec Command="$(NuGetExe) install $(MSBuildTasksPackageId) -Version $(MSBuildTasksPackageVersion) -OutputDirectory &quot;$(MSBuildThisFileDirectory)target\nuget\packages&quot; -Verbosity quiet"/>
  176. </Target>
  177. <Target Name="CheckReleaseVersion" Condition="'$(ReleaseVersion)'==''">
  178. <Error Text= "Please specify the version number of the release (using the &quot;ReleaseVersion&quot; property)."/>
  179. </Target>
  180. <Target Name="CheckNuGetPackageDirectory" DependsOnTargets="CheckReleaseVersion">
  181. <PropertyGroup>
  182. <NuGetPackageDirectory>$(MSBuildThisFileDirectory)target\nuget-$(ReleaseVersion)</NuGetPackageDirectory>
  183. </PropertyGroup>
  184. </Target>
  185. <Target Name="CheckBinaryZipPackageDirectory" DependsOnTargets="CheckReleaseVersion">
  186. <PropertyGroup>
  187. <BinaryZipPackageDirectory>$(MSBuildThisFileDirectory)target\bin-$(ReleaseVersion)</BinaryZipPackageDirectory>
  188. </PropertyGroup>
  189. </Target>
  190. <UsingTask TaskName="DownloadFile" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  191. <ParameterGroup>
  192. <Address ParameterType="System.String" Required="true"/>
  193. <FileName ParameterType="System.String" Required="true" />
  194. </ParameterGroup>
  195. <Task>
  196. <Reference Include="System" />
  197. <Code Type="Fragment" Language="cs">
  198. <![CDATA[
  199. new System.Net.WebClient().DownloadFile(Address, FileName);
  200. ]]>
  201. </Code>
  202. </Task>
  203. </UsingTask>
  204. </Project>