PowerShell/docs/host-powershell/README.md

48 lines
2.2 KiB
Markdown
Raw Normal View History

# Host PowerShell Core in .NET Core Applications
## PowerShell Core v6.0.1 and Later
The runtime assemblies for Windows, Linux and OSX are now published in NuGet package version 6.*.
Please see the [.NET Core Sample Application](#net-core-sample-application) section for an example that uses PowerShell Core NuGet packages.
## .NET Core Sample Application
Note: The .NET Core `2.1` runtime and .NET Core SDK `2.1` or higher is required for the examples below:
- [sample](./sample)
You can find the sample application project `MyApp` in each of the above 2 sample folders. You can quickly test-run it using `dotnet run`.
To build the sample project properly for distribution, run the following command (make sure the required .NET Core SDK is in use):
```powershell
dotnet publish .\MyApp --configuration release
```
This builds it for the runtimes specified by the `RuntimeIdentifiers` property in the `.csproj` file.
Then you can run the `MyApp` binary from the publish folder and see the results:
```none
PS:> .\MyApp.exe
Evaluating 'Get-Command Write-Output' in PS Core Runspace
Write-Output
Evaluating '([S.M.A.ActionPreference], [S.M.A.AliasAttribute]).FullName' in PS Core Runspace
System.Management.Automation.ActionPreference
System.Management.Automation.AliasAttribute
```
## Special Hosting Scenario For Native Host
There is a special hosting scenario for native hosts,
where Trusted Platform Assemblies (TPA) do not include PowerShell assemblies,
such as the in-box `powershell.exe` in Nano Server and the Azure DSC host.
For such hosting scenarios, the native host needs to bootstrap by calling [`PowerShellAssemblyLoadContextInitializer.SetPowerShellAssemblyLoadContext`](https://docs.microsoft.com/dotnet/api/system.management.automation.powershellassemblyloadcontextinitializer.setpowershellassemblyloadcontext).
When using this API, the native host can pass in the path to the directory that contains PowerShell assemblies.
A handler will then be registered to the [`Resolving`](https://github.com/dotnet/corefx/blob/d6678e9653defe3cdfff26b2ff62135b6b22c77f/src/System.Runtime.Loader/ref/System.Runtime.Loader.cs#L38)
event of the default load context to deal with the loading of assemblies from that directory.