# PR Summary * Update build docs to specify Visual Studio 2019 16.6 Preview 2 as a requirement, due to the of `net5.0` TFM. * Remove dependancy on "Common Tools for Visual C++" as there is no longer C++ code in the repository. ## PR Context Visual Studio 2019 >= 16.6 Preview 2 is required since #12486. see also: #12514 ## PR Checklist - [x] [PR has a meaningful title](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - Use the present tense and imperative mood when describing your changes - [x] [Summarized changes](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - [x] [Make sure all `.h`, `.cpp`, `.cs`, `.ps1` and `.psm1` files have the correct copyright header](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - [x] This PR is ready to merge and is not [Work in Progress](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---work-in-progress). - If the PR is work in progress, please add the prefix `WIP:` or `[ WIP ]` to the beginning of the title (the `WIP` bot will keep its status check at `Pending` while the prefix is present) and remove the prefix when the PR is ready. - **[Breaking changes](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#making-breaking-changes)** - [x] None - **OR** - [ ] [Experimental feature(s) needed](https://github.com/MicrosoftDocs/PowerShell-Docs/blob/staging/reference/6/Microsoft.PowerShell.Core/About/about_Experimental_Features.md) - [ ] Experimental feature name(s): <!-- Experimental feature name(s) here --> - **User-facing changes** - [x] Not Applicable - **OR** - [ ] [Documentation needed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - [ ] Issue filed: <!-- Number/link of that issue here --> - **Testing - New and feature** - [x] N/A or can only be tested interactively - **OR** - [ ] [Make sure you've added a new test if existing tests do not effectively test the code changed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#before-submitting) - **Tooling** - [x] I have considered the user experience from a tooling perspective and don't believe tooling will be impacted. - **OR** - [ ] I have considered the user experience from a tooling perspective and enumerated concerns in the summary. This may include: - Impact on [PowerShell Editor Services](https://github.com/PowerShell/PowerShellEditorServices) which is used in the [PowerShell extension](https://github.com/PowerShell/vscode-powershell) for VSCode (which runs in a different PS Host). - Impact on Completions (both in the console and in editors) - one of PowerShell's most powerful features. - Impact on [PSScriptAnalyzer](https://github.com/PowerShell/PSScriptAnalyzer) (which provides linting & formatting in the editor extensions). - Impact on [EditorSyntax](https://github.com/PowerShell/EditorSyntax) (which provides syntax highlighting with in VSCode, GitHub, and many other editors).
3.0 KiB
Build PowerShell on Windows for .NET Core
This guide will walk you through building PowerShell on Windows, targeting .NET Core. We'll start by showing how to set up your environment from scratch.
Environment
These instructions are tested on Windows 10 and Windows Server 2012 R2, though they should work anywhere the dependencies work.
Git Setup
Using Git requires it to be setup correctly; refer to the README and Contributing Guidelines.
This guide assumes that you have recursively cloned the PowerShell repository and cded into it.
Visual Studio
This repository requires at least Visual Studio 2019 16.6 Preview 2. The free Community edition of Visual Studio can be downloaded from Microsoft.
Visual Studio Code
Building PowerShell using Visual Studio Code depends on the PowerShell executable to be called pwsh which means
that you must have PowerShell Core 6 Beta.9 (or newer) installed to successfully build this project (typically for the purpose of debugging).
.NET CLI
We use the .NET Command Line Interface (dotnet) to build PowerShell.
The version we are currently using is mentioned in global.json at the root of this repository.
The Start-PSBootstrap function will automatically install it and add it to your path:
Import-Module ./build.psm1
Start-PSBootstrap
Or you can call Install-Dotnet directly:
Install-Dotnet
It removes the previously installed version of .NET CLI and install the version that PowerShell Core depends on.
If you have any problems installing dotnet, please see their documentation.
Build using our module
We maintain a PowerShell module with the function Start-PSBuild to build PowerShell.
Import-Module ./build.psm1
Start-PSBuild
Congratulations! If everything went right, PowerShell is now built and executable as ./src/powershell-win-core/bin/Debug/net5.0/win7-x64/publish/pwsh.exe.
This location is of the form ./[project]/bin/[configuration]/[framework]/[rid]/publish/[binary name],
and our project is powershell, configuration is Debug by default,
framework is net5.0, runtime identifier is win7-x64 by default,
and binary name is pwsh.
The function Get-PSOutput will return the path to the executable;
thus you can execute the development copy via & (Get-PSOutput).
The powershell project is the .NET Core PowerShell host.
It is the top level project, so dotnet build transitively builds all its dependencies,
and emits a pwsh executable.
The cross-platform host has built-in documentation via --help.
You can run our cross-platform Pester tests with Start-PSPester.
Building in Visual Studio
We currently have the issue #3400 tracking this task.