Skip to content

Commit dfc91b8

Browse files
committed
C#: Simplify dotnet-install.ps1 invocation
Using the pattern from https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script.
1 parent 5446532 commit dfc91b8

File tree

2 files changed

+9
-46
lines changed

2 files changed

+9
-46
lines changed

csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -981,8 +981,7 @@ public void TestDotnetVersionWindows()
981981
{
982982
actions.RunProcess["cmd.exe /C dotnet --list-sdks"] = 0;
983983
actions.RunProcessOut["cmd.exe /C dotnet --list-sdks"] = "2.1.3 [C:\\Program Files\\dotnet\\sdks]\n2.1.4 [C:\\Program Files\\dotnet\\sdks]";
984-
actions.RunProcess[@"cmd.exe /C pwsh -NoProfile -ExecutionPolicy unrestricted -file C:\Project\install-dotnet.ps1 -Version 2.1.3 -InstallDir C:\Project\.dotnet"] = 0;
985-
actions.RunProcess[@"cmd.exe /C del C:\Project\install-dotnet.ps1"] = 0;
984+
actions.RunProcess[@"cmd.exe /C pwsh -NoProfile -ExecutionPolicy unrestricted -Command ""[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -Version 2.1.3 -InstallDir C:\Project\.dotnet"""] = 0;
986985
actions.RunProcess[@"cmd.exe /C C:\Project\.dotnet\dotnet --info"] = 0;
987986
actions.RunProcess[@"cmd.exe /C C:\Project\.dotnet\dotnet clean C:\Project\test.csproj"] = 0;
988987
actions.RunProcess[@"cmd.exe /C C:\Project\.dotnet\dotnet restore C:\Project\test.csproj"] = 0;
@@ -1005,17 +1004,16 @@ public void TestDotnetVersionWindows()
10051004
actions.LoadXml[@"C:\Project\test.csproj"] = xml;
10061005

10071006
var autobuilder = CreateAutoBuilder(true, dotnetVersion: "2.1.3");
1008-
TestAutobuilderScript(autobuilder, 0, 7);
1007+
TestAutobuilderScript(autobuilder, 0, 6);
10091008
}
10101009

10111010
[Fact]
10121011
public void TestDotnetVersionWindowsNoPwsh()
10131012
{
10141013
actions.RunProcess["cmd.exe /C dotnet --list-sdks"] = 0;
10151014
actions.RunProcessOut["cmd.exe /C dotnet --list-sdks"] = "2.1.3 [C:\\Program Files\\dotnet\\sdks]\n2.1.4 [C:\\Program Files\\dotnet\\sdks]";
1016-
actions.RunProcess[@"cmd.exe /C pwsh -NoProfile -ExecutionPolicy unrestricted -file C:\Project\install-dotnet.ps1 -Version 2.1.3 -InstallDir C:\Project\.dotnet"] = 1;
1017-
actions.RunProcess[@"cmd.exe /C powershell -NoProfile -ExecutionPolicy unrestricted -file C:\Project\install-dotnet.ps1 -Version 2.1.3 -InstallDir C:\Project\.dotnet"] = 0;
1018-
actions.RunProcess[@"cmd.exe /C del C:\Project\install-dotnet.ps1"] = 0;
1015+
actions.RunProcess[@"cmd.exe /C pwsh -NoProfile -ExecutionPolicy unrestricted -Command ""[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -Version 2.1.3 -InstallDir C:\Project\.dotnet"""] = 1;
1016+
actions.RunProcess[@"cmd.exe /C powershell -NoProfile -ExecutionPolicy unrestricted -Command ""[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -Version 2.1.3 -InstallDir C:\Project\.dotnet"""] = 0;
10191017
actions.RunProcess[@"cmd.exe /C C:\Project\.dotnet\dotnet --info"] = 0;
10201018
actions.RunProcess[@"cmd.exe /C C:\Project\.dotnet\dotnet clean C:\Project\test.csproj"] = 0;
10211019
actions.RunProcess[@"cmd.exe /C C:\Project\.dotnet\dotnet restore C:\Project\test.csproj"] = 0;
@@ -1038,7 +1036,7 @@ public void TestDotnetVersionWindowsNoPwsh()
10381036
actions.LoadXml[@"C:\Project\test.csproj"] = xml;
10391037

10401038
var autobuilder = CreateAutoBuilder(true, dotnetVersion: "2.1.3");
1041-
TestAutobuilderScript(autobuilder, 0, 8);
1039+
TestAutobuilderScript(autobuilder, 0, 7);
10421040
}
10431041

10441042
[Fact]

csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -179,55 +179,20 @@ private static BuildScript DownloadDotNetVersion(Autobuilder builder, string pat
179179

180180
if (builder.Actions.IsWindows())
181181
{
182-
var psScript = @"param([string]$Version, [string]$InstallDir)
183182

184-
add-type @""
185-
using System.Net;
186-
using System.Security.Cryptography.X509Certificates;
187-
public class TrustAllCertsPolicy : ICertificatePolicy
188-
{
189-
public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
190-
{
191-
return true;
192-
}
193-
}
194-
""@
195-
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
196-
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
197-
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
198-
$Script = Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'
199-
200-
$arguments = @{
201-
Channel = 'release'
202-
Version = $Version
203-
InstallDir = $InstallDir
204-
}
205-
206-
$ScriptBlock = [scriptblock]::create("".{$($Script)} $(&{$args} @arguments)"")
207-
208-
Invoke-Command -ScriptBlock $ScriptBlock";
209-
var psScriptFile = builder.Actions.PathCombine(builder.Options.RootDirectory, "install-dotnet.ps1");
210-
builder.Actions.WriteAllText(psScriptFile, psScript);
183+
var psCommand = $"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -Version {version} -InstallDir {path}";
211184

212185
BuildScript GetInstall(string pwsh) =>
213186
new CommandBuilder(builder.Actions).
214187
RunCommand(pwsh).
215188
Argument("-NoProfile").
216189
Argument("-ExecutionPolicy").
217190
Argument("unrestricted").
218-
Argument("-file").
219-
Argument(psScriptFile).
220-
Argument("-Version").
221-
Argument(version).
222-
Argument("-InstallDir").
223-
Argument(path).
191+
Argument("-Command").
192+
Argument("\"" + psCommand + "\"").
224193
Script;
225194

226-
var removeScript = new CommandBuilder(builder.Actions).
227-
RunCommand("del").
228-
Argument(psScriptFile);
229-
230-
return (GetInstall("pwsh") | GetInstall("powershell")) & BuildScript.Try(removeScript.Script);
195+
return GetInstall("pwsh") | GetInstall("powershell");
231196
}
232197
else
233198
{

0 commit comments

Comments
 (0)