commit
9ad725faa2
|
@ -1,17 +1,15 @@
|
|||
Building a C# Cmdlet
|
||||
====================
|
||||
|
||||
This example project demonstrates how to build your own C# cmdlet for
|
||||
PowerShell. When built in the following manner, the resulting DLL can be
|
||||
imported everywhere: Windows PowerShell with Desktop .NET (FullCLR) and Open
|
||||
PowerShell on Windows, Linux, and OS X with .NET Core (CoreCLR).
|
||||
This example project demonstrates how to build your own C# cmdlet for PowerShell.
|
||||
When built in the following manner, the resulting DLL can be imported everywhere:
|
||||
Windows PowerShell with Desktop .NET (FullCLR) and PowerShell on Windows, Linux, and OS X with .NET Core (CoreCLR).
|
||||
|
||||
Setup
|
||||
-----
|
||||
|
||||
We use the [.NET Command Line Interface][dotnet-cli] (`dotnet`) to build the
|
||||
cmdlet library. Install the `dotnet` tool and ensure `dotnet --version` is at
|
||||
least `1.0.0-rc2`.
|
||||
We use the [.NET Command-Line Interface][dotnet-cli] (`dotnet`) to build the cmdlet library.
|
||||
Install the `dotnet` tool and ensure `dotnet --version` is at least `1.0.0-rc2`.
|
||||
|
||||
.NET CLI uses a `project.json` file for build specifications:
|
||||
|
||||
|
@ -37,42 +35,37 @@ least `1.0.0-rc2`.
|
|||
}
|
||||
```
|
||||
|
||||
Note that no source files are specified. .NET CLI automatically will build all
|
||||
`.cs` files in the project directory.
|
||||
Note that no source files are specified.
|
||||
.NET CLI automatically will build all `.cs` files in the project directory.
|
||||
|
||||
Going through this step-by-step:
|
||||
|
||||
- `"name": "SendGreeting"`: Name of the assembly to output (otherwise it
|
||||
defaults to the name of the containing folder).
|
||||
- `"name": "SendGreeting"`: Name of the assembly to output (otherwise it defaults to the name of the containing folder).
|
||||
|
||||
- `"version": "1.0.0-*"`: The wild-card can be replaced using the
|
||||
`--version-suffix` flag to `dotnet build`.
|
||||
- `"version": "1.0.0-*"`: The wild-card can be replaced using the `--version-suffix` flag to `dotnet build`.
|
||||
|
||||
- [Microsoft.PowerShell.5.ReferenceAssemblies][powershell]: Contains the SDK
|
||||
reference assemblies for PowerShell version 5. Targets the `net40` framework.
|
||||
- [Microsoft.PowerShell.5.ReferenceAssemblies][powershell]: Contains the SDK reference assemblies for PowerShell version 5.
|
||||
Targets the `net40` framework.
|
||||
|
||||
- [netstandard1.3][]: The target framework for .NET Core portable libraries.
|
||||
This is an abstract framework that will work anywhere its dependencies work.
|
||||
Specifically, the 1.3 version allows this assembly to work even on Windows
|
||||
PowerShell with Desktop .NET.
|
||||
Specifically, the 1.3 version allows this assembly to work even on Windows PowerShell with Desktop .NET.
|
||||
|
||||
- `"imports": [ "net4" ]`: Since the PowerShell reference assemblies target the
|
||||
older `net40` framework, we `import` it here to tell `dotnet restore` that we
|
||||
know we're loading a possibly-incompatible package.
|
||||
- `"imports": [ "net4" ]`: Since the PowerShell reference assemblies target the older `net40` framework,
|
||||
we `import` it here to tell `dotnet restore` that we know we're loading a possibly-incompatible package.
|
||||
|
||||
- [Microsoft.NETCore][netcore]: Provides a set of packages that can be used when
|
||||
building portable libraries on .NETCore based platforms.
|
||||
- [Microsoft.NETCore][netcore]: Provides a set of packages that can be used when building portable
|
||||
libraries on .NETCore-based platforms.
|
||||
|
||||
- [Microsoft.NETCore.Portable.Compatibility][portable]: Enables compatibility
|
||||
with portable libraries targeting previous .NET releases like .NET Framework
|
||||
4.0. Required to build against the PowerShell reference assemblies package.
|
||||
with portable libraries targeting previous .NET releases like .NET Framework 4.0.
|
||||
Required to build against the PowerShell reference assemblies package.
|
||||
|
||||
Other dependencies can be added as needed; refer to the
|
||||
[.NET Core package gallery][myget] for package availability, name, and version
|
||||
information.
|
||||
Other dependencies can be added as needed;
|
||||
refer to the [.NET Core package gallery][myget] for package availability, name, and version information.
|
||||
|
||||
Because the .NET Core packages are not yet released to NuGet.org, you also need
|
||||
this `NuGet.config` file to setup the [.NET Core MyGet feed][myget]:
|
||||
Because the .NET Core packages are not yet released to NuGet.org,
|
||||
you also need this `NuGet.config` file to setup the [.NET Core MyGet feed][myget]:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
@ -95,16 +88,14 @@ this `NuGet.config` file to setup the [.NET Core MyGet feed][myget]:
|
|||
Building
|
||||
--------
|
||||
|
||||
.NET Core is a package-based platform, so the correct dependencies first need to
|
||||
be resolved:
|
||||
.NET Core is a package-based platform, so the correct dependencies first need to be resolved:
|
||||
|
||||
```
|
||||
dotnet restore
|
||||
```
|
||||
|
||||
This reads the `project.json` and `NuGet.config` files and uses NuGet to restore
|
||||
the necessary packages. The generated `project.lock.json` lockfile contains the
|
||||
resolved dependency graph.
|
||||
This reads the `project.json` and `NuGet.config` files and uses NuGet to restore the necessary packages.
|
||||
The generated `project.lock.json` lockfile contains the resolved dependency graph.
|
||||
|
||||
Once packages are restored, building is simple:
|
||||
|
||||
|
@ -114,8 +105,7 @@ dotnet build
|
|||
|
||||
This will produce the assembly `./bin/Debug/netstandard1.3/SendGreeting.dll`.
|
||||
|
||||
This build/restore process should work anywhere .NET Core works, including
|
||||
Windows, Linux, and OS X.
|
||||
This build/restore process should work anywhere .NET Core works, including Windows, Linux, and OS X.
|
||||
|
||||
Deployment
|
||||
----------
|
||||
|
|
Loading…
Reference in a new issue