2016-03-30 23:54:49 +02:00
|
|
|
Build PowerShell on Windows for .NET Core
|
|
|
|
=========================================
|
|
|
|
|
|
|
|
This guide will walk you through building PowerShell on Windows,
|
|
|
|
targetting .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.
|
|
|
|
|
2016-04-14 01:21:23 +02:00
|
|
|
Git Setup
|
|
|
|
---------
|
|
|
|
|
|
|
|
Using Git requires it to be setup correctly; refer to the
|
|
|
|
[README](../../README.md) and
|
2016-04-22 23:37:26 +02:00
|
|
|
[Contributing Guidelines](../../.github/CONTRIBUTING.md).
|
2016-04-14 01:21:23 +02:00
|
|
|
|
|
|
|
This guide assumes that you have recursively cloned the PowerShell
|
|
|
|
repository and `cd`ed into it.
|
|
|
|
|
2016-03-30 23:54:49 +02:00
|
|
|
.NET CLI
|
|
|
|
--------
|
|
|
|
|
|
|
|
We use the [.NET Command Line Interface][dotnet-cli] (`dotnet`) to
|
2016-04-14 01:21:23 +02:00
|
|
|
build PowerShell. The `Start-PSBootstrap` function will automatically
|
|
|
|
install it and add it to your path:
|
|
|
|
|
|
|
|
```powershell
|
2016-05-18 22:58:59 +02:00
|
|
|
Import-Module ./build.psm1
|
2016-04-14 01:21:23 +02:00
|
|
|
Start-PSBootstrap
|
|
|
|
```
|
|
|
|
|
|
|
|
The `Start-PSBootstrap` function itself does exactly this:
|
2016-03-30 23:54:49 +02:00
|
|
|
|
|
|
|
```powershell
|
|
|
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/install.ps1 -OutFile install.ps1
|
2016-04-14 01:21:23 +02:00
|
|
|
./install.ps1
|
2016-03-30 23:54:49 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
If you have any problems installing `dotnet`, please see their
|
|
|
|
[documentation][cli-docs].
|
|
|
|
|
|
|
|
If you are using Windows 7, Windows Server 2008 or Windows Server 2012
|
|
|
|
you will also need to install
|
|
|
|
[Visual C++ Redistributable for Visual Studio 2012 Update 4][redist-2012]
|
|
|
|
and [Visual C++ Redistributable for Visual Studio 2015][redist-2015].
|
|
|
|
|
|
|
|
The version of .NET CLI is very important, you want a recent build of
|
|
|
|
1.0.0 (**not** 1.0.1).
|
|
|
|
|
|
|
|
Previous installations of DNX, `dnvm`, or older installations of .NET
|
|
|
|
CLI can cause odd failures when running. Please check your version.
|
|
|
|
|
|
|
|
[dotnet-cli]: https://github.com/dotnet/cli#new-to-net-cli
|
|
|
|
[cli-docs]: https://dotnet.github.io/getting-started/
|
|
|
|
[redist-2012]: https://www.microsoft.com/en-us/download/confirmation.aspx?id=30679
|
|
|
|
[redist-2015]: https://www.microsoft.com/en-us/download/details.aspx?id=48145
|
|
|
|
|
|
|
|
Build using our module
|
|
|
|
======================
|
|
|
|
|
2016-05-18 22:58:59 +02:00
|
|
|
We maintain a [PowerShell module](../../build.psm1) with
|
2016-04-05 04:07:29 +02:00
|
|
|
the function `Start-PSBuild` to build PowerShell.
|
2016-03-30 23:54:49 +02:00
|
|
|
|
|
|
|
```powershell
|
2016-05-18 22:58:59 +02:00
|
|
|
Import-Module ./build.psm1
|
2016-03-30 23:54:49 +02:00
|
|
|
Start-PSBuild
|
|
|
|
```
|
|
|
|
|
|
|
|
Congratulations! If everything went right, PowerShell is now built and
|
2016-04-19 05:22:20 +02:00
|
|
|
executable as `./src/Microsoft.PowerShell.CoreConsoleHost/bin/Debug/netcoreapp1.0/win10-x64/powershell`.
|
2016-04-05 04:07:29 +02:00
|
|
|
|
|
|
|
This location is of the form
|
|
|
|
`./[project]/bin/[configuration]/[framework]/[rid]/[binary name]`, and
|
2016-04-08 19:59:41 +02:00
|
|
|
our project is `Microsoft.PowerShell.CoreConsoleHost`, configuration is `Debug`
|
2016-04-19 05:22:20 +02:00
|
|
|
by default, framework is `netcoreapp1.0`, runtime identifier is
|
2016-04-05 04:07:29 +02:00
|
|
|
**probably** `win10-x64` (but will depend on your operating system;
|
|
|
|
don't worry, `dotnet --info` will tell you what it was), and binary
|
|
|
|
name is `powershell`. The function `Get-PSOutput` will return the path
|
|
|
|
to the executable; thus you can execute the development copy via `&
|
|
|
|
(Get-PSOutput)`.
|
|
|
|
|
2016-04-08 19:59:41 +02:00
|
|
|
The `Microsoft.PowerShell.CoreConsoleHost` project is the cross-platform host for
|
2016-04-05 04:07:29 +02:00
|
|
|
PowerShell targetting .NET Core. It is the top level project, so
|
|
|
|
`dotnet build` transitively builds all its dependencies, and emits a
|
|
|
|
`powershell` executable. The cross-platform host has built-in
|
|
|
|
documentation via `--help`.
|
|
|
|
|
|
|
|
You can run our cross-platform Pester tests with `Start-PSPester`.
|