dotnet-project-scaffolding.psm1

function Open_In_Code{
    #if Visual Studio code is not found, then abort!
    if ($null -eq (Get-Command "code.cmd" -ErrorAction Stop)) {
        Write-Host "Scafolding is complete, but Visual Studio Code is not detected on your computer, so it will not be started."
    }
    code . -n
}

function Check_DotNet{
    #If dotnet tool is not found, then abort!
    if ($null -eq (Get-Command "dotnet.exe" -ErrorAction Stop)) {
        Write-Host "It seems dotnet is not installed or in your PATH"
    }
}

function Check-Git{
    #if git is not found stop initializing repo, call Open in code function
    if ($null -eq (Get-Command "git.exe" -ErrorAction Stop)) {
        Write-Host "Scafolding is done, but Git could not be found on this machine, stop adding the project to Version Control"
        Write-Host "Attempting to open project in Visual Studio Code..."
        Open_In_Code
    }
}
function New-dotNetProject {
    param(
        [Parameter(Mandatory = $true)]
        $Project_Type,
        [Parameter(Mandatory = $true)]
        $Project_Name,
        [Parameter(Mandatory = $false)]
        $Language = 'C#'
    )

    #Creating new project
    Write-Host "Creatint new dotnet project..."
    $null = Check_DotNet
    dotnet new $Project_Type --language $Language --output $Project_Name

    $currentLocation = Get-Location;
    Set-Location $currentLocation/$Project_Name;

    #Put the project under version control
    Write-Host "Initializing version control..."
    $null = Check-Git
    $null = Copy-Item -Path $PSScriptRoot/gitignore -Destination $currentLocation/$Project_Name
    $null = Rename-Item $currentLocation/$Project_Name/gitignore -NewName .gitignore
    $null = git init
    $null = git add .
    Write-Host "Commit for the first time..."
    $null = git commit -m "Initial Project Creation"

    #call open in code function
    Write-Host "Attempting to open project in Visual Studio Code..."
    $null = Open_In_Code

    Write-Host "Project scaffolding Complete!"
}

function New-dotNetSolution{
    #Create new Solution
    $null = Check_DotNet
    dotnet new sln

    $currentLocation = Get-Location
    $null = Copy-Item -Path $PSScriptRoot/gitignore -Destination $currentLocation
    $null = Rename-Item $currentLocation/gitignore -NewName .gitignore
    While($true){
        $ans = Read-Host -Prompt "Do you need create new project [y/n]"
        if($ans -eq "y"){
            $ptype = Read-Host -Prompt "Please enter project type"
            $pname = Read-Host -Prompt "Please enter project name"
            $plang = Read-Host -Prompt "Please enter programming language (default is C#)"
            if($plang -eq ""){
                $plang = "C#"
            }
            Write-Host "Creating new project ..."
            dotnet new $ptype --language $plang -n $pname
            Write-Host "Hook the project with solution ..."
            dotnet sln add $pname
            continue
        }
        if($ans -eq "n"){
            break
        }
        Write-Host "Please enter an valid answer [y/n]"
    }
    Write-Host "Initializing Version Control ..."
    $null = Check-Git
    $null = git init
    $null = git add . 
    Write-Host "Commit for the first time..."
    $null = git commit -m "Initial Solution Creation"

    #Attempting to open in visual studio code
    Write-Host "Attempting to open project in Visual Studio Code..."
    $null = Open_In_Code
}

Export-ModuleMember -Function New-dotNetProject, New-dotNetSolution



