MegaBites-AI/Windows-powershell
0372
1# Build PowerShell on Windows for .NET Core2 3This guide will walk you through building PowerShell on Windows, targeting .NET Core.4We'll start by showing how to set up your environment from scratch.5 6## Environment7 8These instructions are tested on Windows 10 and Windows Server 20129R2, though they should work anywhere the dependencies work.10 11### Git Setup12 13Using Git requires it to be set up correctly; refer to the14[Readme](../../README.md) and15[Contributing Guidelines](../../.github/CONTRIBUTING.md).16 17This guide assumes that you have recursively cloned the PowerShell repository and `cd`ed into it.18 19### Visual Studio20 21Install [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/). The Community edition is available free of charge.22 23The PowerShell/PowerShell repository requires at least Visual Studio 2019 16.7.24 25### Visual Studio Code26 27Building PowerShell using [Visual Studio Code](https://code.visualstudio.com/) depends on the PowerShell executable to be called `pwsh` which means28that you must have PowerShell Core 6 Beta.9 (or newer) installed to successfully build this project (typically for the purpose of debugging).29 30### .NET CLI31 32We use the [.NET command-line interface][dotnet-cli] (`dotnet`) to build PowerShell.33The version we are currently using is mentioned in [`global.json`](../../global.json#L3) at the root of this repository.34The `Start-PSBootstrap` function will automatically install it and add it to your path:35 36```powershell37Import-Module ./build.psm138Start-PSBootstrap -Scenario Dotnet39```40 41Or you can call `Install-Dotnet` directly:42 43```powershell44Install-Dotnet45```46 47It removes the previously installed version of .NET CLI and installs the version that PowerShell Core depends on.48If you have any problems installing `dotnet`, please see their [documentation][cli-docs].49 50[dotnet-cli]: https://learn.microsoft.com/dotnet/core/tools/51[cli-docs]: https://www.microsoft.com/net/core#windowscmd52 53## Build using our module54 55We maintain a [PowerShell module](../../build.psm1) with the function `Start-PSBuild` to build PowerShell.56 57We do not recommend using Visual Studio Dev Environment Terminal to build the source code.58 59```powershell60Import-Module ./build.psm161Start-PSBuild -Clean -PSModuleRestore -UseNuGetOrg62```63 64> The PowerShell project by default references packages from the private Azure Artifacts feed, which requires authentication. The `-UseNuGetOrg` flag reconfigures the build to use the public NuGet.org feed instead.65 66Congratulations! If everything went right, PowerShell is now built and executable as `./src/powershell-win-core/bin/Debug/net6.0/win7-x64/publish/pwsh.exe`.67 68This location is of the form `./[project]/bin/[configuration]/[framework]/[rid]/publish/[binary name]`,69and our project is `powershell`, configuration is `Debug` by default,70framework is `net6.0`, runtime identifier is `win7-x64` by default,71and binary name is `pwsh`.72The function `Get-PSOutput` will return the path to the executable;73thus you can execute the development copy via `& (Get-PSOutput)`.74 75The `powershell` project is the .NET Core PowerShell host.76It is the top-level project, so `dotnet build` transitively builds all its dependencies,77and emits a `pwsh` executable.78The cross-platform host has built-in documentation via `--help`.79 80You can run our cross-platform Pester tests with `Start-PSPester`.81 82```powershell83Import-Module ./build.psm184Start-PSPester -UseNuGetOrg85```86 87## Building in Visual Studio88 89We currently have the issue [#3400](https://github.com/PowerShell/PowerShell/issues/3400) tracking this task.90 