Publish-VisualStudioSolution.psm1
<#
.Synopsis Publish visual studio solution .DESCRIPTION Publish visual studio solution .EXAMPLE Publish-VisualStudioSolution D:\Projects\project.sln .NOTES Author: Imrich Szolik #> function Publish-VisualStudioSolution { [CmdletBinding()] [Alias()] Param ( # Solution file (sln) [string] [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$false, HelpMessage="Project file.")] $SolutionFile, #Configuration [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Configuration.")] [ValidateSet('Debug','Release')] [string] $Configuration = "Release", #Runtime [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Runtime.")] [string] $Runtime = "win-x64", #Enable self contained publish [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Enable self contained publish.")] [switch] $SelfContained, #Enable single file publish [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Enable single file publish.")] [switch] $SingleFile, #Publish path. [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Publish path.")] [string] $PublishPath ) Begin { #validate SolutionFile if( (-not (Test-Path -Path $SolutionFile -PathType Leaf)) -or (-not ( $SolutionFile -like '*.sln')) ){ throw "$SolutionFile is not valid" } # $SingleFileValue = "false" if($SingleFile) { $SingleFileValue = "true" } # $SelfContainedValue = "false" if($SelfContained) { $SelfContainedValue = "true" } if([string]::IsNullOrEmpty($PublishPath)){ $PublishPath = "publish" } $solutionPath = Split-Path -Parent $SolutionFile } Process { #set version Update-VersionInfo set $SolutionFile #cleanup Write-Verbose "Remove old publish [$PublishPath]" Remove-Item $PublishPath -Force -Recurse -ErrorAction SilentlyContinue #configs $lomtecConfigs = Get-ChildItem -Recurse $solutionPath -Filter lomtec.json | Select-Object -ExpandProperty FullName foreach($lomtec in $lomtecConfigs){ #json $json = Get-Content $lomtec | ConvertFrom-Json #project if($json.Publish.Enabled){ $project = Get-ChildItem (Split-Path -Parent $lomtec) -Filter "*.csproj" | Select-Object -ExpandProperty FullName -First 1 # if( -not ( $null -eq $project) ) { if([string]::IsNullOrEmpty($json.Publish.Path)){ $publish = "$PublishPath\$(Split-Path -Leaf ( Split-Path -Parent $project ))" } else{ $publish = "$PublishPath\$($json.Publish.Path)" } Write-Host "#### PUBLISH $(Split-Path -Parent $project) to $publish ####" dotnet publish -nologo --verbosity quiet --runtime $Runtime --configuration $Configuration --self-contained $SelfContainedValue -p:PublishSingleFile=$SingleFileValue $project --output $publish } } else{ Write-Warning "#### PUBLISH $(Split-Path -Parent $lomtec) is not enabled ####" } } #cleanup Write-Verbose "Publish cleanup" Get-ChildItem -Path $PublishPath -Recurse -Filter *.pdb -File | Remove-Item -Force #reset version Update-VersionInfo reset $SolutionFile } End { } } Export-ModuleMember -Function Publish-VisualStudioSolution # SIG # Begin signature block # MIIH7gYJKoZIhvcNAQcCoIIH3zCCB9sCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUQheNJA27gF9bHLAuKqkIWEwX # 9QWgggUPMIIFCzCCAvOgAwIBAgICAKUwDQYJKoZIhvcNAQELBQAwgaAxCzAJBgNV # BAYTAlNLMREwDwYDVQQIEwhTbG92YWtpYTETMBEGA1UEBxMKQnJhdGlzbGF2YTET # MBEGA1UEChMKTG9tdGVjLmNvbTErMCkGA1UEAxMiTG9tdGVjLmNvbSBDZXJ0aWZp # Y2F0aW9uIEF1dGhvcml0eTEnMCUGCSqGSIb3DQEJARYYSW1yaWNoLlN6b2xpa0Bs # b210ZWMuY29tMB4XDTE5MDMyNjE1MDQ0M1oXDTMwMDEwMTAwMDAwMFowgZMxCzAJ # BgNVBAYTAlNLMREwDwYDVQQIEwhTbG92YWtpYTETMBEGA1UEBxMKQnJhdGlzbGF2 # YTETMBEGA1UEChMKTG9tdGVjLmNvbTEeMBwGA1UEAxMVTG9tdGVjLmNvbSBQb3dl # cnNoZWxsMScwJQYJKoZIhvcNAQkBFhhJbXJpY2guU3pvbGlrQGxvbXRlYy5jb20w # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+J+Jwh25Ha39PSBzRUNj/ # 8+iONxiknLBSTkB1DJEQ9wC6FBS/1EQvbFtn2K6huVZBQCoZzNFcXoiAked3ALIT # UoYxX+fD4Wkve947QqCXGroCFQVaBSLkPoJzWCadlXQWyDyjFuCY42TsQRJB6TFp # n4rVylhinlOvEHJ96COjzvmEs7X1y3tTVPtRiDt3wOxNLx1T1H/6lmVzGFORJS0F # ZvQF231+/Zk4Je+gOe/jguo/gHoZHdjj31JeMLJ6Md3zslAFAPIqI3lofez6V3f7 # PkZLsVnYLAuGElg1I4WUswZJpfbnq2KqPWvlwG9/Xb5KSvUz5d6uRzQUDJAn6fG5 # AgMBAAGjWjBYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeAMCsGA1UdJQQkMCIGCCsG # AQUFBwMDBgorBgEEAYI3AgEVBgorBgEEAYI3AgEWMBEGCWCGSAGG+EIBAQQEAwIE # sDANBgkqhkiG9w0BAQsFAAOCAgEACSWqb/bJGI4eR07CZ6g3baoe2Djl7gPIPgyg # Y/uYAxGROVfVYQBVafFCfUaCExhiEU1SHdJanCyYlUkx8d9OVVvWiA/L6O+5H608 # l7z1zSLE7R5z5JMB+O/gqImNyKT0C41AP0OkHasCDb78KJu/1nPjqCKpT3SR+Q2w # ayMvOXa+jPy5t0cNgaJXE0cF0wd8QIcHrYe/AT+qW3AHd9hXcppEaKSyIobjbO4O # 2Uf0P+fNNxvjokCDERsk72kPmkIyYBaZM6ezSMIc6LoHwjleO0nPPYxKVKsNeotl # BX89ssDpVlMmLbntUtT4zNZY4CX0aPntMFJxaYBUM1xhdW02FWkOHt5yZXgA376n # l6B9gGHgU28/QXKIJJH1EQAt4oqG9WzbOYxNQm6xAwsOpv9N5NKDppt8UJLF8gIQ # WLlJEcLvY3eMtxcGf7Mgxi892+nGPKNWMiDTjgNwdq/drITbdK1oSbt7/qnCFZhU # NGipYTTUaIlZUICezYDtFFfr1NpYIrHKVEsRLcSjfuOdK+PbLtOjQOs7Mp9whC1J # lZD8o8eX8os8LfSsVbmDlEhG99mO0An3xydarRekrkKym4G/9uMu3Ag1ujw1Ubzz # sklJSrvbD8pCAg4781wb42BCCzOwJrWAiARkIIpgbEL0xKFyV4sADotVzc9y8XI0 # B0P2TOMxggJJMIICRQIBATCBpzCBoDELMAkGA1UEBhMCU0sxETAPBgNVBAgTCFNs # b3Zha2lhMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpMb210ZWMuY29t # MSswKQYDVQQDEyJMb210ZWMuY29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MScw # JQYJKoZIhvcNAQkBFhhJbXJpY2guU3pvbGlrQGxvbXRlYy5jb20CAgClMAkGBSsO # AwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEM # BgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEWMCMGCSqG # SIb3DQEJBDEWBBSesvpoYwui23Pk1uzBkSoKnu70gjANBgkqhkiG9w0BAQEFAASC # AQC93NHMW2lQ1hVWxSeg5BgTrpyjtvF4EO7Ei5YdLfm2DdXPmKCp/OD15d7fBvdK # Vx/6Iz3OCeyEkRSBTQyadb65/63RSlRlrKhAz2DWT79vUjoDaL01nLzPIXo3ugiw # 3JS9r8uhA8+zRSS0Buqy2JCGLh6N23WkDfjVzlUnNqkqUJDt++tiIQ29t14A4JTV # U/gONyn9eqC0oExcXdn9klmQv+sLc3YMop+SMIxR7+rJVaLP5MKc/Cehn4iXlI+a # iMlnJEWUw1K2fuk1OgIhRxbKcTy0LTuDsZ/xLqfVvj4xNf5hXBrU8QHATsbHnqJy # 8i5oMGuRwYLCwj+Z3Y3CyPSG # SIG # End signature block |