Functions/Invoke-DotNetBuild.ps1

function Invoke-DotNetBuild {

    [CmdletBinding(DefaultParameterSetName = 'FolderName')]
    param(
        [Parameter(Mandatory = $true, ParameterSetName = "SolutionFilename")]
        [String] $SolutionFilename,
        [Parameter(Mandatory = $false, ParameterSetName = "FolderName")]
        [String] $Folder,
        [Parameter(Mandatory = $false)]
        [String] $Configuration = "Release",
        [Parameter(Mandatory = $false)]
        [string] $BuildVersion,
        [Parameter(Mandatory = $false)]
        [switch] $StoreNugetPasswordsInClearText
    )

    Write-Verbose $Folder
    $spacer = "".PadRight(80, "#")
    if (-not $SolutionFilename) {
        if (-not $Folder) { $Folder = $pwd }
        $Folder = Resolve-Path $Folder
        Write-Verbose $Folder
        $SolutionFilename = Get-ChildItem $Folder -Filter *.sln | Select-Object -First 1 -ExpandProperty FullName
        Write-Verbose $SolutionFilename
    }
    else {
        $Folder = [IO.Path]::GetDirectoryName($SolutionFilename)
    }


    Write-Host "$spacer"
    Write-Host "Restoring solution '$SolutionFilename'"
    Write-Host "$spacer"
    $restoreArgs = @(
        "restore"
        $SolutionFilename
    )

    $NugetConfigFile = [System.IO.FileInfo]::new([IO.Path]::Combine($Folder, "nuget.config"))
    if ($NugetConfigFile.Exists) {
        $restoreArgs += @(
            "--configfile", $NugetConfigFile.FullName
        )
    }

    if (-not $env:AGENT_ID) { 
        $restoreArgs += @( "--interactive" )
    }
    & dotnet @restoreArgs
    if ($LASTEXITCODE -ne 0) { throw "Failed" }

    Write-Host "$spacer"
    Write-Host "Building solution '$SolutionFilename'"
    Write-Host "$spacer"
    
    $buildArgs = @(
        "build"
        $SolutionFilename
        "-c", $Configuration
    )
    if ($BuildVersion) { $buildArgs += (Get-VersionArgs $BuildVersion) }
    Write-Host $buildArgs
    & dotnet @buildArgs
    if ($LASTEXITCODE -ne 0) { throw "Failed" }

}

Export-ModuleMember 'Invoke-DotNetBuild'