238 строки
5.7 KiB
PowerShell
238 строки
5.7 KiB
PowerShell
# reference to System.*
|
|
$SysDirectory = [System.IO.Directory]
|
|
$SysPath = [System.IO.Path]
|
|
$SysFile = [System.IO.File]
|
|
|
|
# Default to Debug
|
|
$Configuration = 'Debug'
|
|
|
|
# Color
|
|
$Success = 'Green'
|
|
$Warning = 'Yellow'
|
|
$Err = 'Red'
|
|
|
|
if ($args.Count -eq 0)
|
|
{
|
|
$TestType = 'All'
|
|
$Configuration = 'Release'
|
|
}
|
|
elseif ($args[0] -match 'DisableSkipStrongName')
|
|
{
|
|
$TestType = "DisableSkipStrongName"
|
|
}
|
|
elseif ($args[0] -match 'EnableSkipStrongName')
|
|
{
|
|
$TestType = "EnableSkipStrongName"
|
|
}
|
|
elseif ($args[0] -match 'SkipStrongName')
|
|
{
|
|
# SkipStrongName is a legacy options.
|
|
$TestType = "EnableSkipStrongName"
|
|
}
|
|
else
|
|
{
|
|
Write-Host 'Please choose Test or StrongName!' -ForegroundColor $Err
|
|
exit
|
|
}
|
|
|
|
$PROGRAMFILESX86 = [Environment]::GetFolderPath("ProgramFilesX86")
|
|
$env:ENLISTMENT_ROOT = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
$ENLISTMENT_ROOT = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
|
|
|
|
|
|
# Figure out the directory and path for SN.exe
|
|
$SN = $null
|
|
$SNx64 = $null
|
|
$SNVersions = @()
|
|
ForEach ($directory in $SysDirectory::EnumerateDirectories($PROGRAMFILESX86 + "\Microsoft SDKs\Windows", "*A"))
|
|
{
|
|
# remove the first char 'v'
|
|
$directoryName = $SysPath::GetFileName($directory).substring(1)
|
|
|
|
# remove the last char 'A'
|
|
$directoryName = $directoryName.substring(0, $directoryName.LastIndexOf('A'))
|
|
|
|
# parse to double "10.0"
|
|
$versionNo = [System.Double]::Parse($directoryName)
|
|
|
|
$fileobject = $null
|
|
$fileobject = New-Object System.Object
|
|
$fileobject | Add-Member -type NoteProperty -Name version -Value $versionNo
|
|
$fileobject | Add-Member -type NoteProperty -Name directory -Value $directory
|
|
|
|
$SNVersions += $fileobject
|
|
}
|
|
|
|
# using the latest version
|
|
$SNVersions = $SNVersions | Sort-Object -Property version -Descending
|
|
|
|
ForEach ($ver in $SNVersions)
|
|
{
|
|
# only care about the folder has "bin" subfolder
|
|
$snBinDirectory = $ver.directory + "\bin"
|
|
if(!$SysDirectory::Exists($snBinDirectory))
|
|
{
|
|
continue
|
|
}
|
|
|
|
if($SysFile::Exists($snBinDirectory + "\sn.exe") -and $SysFile::Exists($snBinDirectory + "\x64\sn.exe"))
|
|
{
|
|
$SN = $snBinDirectory + "\sn.exe"
|
|
$SNx64 = $snBinDirectory + "\x64\sn.exe"
|
|
break
|
|
}
|
|
else
|
|
{
|
|
ForEach ($netFxDirectory in $SysDirectory::EnumerateDirectories($snBinDirectory, "NETFX * Tools") | Sort -Descending)
|
|
{
|
|
# currently, sorting descending for the NETFX version looks good.
|
|
if($SysFile::Exists($netFxDirectory + "\sn.exe") -and $SysFile::Exists($netFxDirectory + "\x64\sn.exe"))
|
|
{
|
|
$SN = $netFxDirectory + "\sn.exe"
|
|
$SNx64 = $netFxDirectory + "\x64\sn.exe"
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($SN -ne $null -and $SNx64 -ne $null)
|
|
{
|
|
break
|
|
}
|
|
}
|
|
|
|
# Other variables
|
|
$ProductProj = $ENLISTMENT_ROOT + "\src\Microsoft.OpenAPI.OData.Reader\Microsoft.OpenApi.OData.Reader.csproj"
|
|
$TESTProj = $ENLISTMENT_ROOT + "\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenApi.OData.Reader.Tests.csproj"
|
|
|
|
$TESTDIR = $ENLISTMENT_ROOT + "\bin\$Configuration\Test\net472"
|
|
$PRODUCTDIR = $ENLISTMENT_ROOT + "\bin\$Configuration\net472"
|
|
|
|
$ProductDlls = "Microsoft.OpenApi.OData.Reader.dll"
|
|
$XUnitTestDlls = "Microsoft.OpenApi.OData.Reader.Tests.dll"
|
|
|
|
Function GetDlls
|
|
{
|
|
$dlls = @()
|
|
|
|
ForEach($dll in $ProductDlls)
|
|
{
|
|
$dlls += $PRODUCTDIR + "\" + $dll
|
|
}
|
|
|
|
ForEach($dll in $XUnitTestDlls)
|
|
{
|
|
$dlls += $TESTDIR + "\" + $dll
|
|
}
|
|
|
|
return $dlls
|
|
}
|
|
|
|
Function SkipStrongName
|
|
{
|
|
Write-Host 'Skip strong name validations for Microsoft.OpenApi.OData assemblies...'
|
|
|
|
$dlls = GetDlls
|
|
ForEach ($dll in $dlls)
|
|
{
|
|
& $SN /Vr $dll
|
|
}
|
|
|
|
ForEach ($dll in $dlls)
|
|
{
|
|
& $SNx64 /Vr $dll
|
|
}
|
|
|
|
Write-Host "SkipStrongName Done" -ForegroundColor $Success
|
|
}
|
|
|
|
Function DisableSkipStrongName
|
|
{
|
|
$SnLog = $LOGDIR + "\DisableSkipStrongName.log"
|
|
Out-File $SnLog
|
|
|
|
Write-Host 'Disable skip strong name validations for Microsoft.OpenApi.OData assemblies...'
|
|
|
|
$dlls = GetDlls
|
|
ForEach ($dll in $dlls)
|
|
{
|
|
& $SN /Vu $dll | Out-File $SnLog -Append
|
|
}
|
|
|
|
ForEach ($dll in $dlls)
|
|
{
|
|
& $SNx64 /Vu $dll | Out-File $SnLog -Append
|
|
}
|
|
|
|
Write-Host "DisableSkipStrongName Done" -ForegroundColor $Success
|
|
}
|
|
|
|
Function Cleanup
|
|
{
|
|
#TODO: Add some clean tasks
|
|
Write-Host "Clean Done" -ForegroundColor $Success
|
|
}
|
|
|
|
Function CleanBeforeScorch
|
|
{
|
|
#TODO: Add some clean tasks
|
|
Write-Host "Clean Done" -ForegroundColor $Success
|
|
}
|
|
|
|
Function BuildProcess
|
|
{
|
|
Write-Host '**********Start To Build The Project*********'
|
|
|
|
$script:BUILD_START_TIME = Get-Date
|
|
|
|
Write-Host "Build Product ..."
|
|
|
|
& dotnet.exe build $ProductProj -c $Configuration
|
|
|
|
Write-Host "Build Test ..."
|
|
|
|
& dotnet.exe build $TESTProj -c $Configuration
|
|
|
|
Write-Host "Build Done" -ForegroundColor $Success
|
|
$script:BUILD_END_TIME = Get-Date
|
|
}
|
|
|
|
Function TestProcess
|
|
{
|
|
Write-Host '**********Start To Run The Test*********'
|
|
|
|
$script:TEST_START_TIME = Get-Date
|
|
|
|
& dotnet test $TESTProj -c $Configuration
|
|
|
|
Write-Host "Test Done" -ForegroundColor $Success
|
|
$script:TEST_END_TIME = Get-Date
|
|
}
|
|
|
|
# Main Process
|
|
if ($TestType -eq 'EnableSkipStrongName')
|
|
{
|
|
CleanBeforeScorch
|
|
BuildProcess
|
|
SkipStrongName
|
|
Exit
|
|
}
|
|
elseif ($TestType -eq 'DisableSkipStrongName')
|
|
{
|
|
CleanBeforeScorch
|
|
BuildProcess
|
|
DisableSkipStrongName
|
|
Exit
|
|
}
|
|
|
|
CleanBeforeScorch
|
|
BuildProcess
|
|
SkipStrongName
|
|
TestProcess
|
|
Cleanup
|
|
|
|
$buildTime = New-TimeSpan $script:BUILD_START_TIME -end $script:BUILD_END_TIME
|
|
$testTime = New-TimeSpan $script:TEST_START_TIME -end $script:TEST_END_TIME
|
|
Write-Host("Build time:`t" + $buildTime)
|
|
Write-Host("Test time:`t" + $testTime) |