Instead of using `dotnet publish`, we can use `dotnet build` and the new `netcoreapp1.0` framework with a new dependency on `Microsoft.NETCore.App` to generate output that does not include the runtime, but can be run anywhere (given the installation of the runtime). While we cannot yet adopt a dependency on the shared host until .NET Core RTM, we are forced to switch to this system anyway because the latest RC3 packages and CLI do not support `netstandardapp1.5`. See dotnet/cli#2482. Thus we're in an in-between state where we have to use `netcoreapp1.0`, but cannot use `"Microsoft.NETCore.App": { "type": "platform" }` to utilize the shared host, as we need to continue to ship our host. Without specifying "platform", we retain the status quo with respect to build steps and outputs. Additionally, there is no longer a good reason to use the RC3 packages, and it has been advised we switch to RC2 since the `Microsoft.NETCore.App` is only available for RC2. We must update packages because our current version can no longer be debugged.
93 lines
3.3 KiB
Markdown
93 lines
3.3 KiB
Markdown
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.
|
|
|
|
Git Setup
|
|
---------
|
|
|
|
Using Git requires it to be setup correctly; refer to the
|
|
[README](../../README.md) and
|
|
[Contributing Guidelines](../../.github/CONTRIBUTING.md).
|
|
|
|
This guide assumes that you have recursively cloned the PowerShell
|
|
repository and `cd`ed into it.
|
|
|
|
.NET CLI
|
|
--------
|
|
|
|
We use the [.NET Command Line Interface][dotnet-cli] (`dotnet`) to
|
|
build PowerShell. The `Start-PSBootstrap` function will automatically
|
|
install it and add it to your path:
|
|
|
|
```powershell
|
|
Import-Module ./PowerShellGitHubDev.psm1
|
|
Start-PSBootstrap
|
|
```
|
|
|
|
The `Start-PSBootstrap` function itself does exactly this:
|
|
|
|
```powershell
|
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/install.ps1 -OutFile install.ps1
|
|
./install.ps1
|
|
```
|
|
|
|
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
|
|
======================
|
|
|
|
We maintain a [PowerShell module](../../PowerShellGitHubDev.psm1) with
|
|
the function `Start-PSBuild` to build PowerShell.
|
|
|
|
```powershell
|
|
Import-Module ./PowerShellGitHubDev.psm1
|
|
Start-PSBuild
|
|
```
|
|
|
|
Congratulations! If everything went right, PowerShell is now built and
|
|
executable as `./src/Microsoft.PowerShell.CoreConsoleHost/bin/Debug/netcoreapp1.0/win10-x64/powershell`.
|
|
|
|
This location is of the form
|
|
`./[project]/bin/[configuration]/[framework]/[rid]/[binary name]`, and
|
|
our project is `Microsoft.PowerShell.CoreConsoleHost`, configuration is `Debug`
|
|
by default, framework is `netcoreapp1.0`, runtime identifier is
|
|
**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)`.
|
|
|
|
The `Microsoft.PowerShell.CoreConsoleHost` project is the cross-platform host for
|
|
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`.
|