build.proj 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. <VisualStudioVersionModern Include="2022">
  13. <SolutionFile>$(MSBuildThisFileDirectory)..\Renci.SshNet.sln</SolutionFile>
  14. <VisualStudioVersion>17.0</VisualStudioVersion>
  15. </VisualStudioVersionModern>
  16. </ItemGroup>
  17. <ItemGroup>
  18. <TargetFrameworkModern Include=".NET Framework 4.6.2">
  19. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\net462</OutputDirectory>
  20. <Moniker>net462</Moniker>
  21. </TargetFrameworkModern>
  22. <TargetFrameworkModern Include=".NETStandard 2.0">
  23. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\netstandard2.0</OutputDirectory>
  24. <Moniker>netstandard2.0</Moniker>
  25. </TargetFrameworkModern>
  26. <TargetFrameworkModern Include=".NETStandard 2.1">
  27. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\netstandard2.1</OutputDirectory>
  28. <Moniker>netstandard2.1</Moniker>
  29. </TargetFrameworkModern>
  30. <TargetFrameworkModern Include=".NET 6.0">
  31. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\net6.0</OutputDirectory>
  32. <Moniker>net6.0</Moniker>
  33. </TargetFrameworkModern>
  34. <TargetFrameworkModern Include=".NET 7.0">
  35. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\net7.0</OutputDirectory>
  36. <Moniker>net7.0</Moniker>
  37. </TargetFrameworkModern>
  38. <TargetFrameworkModern Include=".NET 8.0">
  39. <OutputDirectory>Renci.SshNet\bin\$(Configuration)\net8.0</OutputDirectory>
  40. <Moniker>net8.0</Moniker>
  41. </TargetFrameworkModern>
  42. </ItemGroup>
  43. <Target Name="CleanModern" DependsOnTargets="CleanSolutionModern">
  44. <RemoveDir Directories="$(MSBuildThisFileDirectory)target"/>
  45. </Target>
  46. <Target Name="CleanSolutionModern" Outputs="%(VisualStudioVersionModern.Identity)">
  47. <ItemGroup>
  48. <ProjectToBuild Remove="@(ProjectToBuild)"/>
  49. <ProjectToBuild Include="%(VisualStudioVersionModern.SolutionFile)">
  50. <Properties>Configuration=Release;VisualStudioVersion=%(VisualStudioVersionModern.VisualStudioVersion)</Properties>
  51. </ProjectToBuild>
  52. </ItemGroup>
  53. <MSBuild Projects="@(ProjectToBuild)" Targets="Clean"/>
  54. </Target>
  55. <Target Name="RestoreNuGetPackagesModern" DependsOnTargets="DownloadNuGet" Outputs="%(VisualStudioVersionModern.Identity)">
  56. <Message Text="Restoring nuget packages for '%(VisualStudioVersionModern.SolutionFile)'..." Importance="High"/>
  57. <Exec Command="$(NuGetExe) restore &quot;%(VisualStudioVersionModern.SolutionFile)&quot;"/>
  58. </Target>
  59. <Target Name="BuildModern" DependsOnTargets="RestoreNuGetPackagesModern" Outputs="%(VisualStudioVersionModern.Identity)">
  60. <ItemGroup>
  61. <ProjectToBuild Remove="@(ProjectToBuild)"/>
  62. <ProjectToBuild Include="%(VisualStudioVersionModern.SolutionFile)">
  63. <Properties>Configuration=Release;VisualStudioVersion=%(VisualStudioVersionModern.VisualStudioVersion)</Properties>
  64. </ProjectToBuild>
  65. </ItemGroup>
  66. <MSBuild Projects="@(ProjectToBuild)" ToolsVersion="%(VisualStudioVersionModern.ToolsVersion)" Targets="Rebuild"/>
  67. </Target>
  68. <Target Name="Package" DependsOnTargets="CreateNuGetPackage;CreateBinPackage;GenerateHelpFile"/>
  69. <Target Name="ValidatePackage" DependsOnTargets="ValidatePackageModern"/>
  70. <Target Name="ValidatePackageModern" DependsOnTargets="CheckNuGetPackageDirectory" Outputs="%(TargetFrameworkModern.Identity)">
  71. <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')"/>
  72. <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')"/>
  73. </Target>
  74. <Target Name="CreateNuGetPackage" DependsOnTargets="ValidatePackage;CheckNuGetPackageDirectory;CheckReleaseVersion">
  75. <Exec Command="dotnet pack $(MSBuildThisFileDirectory)..\src\Renci.SshNet\Renci.SshNet.csproj --no-build --output &quot;$(MSBuildThisFileDirectory)target&quot;"/>
  76. </Target>
  77. <Target Name="GenerateHelpFile" DependsOnTargets="CheckReleaseVersion">
  78. <Error Text="Please install Sandcastle, and ensure the SHFBROOT environment variable is set." Condition="'$(SHFBROOT)'==''"/>
  79. <MSBuild Projects="$(MSBuildThisFileDirectory)sandcastle\SSH.NET.shfbproj"/>
  80. <Move SourceFiles="$(MSBuildThisFileDirectory)target\help\SshNet.Help.chm" DestinationFiles="$(MSBuildThisFileDirectory)target\SSH.NET-$(ReleaseVersion)-help.chm"/>
  81. </Target>
  82. <Target Name="PreparePackageModern" DependsOnTargets="BuildModern;CheckNuGetPackageDirectory" Outputs="%(TargetFrameworkModern.Identity)">
  83. <ItemGroup>
  84. <BuildOutput Remove="@(BuildOutput)"/>
  85. <BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFrameworkModern.OutputDirectory)\Renci.SshNet.dll"/>
  86. <BuildOutput Include="$(MSBuildThisFileDirectory)..\src\%(TargetFrameworkModern.OutputDirectory)\Renci.SshNet.xml"/>
  87. </ItemGroup>
  88. <Copy SourceFiles="@(BuildOutput)" DestinationFolder="$(NuGetPackageDirectory)\lib\%(TargetFrameworkModern.Moniker)"/>
  89. </Target>
  90. <Target Name="CreateBinPackage" DependsOnTargets="PrepareMSBuildTasksPackage;ValidatePackage;CheckReleaseVersion;CheckBinaryZipPackageDirectory">
  91. <ItemGroup>
  92. <Files Remove="@(Files)"/>
  93. <Files Include="$(NuGetPackageDirectory)\lib\**\*.*"/>
  94. <Files Include="$(MSBuildThisFileDirectory)..\LICENSE"/>
  95. <Files Include="$(MSBuildThisFileDirectory)..\THIRD-PARTY-NOTICES.TXT"/>
  96. </ItemGroup>
  97. <Copy SourceFiles="@(Files)" DestinationFolder="$(BinaryZipPackageDirectory)\%(RecursiveDir)"/>
  98. <ItemGroup>
  99. <Files Remove="@(Files)"/>
  100. <Files Include="$(BinaryZipPackageDirectory)\**"/>
  101. </ItemGroup>
  102. <Zip ZipFileName="$(MSBuildThisFileDirectory)target\SSH.NET-$(ReleaseVersion)-bin.zip" Files="@(Files)" WorkingDirectory="$(BinaryZipPackageDirectory)"/>
  103. </Target>
  104. <Target Name="DownloadNuGet">
  105. <MakeDir Directories="$(MSBuildThisFileDirectory)target\nuget"/>
  106. <DownloadFile
  107. Address="https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
  108. FileName="$(MSBuildThisFileDirectory)target\nuget\nuget.exe"/>
  109. </Target>
  110. <Target Name="PrepareMSBuildTasksPackage" DependsOnTargets="DownloadNuGet">
  111. <Exec Command="$(NuGetExe) install $(MSBuildTasksPackageId) -Version $(MSBuildTasksPackageVersion) -OutputDirectory &quot;$(MSBuildThisFileDirectory)target\nuget\packages&quot; -Verbosity quiet"/>
  112. </Target>
  113. <Target Name="CheckReleaseVersion" Condition="'$(ReleaseVersion)'==''">
  114. <Error Text= "Please specify the version number of the release (using the &quot;ReleaseVersion&quot; property)."/>
  115. </Target>
  116. <Target Name="CheckNuGetPackageDirectory" DependsOnTargets="CheckReleaseVersion">
  117. <PropertyGroup>
  118. <NuGetPackageDirectory>$(MSBuildThisFileDirectory)target\nuget-$(ReleaseVersion)</NuGetPackageDirectory>
  119. </PropertyGroup>
  120. </Target>
  121. <Target Name="CheckBinaryZipPackageDirectory" DependsOnTargets="CheckReleaseVersion">
  122. <PropertyGroup>
  123. <BinaryZipPackageDirectory>$(MSBuildThisFileDirectory)target\bin-$(ReleaseVersion)</BinaryZipPackageDirectory>
  124. </PropertyGroup>
  125. </Target>
  126. <UsingTask TaskName="DownloadFile" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  127. <ParameterGroup>
  128. <Address ParameterType="System.String" Required="true"/>
  129. <FileName ParameterType="System.String" Required="true" />
  130. </ParameterGroup>
  131. <Task>
  132. <Reference Include="System" />
  133. <Code Type="Fragment" Language="cs">
  134. <![CDATA[
  135. // Workaround 'Could not create SSL/TLS secure channel' issue due to TLS 1.1 being
  136. // the default on earlier versions of .NET
  137. System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
  138. // Download file
  139. new System.Net.WebClient().DownloadFile(Address, FileName);
  140. ]]>
  141. </Code>
  142. </Task>
  143. </UsingTask>
  144. </Project>