# SIG # Begin signature block
# MIIV9QYJKoZIhvcNAQcCoIIV5jCCFeICAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUctQg0lG9ZH8xmq1ZumyB0DOm
# s0WgghKxMIIF2DCCBMCgAwIBAgIRAOQnBJX2jJHW0Ox7SU6k3xwwDQYJKoZIhvcN
# AQELBQAwfjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9n
# aWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
# eTEiMCAGA1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0xODA5MTEw
# OTI2NDdaFw0yMzA5MTEwOTI2NDdaMHwxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVU
# ZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
# MTEwLwYDVQQDDChTU0wuY29tIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
# UlNBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA+Q/doyt9y9Aq/uxn
# habnLhu6d+Hj9a+k7PpKXZHEV0drGHdrdvL9k+Q9D8IWngtmw1aUnheDhc5W7/IW
# /QBi9SIJVOhlF05BueBPRpeqG8i4bmJeabFf2yoCfvxsyvNB2O3Q6Pw/YUjtsAMU
# HRAOSxngu07shmX/NvNeZwILnYZVYf16OO3+4hkAt2+hUGJ1dDyg+sglkrRueiLH
# +B6h47LdkTGrKx0E/6VKBDfphaQzK/3i1lU0fBmkSmjHsqjTt8qhk4jrwZe8jPkd
# 2SKEJHTHBD1qqSmTzOu4W+H+XyWqNFjIwSNUnRuYEcM4nH49hmylD0CGfAL0XAJP
# KMuucZ8POsgz/hElNer8usVgPdl8GNWyqdN1eANyIso6wx/vLOUuqfqeLLZRRv2v
# A9bqYGjqhRY2a4XpHsCz3cQk3IAqgUFtlD7I4MmBQQCeXr9/xQiYohgsQkCz+W84
# J0tOgPQ9gUfgiHzqHM61dVxRLhwrfxpyKOcAtdF0xtfkn60Hk7ZTNTX8N+TD9l0W
# viFz3pIK+KBjaryWkmo++LxlVZve9Q2JJgT8JRqmJWnLwm3KfOJZX5es6+8uyLzX
# G1k8K8zyGciTaydjGc/86Sb4ynGbf5P+NGeETpnr/LN4CTNwumamdu0bc+sapQ3E
# IhMglFYKTixsTrH9z5wJuqIz7YcCAwEAAaOCAVEwggFNMBIGA1UdEwEB/wQIMAYB
# Af8CAQIwHQYDVR0OBBYEFN0ECQei9Xp9UlMSkpXuOIAlDaZZMB8GA1UdIwQYMBaA
# FAh2zcsH/yT2xc3tu5C84oQ3RnX3MA4GA1UdDwEB/wQEAwIBBjA2BgNVHR8ELzAt
# MCugKaAnhiVodHRwOi8vc3NsY29tLmNybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMHMG
# CCsGAQUFBwEBBGcwZTApBggrBgEFBQcwAYYdaHR0cDovL3NzbGNvbS5vY3NwLWNl
# cnR1bS5jb20wOAYIKwYBBQUHMAKGLGh0dHA6Ly9zc2xjb20ucmVwb3NpdG9yeS5j
# ZXJ0dW0ucGwvY3RuY2EuY2VyMDoGA1UdIAQzMDEwLwYEVR0gADAnMCUGCCsGAQUF
# BwIBFhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBCwUAA4IB
# AQAflZojVO6FwvPUb7npBI9Gfyz3MsCnQ6wHAO3gqUUt/Rfh7QBAyK+YrPXAGa0b
# oJcwQGzsW/ujk06MiWIbfPA6X6dCz1jKdWWcIky/dnuYk5wVgzOxDtxROId8lZwS
# aZQeAHh0ftzABne6cC2HLNdoneO6ha1J849ktBUGg5LGl6RAk4ut8WeUtLlaZ1Q8
# qBvZBc/kpPmIEgAGiCWF1F7u85NX1oH4LK739VFIq7ZiOnnb7C7yPxRWOsjZy6Si
# TyWo0ZurLTAgUAcab/HxlB05g2PoH/1J0OgdRrJGgia9nJ3homhBSFFuevw1lvRU
# 0rwrROVH13eCpUqrX5czqyQRMIIGWzCCBEOgAwIBAgIQV156WorWyKgnVBrnbADy
# +TANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
# EDAOBgNVBAcMB0hvdXN0b24xETAPBgNVBAoMCFNTTCBDb3JwMTQwMgYDVQQDDCtT
# U0wuY29tIENvZGUgU2lnbmluZyBJbnRlcm1lZGlhdGUgQ0EgUlNBIFIxMB4XDTIy
# MDcwOTE3MzEwN1oXDTI1MDcwODE3MzEwN1owZDELMAkGA1UEBhMCQ0ExGTAXBgNV
# BAgMEEJyaXRpc2ggQ29sdW1iaWExEDAOBgNVBAcMB0J1cm5hYnkxEzARBgNVBAoM
# ClNoaWtlIENoZW4xEzARBgNVBAMMClNoaWtlIENoZW4wggGiMA0GCSqGSIb3DQEB
# AQUAA4IBjwAwggGKAoIBgQC2KsqxstUq33DhMCd4NE3QmFI/ffLA3g1k0FRuwkuJ
# J0SdwT14OFJf221xmGnF4Y0ibGvD21/FeyVZxlA4unJlajZJF/WMMspZeriwWWGE
# 84rE+z56lAhZnTLuM8Id2lDsuVv6C9vxNrerRRV9UErxqrk0OLdvdT8OFh9X0PNF
# E+Q4YFQQsrkT9dBN+bxe/n9cZgdlAgtGRN/ZdYE6Xs6Dc4DMaHLl0g+C8iN80DnV
# m6kRkg/4eW6Le9wDA7sn0BwuxxgUpttmCdZGAj8Y+M/I+G9AAHpB3Gdq9ptx+mB4
# S7pVIcBG5wkkmcG6R3aiWVfM/Rsil7/heXfcN4RNIYmwPnWB4ILwdEpCrx8NZqbt
# 894MjI0Oh6rGkEsbKCklDKBf95AFei1FL5NVIeBFDbJpf5Ag+dZdSzCRQvqTBznY
# ZRjP1n6FB7RpU+7k9ONjtsWykoeUwdBoEKiLpavxXGuP5a6WX3q3XHoIsEcbaz3S
# RzxyUl2djpYzvHx/IMN6ggMCAwEAAaOCAXMwggFvMAwGA1UdEwEB/wQCMAAwHwYD
# VR0jBBgwFoAUVML+EJUAk81q9efA19myS7iPDOMwWAYIKwYBBQUHAQEETDBKMEgG
# CCsGAQUFBzAChjxodHRwOi8vY2VydC5zc2wuY29tL1NTTGNvbS1TdWJDQS1Db2Rl
# U2lnbmluZy1SU0EtNDA5Ni1SMS5jZXIwUQYDVR0gBEowSDAIBgZngQwBBAEwPAYM
# KwYBBAGCqTABAwMBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnNzbC5jb20v
# cmVwb3NpdG9yeTATBgNVHSUEDDAKBggrBgEFBQcDAzBNBgNVHR8ERjBEMEKgQKA+
# hjxodHRwOi8vY3Jscy5zc2wuY29tL1NTTGNvbS1TdWJDQS1Db2RlU2lnbmluZy1S
# U0EtNDA5Ni1SMS5jcmwwHQYDVR0OBBYEFDf3renyUjaxIiWGHDyaNg9qLVNPMA4G
# A1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAatpx4vhhKY3FbIF4tycY
# GOlZP1fb7D+nhYyuLtG2fCLE3HUH5uUOXqwJ3cn9dJTyJ3U98q0GSo+dWwai9J7v
# f29jQNkVrPaA9qYOZJFvqd2zwfD/OjIuDziu/fR8BZXBL/rDQmQHXy1V1pL69Can
# KIL2k9nZ2lJtHIAdSkbAcdkNaWMllupsNYrna2gzF4sznukX0vLbRDN4SPxFKreD
# VGkDSP58I3IMcqE8VNQcELHYeI7Baf6D+98MTVk1Rz1BkACai3mC/0zn6n5mvpnY
# pKb83Fd2YqHMPSRLd2u9PvEd/NU4UzbegYnqmxAC9JElGkSOALKJ9Vp3EsbAIHwH
# xem2/SS3HlfnjHg5kGkm8AXir0F+JPp8afsxaWji+l56kw4MbFlBoCtd0aBfeOPo
# Cs65ehcmnphpnU0UoLW1Ec72etnKzsFiT3xRDVScfqojiM92yTyIt0/Fhlj9kcZg
# g6EGA4TEJYNmDltB1MO6ZtDYW9vyYxu9Kc4n9CTDmeahzgf95bD7tKzSctwPaTwZ
# HZ0GCGs4EeE/pdGJwjUXwV8HsZ8VkTMY3o3pWQrzmTSZWzYhqryO2l5rsnfixiud
# jz2SmjX1umwrAFNbHB5/AH7k/fHpAxWfehnUyIqYn8txgUDLaQKEZMTECDkEdRVt
# VwruJdIF/LuBo1ToLL87DZAwggZyMIIEWqADAgECAghkM1HTxzifCDANBgkqhkiG
# 9w0BAQsFADB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcM
# B0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM
# LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTAeFw0xNjA2MjQy
# MDQ0MzBaFw0zMTA2MjQyMDQ0MzBaMHgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVU
# ZXhhczEQMA4GA1UEBwwHSG91c3RvbjERMA8GA1UECgwIU1NMIENvcnAxNDAyBgNV
# BAMMK1NTTC5jb20gQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBDQSBSU0EgUjEw
# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCfgxNzqrDGbSHL24t6h3TQ
# cdyOl3Ka5LuINLTdgAPGL0WkdJq/Hg9Q6p5tePOf+lEmqT2d0bKUVz77OYkbkStW
# 72fL5gvjDjmMxjX0jD3dJekBrBdCfVgWQNz51ShEHZVkMGE6ZPKX13NMfXsjAm3z
# detVPW+qLcSvvnSsXf5qtvzqXHnpD0OctVIFD+8+sbGP0EmtpuNCGVQ/8y8Ooct8
# /hP5IznaJRy4PgBKOm8yMDdkHseudQfYVdIYyQ6KvKNc8HwKp4WBwg6vj5lc02Al
# vINaaRwlE81y9eucgJvcLGfE3ckJmNVz68Qho+Uyjj4vUpjGYDdkjLJvSlRyGMwn
# h/rNdaJjIUy1PWT9K6abVa8mTGC0uVz+q0O9rdATZlAfC9KJpv/XgAbxwxECMzNh
# F/dWH44vO2jnFfF3VkopngPawismYTJboFblSSmNNqf1x1KiVgMgLzh4gL32Bq5B
# NMuURb2bx4kYHwu6/6muakCZE93vUN8BuvIE1tAx3zQ4XldbyDgeVtSsSKbt//m4
# wTvtwiS+RGCnd83VPZhZtEPqqmB9zcLlL/Hr9dQg1Zc0bl0EawUR0tOSjAknRO1P
# NTFGfnQZBWLsiePqI3CY5NEv1IoTGEaTZeVYc9NMPSd6Ij/D+KNVt/nmh4LsRR7F
# bjp8sU65q2j3m2PVkUG8qQIDAQABo4H7MIH4MA8GA1UdEwEB/wQFMAMBAf8wHwYD
# VR0jBBgwFoAU3QQJB6L1en1SUxKSle44gCUNplkwMAYIKwYBBQUHAQEEJDAiMCAG
# CCsGAQUFBzABhhRodHRwOi8vb2NzcHMuc3NsLmNvbTARBgNVHSAECjAIMAYGBFUd
# IAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDov
# L2NybHMuc3NsLmNvbS9zc2wuY29tLXJzYS1Sb290Q0EuY3JsMB0GA1UdDgQWBBRU
# wv4QlQCTzWr158DX2bJLuI8M4zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL
# BQADggIBAPUPJodwr5miyvXWyfCNZj05gtOII9iCv49UhCe204MH154niU2EjlTR
# IO5gQ9tXQjzHsJX2vszqoz2OTwbGK1mGf+tzG8rlQCbgPW/M9r1xxs19DiBAOdYF
# 0q+UCL9/wlG3K7V7gyHwY9rlnOFpLnUdTsthHvWlM98CnRXZ7WmTV7pGRS6AvGW+
# 5xI+3kf/kJwQrfZWsqTU+tb8LryXIbN2g9KR+gZQ0bGAKID+260PZ+34fdzZcFt6
# umi1s0pmF4/n8OdX3Wn+vF7h1YyfE7uVmhX7eSuF1W0+Z0duGwdc+1RFDxYRLhHD
# sLy1bhwzV5Qe/kI0Ro4xUE7bM1eV+jjk5hLbq1guRbfZIsr0WkdJLCjoT4xCPGRo
# 6eZDrBmRqccTgl/8cQo3t51Qezxd96JSgjXktefTCm9r/o35pNfVHUvnfWII+NnX
# rJlJ27WEQRQu9i5gl1NLmv7xiHp0up516eDap8nMLDt7TAp4z5T3NmC2gzyKVMtO
# DWgqlBF1JhTqIDfM63kXdlV4cW3iSTgzN9vkbFnHI2LmvM4uVEv9XgMqyN0eS3FE
# 0HU+MWJliymm7STheh2ENH+kF3y0rH0/NVjLw78a3Z9UVm1F5VPziIorMaPKPlDR
# ADTsJwjDZ8Zc6Gi/zy4WZbg8Zv87spWrmo2dzJTw7XhQf+xkR6OdMYICrjCCAqoC
# AQEwgYwweDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdI
# b3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDE0MDIGA1UEAwwrU1NMLmNvbSBDb2Rl
# IFNpZ25pbmcgSW50ZXJtZWRpYXRlIENBIFJTQSBSMQIQV156WorWyKgnVBrnbADy
# +TAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG
# 9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIB
# FTAjBgkqhkiG9w0BCQQxFgQU/jMnN07V4g9B9frtLj5M5Yg9ksYwDQYJKoZIhvcN
# AQEBBQAEggGAcHZ6KGT79Y9g+VLE+iz6tX0W5Fa7W0CNr1cnBVbEZmp4pd/rgYW+
# +d2BmIXU/1muUYVPn82bpHHqP8RlurRawtWsOLyClrz+DVs+XbjvaP0X7tIxS9NP
# w/+JiNkaOngS0+1w5Yl3CU6XgzmUM1el2YLCiVIrIEhCKj12XYlpfGUiCeL6XO9G
# WMHbvScZM5oD6YXOlcZWbMI3csXrBvGdfTqWd058OqdmjDXN724mvxHvBBWrTUZB
# 826eLXff6ieC7fIeMLxz7nMKL6lm/7loHIoycGv/dJROteSYOdfHLn/Hreylu1T+
# Gs/LJn7DvDgblbsmiHxa8DEiFo6mLKhyFODGiICgfjJQD2ZNgE/GQ4UTgzVBklO1
# rega+Gjzx13u5CSRTPVwb8aO4iOF4N48jlJycgDY0317nX+aR3JZISlSgzCnHUDF
# UhjTl6GDMVc8fw/ElyUX5cZwdo09P8YYNYwNahK3JjpWrBYumtU1jJh1IbQChdYb
# qiJyx1WNWLyf
# SIG # End signature block