Using Paket from F# Interactive
This page demonstrates how to use Paket from the F# Interactive.
Reference Paket.Core
As first step we need to reference Paket.Core, the library the Paket .NET tool
is built on. It targets net10.0, so the script needs the F# Interactive of the
.NET 10 SDK or later (dotnet fsi).
open System
open System.IO
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
#r "nuget: Paket.Core"
Configure which paket.dependencies file to use
Now we need open the Paket namespace and to tell Paket which
paket.dependencies file to use.
open Paket
// Locate the paket.dependencies file.
let dependencies = Dependencies.Locate(__SOURCE_DIRECTORY__)
found: paket.dependencies
Adding and removing NuGet packages
Paket allows to install and uninstall NuGet packages programmatically:
// Install a package.
dependencies.Add "FSharp.Data"
// Check which version is installed.
dependencies.GetInstalledVersion "FSharp.Data"
val it : string option = Some "2.1.0"
// Remove a package.
dependencies.Remove "FSharp.Data"
// Check again which version is installed.
dependencies.GetInstalledVersion "FSharp.Data"
val it : string option = None
Query the install model
It's possible to do queries against the installed NuGet packages:
// Install some packages.
dependencies.Add "FSharp.Data"
dependencies.Add "FSharp.Formatting"
dependencies.Add "FsUnit"
// List all installed packages.
dependencies.GetInstalledPackages()
val it : (string * string * string) list =
[("Main", "FSharp.Compiler.Service", "0.0.67"); ("Main", "FSharp.Data", "2.1.0");
("Main", "FSharp.Formatting", "2.4.36"); ("Main", "FsUnit", "1.3.0.1");
("Main", "Microsoft.AspNet.Razor", "2.0.30506.0"); ("Main", "NUnit", "2.6.3");
("Main", "RazorEngine", "3.3.0"); ("Main", "Zlib.Portable", "1.10.0")]
// List only the direct dependencies.
dependencies.GetDirectDependencies()
val it : (string * string * string) list =
[("Main", "FSharp.Data", "2.1.0"); ("Main", "FSharp.Formatting", "2.4.36");
("Main", "FsUnit", "1.3.0.1")]
// List direct dependencies for the given package.
dependencies.GetDirectDependenciesForPackage(Domain.GroupName "Main", "FSharp.Compiler.Service")
val it : (string * string * string) list =
...
// List all usages of a package in Paket.
let paketDependencies = Dependencies.Locate(System.IO.Path.Combine(__SOURCE_DIRECTORY__,".."))
found: D:\code\Paket\paket.dependencies
paketDependencies.FindReferencesFor "UnionArgParser"
val it : string list = ["D:\code\Paket\src\Paket\Paket.fsproj"]
namespace System
namespace System.IO
type Environment =
static member Exit: exitCode: int -> unit
static member ExpandEnvironmentVariables: name: string -> string
static member FailFast: message: string -> unit + 1 overload
static member GetCommandLineArgs: unit -> string array
static member GetEnvironmentVariable: variable: string -> string + 1 overload
static member GetEnvironmentVariables: unit -> IDictionary + 1 overload
static member GetFolderPath: folder: SpecialFolder -> string + 1 overload
static member GetLogicalDrives: unit -> string array
static member SetEnvironmentVariable: variable: string * value: string -> unit + 1 overload
static member CommandLine: string
...
<summary>Provides information about, and means to manipulate, the current environment and platform. This class cannot be inherited.</summary>
<summary>Provides information about, and means to manipulate, the current environment and platform. This class cannot be inherited.</summary>
property Environment.CurrentDirectory: string with get, set
<summary>Gets or sets the fully qualified path of the current working directory.</summary>
<exception cref="T:System.ArgumentException">Attempted to set to an empty string ("").</exception>
<exception cref="T:System.ArgumentNullException">Attempted to set to <see langword="null" />.</exception>
<exception cref="T:System.IO.IOException">An I/O error occurred.</exception>
<exception cref="T:System.IO.DirectoryNotFoundException">Attempted to set a local path that cannot be found.</exception>
<exception cref="T:System.Security.SecurityException">The caller does not have the appropriate permission.</exception>
<returns>The directory path.</returns>
<summary>Gets or sets the fully qualified path of the current working directory.</summary>
<exception cref="T:System.ArgumentException">Attempted to set to an empty string ("").</exception>
<exception cref="T:System.ArgumentNullException">Attempted to set to <see langword="null" />.</exception>
<exception cref="T:System.IO.IOException">An I/O error occurred.</exception>
<exception cref="T:System.IO.DirectoryNotFoundException">Attempted to set a local path that cannot be found.</exception>
<exception cref="T:System.Security.SecurityException">The caller does not have the appropriate permission.</exception>
<returns>The directory path.</returns>
namespace Paket
val dependencies: Dependencies
Multiple items
type Dependencies = new: dependenciesFileName: string -> Dependencies member Add: groupName: string option * package: string -> unit + 5 overloads member AddCredentials: source: string * username: string * password: string * authType: string -> unit + 1 overload member AddGit: groupName: string option * repository: string -> unit + 2 overloads member AddGithub: groupName: string option * repository: string * file: string -> unit + 2 overloads member AddToProject: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * projectName: string * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool -> unit + 2 overloads member AddToken: source: string * token: string -> unit member DownloadLatestBootstrapper: unit -> unit member FindOutdated: strict: bool * force: bool * includePrereleases: bool * groupName: Option<string> -> (string * string * SemVerInfo) list member FindProjectsFor: group: string * package: string -> ProjectFile list ...
<summary> Paket API which is optimized for F# Interactive use. </summary>
--------------------
new: dependenciesFileName: string -> Dependencies
type Dependencies = new: dependenciesFileName: string -> Dependencies member Add: groupName: string option * package: string -> unit + 5 overloads member AddCredentials: source: string * username: string * password: string * authType: string -> unit + 1 overload member AddGit: groupName: string option * repository: string -> unit + 2 overloads member AddGithub: groupName: string option * repository: string * file: string -> unit + 2 overloads member AddToProject: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * projectName: string * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool -> unit + 2 overloads member AddToken: source: string * token: string -> unit member DownloadLatestBootstrapper: unit -> unit member FindOutdated: strict: bool * force: bool * includePrereleases: bool * groupName: Option<string> -> (string * string * SemVerInfo) list member FindProjectsFor: group: string * package: string -> ProjectFile list ...
<summary> Paket API which is optimized for F# Interactive use. </summary>
--------------------
new: dependenciesFileName: string -> Dependencies
static member Dependencies.Locate: unit -> Dependencies
static member Dependencies.Locate: path: string -> Dependencies
static member Dependencies.Locate: path: string -> Dependencies
member Dependencies.Add: package: string -> unit
member Dependencies.Add: groupName: string option * package: string -> unit
member Dependencies.Add: groupName: string option * package: string * version: string -> unit
member Dependencies.Add: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * interactive: bool * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool -> unit
member Dependencies.Add: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * interactive: bool * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool * runResolver: bool -> unit
member Dependencies.Add: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * interactive: bool * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool * runResolver: bool * packageKind: Requirements.PackageRequirementKind -> unit
member Dependencies.Add: groupName: string option * package: string -> unit
member Dependencies.Add: groupName: string option * package: string * version: string -> unit
member Dependencies.Add: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * interactive: bool * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool -> unit
member Dependencies.Add: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * interactive: bool * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool * runResolver: bool -> unit
member Dependencies.Add: groupName: string option * package: string * version: string * force: bool * withBindingRedirects: bool * cleanBindingRedirects: bool * createNewBindingFiles: bool * interactive: bool * installAfter: bool * semVerUpdateMode: SemVerUpdateMode * touchAffectedRefs: bool * runResolver: bool * packageKind: Requirements.PackageRequirementKind -> unit
member Dependencies.GetInstalledVersion: packageName: string -> string option
member Dependencies.GetInstalledVersion: groupName: string option * packageName: string -> string option
member Dependencies.GetInstalledVersion: groupName: string option * packageName: string -> string option
member Dependencies.Remove: package: string -> unit
member Dependencies.Remove: groupName: string option * package: string -> unit
member Dependencies.Remove: groupName: string option * package: string * force: bool * interactive: bool * installAfter: bool -> unit
member Dependencies.Remove: groupName: string option * package: string -> unit
member Dependencies.Remove: groupName: string option * package: string * force: bool * interactive: bool * installAfter: bool -> unit
member Dependencies.GetInstalledPackages: unit -> (string * string * string) list
member Dependencies.GetInstalledPackages: referencesFile: ReferencesFile -> (string * string * string) list
member Dependencies.GetInstalledPackages: referencesFile: ReferencesFile -> (string * string * string) list
member Dependencies.GetDirectDependencies: unit -> (string * string * string) list
member Dependencies.GetDirectDependencies: referencesFile: ReferencesFile -> (string * string * string) list
member Dependencies.GetDirectDependencies: referencesFile: ReferencesFile -> (string * string * string) list
member Dependencies.GetDirectDependenciesForPackage: groupName: Domain.GroupName * packageName: string -> (string * string * string) list
module Domain
from Paket
Multiple items
val GroupName: name: string -> Domain.GroupName
<summary> Function to convert a string into a group name </summary>
--------------------
union case Domain.GroupName.GroupName: name: string * compareString: string -> Domain.GroupName
--------------------
type GroupName = | GroupName of name: string * compareString: string interface IComparable override Equals: that: obj -> bool override GetHashCode: unit -> int override ToString: unit -> string member CompareString: string member Name: string
<summary> Represents a normalized group name </summary>
val GroupName: name: string -> Domain.GroupName
<summary> Function to convert a string into a group name </summary>
--------------------
union case Domain.GroupName.GroupName: name: string * compareString: string -> Domain.GroupName
--------------------
type GroupName = | GroupName of name: string * compareString: string interface IComparable override Equals: that: obj -> bool override GetHashCode: unit -> int override ToString: unit -> string member CompareString: string member Name: string
<summary> Represents a normalized group name </summary>
val paketDependencies: Dependencies
type Path =
static member ChangeExtension: path: string * extension: string -> string
static member Combine: path1: string * path2: string -> string + 4 overloads
static member EndsInDirectorySeparator: path: ReadOnlySpan<char> -> bool + 1 overload
static member Exists: path: string -> bool
static member GetDirectoryName: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetExtension: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetFileName: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetFileNameWithoutExtension: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetFullPath: path: string -> string + 1 overload
static member GetInvalidFileNameChars: unit -> char array
...
<summary>Performs operations on <see cref="T:System.String" /> instances that contain file or directory path information. These operations are performed in a cross-platform manner.</summary>
<summary>Performs operations on <see cref="T:System.String" /> instances that contain file or directory path information. These operations are performed in a cross-platform manner.</summary>
Path.Combine(paths: ReadOnlySpan<string>) : string
Path.Combine( paths: string array) : string
Path.Combine(path1: string, path2: string) : string
Path.Combine(path1: string, path2: string, path3: string) : string
Path.Combine(path1: string, path2: string, path3: string, path4: string) : string
Path.Combine( paths: string array) : string
Path.Combine(path1: string, path2: string) : string
Path.Combine(path1: string, path2: string, path3: string) : string
Path.Combine(path1: string, path2: string, path3: string, path4: string) : string
member Dependencies.FindReferencesFor: package: string -> string list
member Dependencies.FindReferencesFor: group: string * package: string -> string list
member Dependencies.FindReferencesFor: group: string * package: string -> string list
Paket