Merge pull request #235041 from mdarocha/dotnet-tools

This commit is contained in:
Guillaume Maudoux
2023-06-20 22:43:11 +02:00
committed by GitHub
12 changed files with 416 additions and 27 deletions
@@ -109,6 +109,8 @@ To package Dotnet applications, you can use `buildDotnetModule`. This has simila
* `runtimeDeps` is used to wrap libraries into `LD_LIBRARY_PATH`. This is how dotnet usually handles runtime dependencies.
* `buildType` is used to change the type of build. Possible values are `Release`, `Debug`, etc. By default, this is set to `Release`.
* `selfContainedBuild` allows to enable the [self-contained](https://docs.microsoft.com/en-us/dotnet/core/deploying/#publish-self-contained) build flag. By default, it is set to false and generated applications have a dependency on the selected dotnet runtime. If enabled, the dotnet runtime is bundled into the executable and the built app has no dependency on Dotnet.
* `useAppHost` will enable creation of a binary executable that runs the .NET application using the specified root. More info in [Microsoft docs](https://learn.microsoft.com/en-us/dotnet/core/deploying/#publish-framework-dependent). Enabled by default.
* `useDotnetFromEnv` will change the binary wrapper so that it uses the .NET from the environment. The runtime specified by `dotnet-runtime` is given as a fallback in case no .NET is installed in the user's environment. This is most useful for .NET global tools and LSP servers, which often extend the .NET CLI and their runtime should match the users' .NET runtime.
* `dotnet-sdk` is useful in cases where you need to change what dotnet SDK is being used. You can also set this to the result of `dotnetSdkPackages.combinePackages`, if the project uses multiple SDKs to build.
* `dotnet-runtime` is useful in cases where you need to change what dotnet runtime is being used. This can be either a regular dotnet runtime, or an aspnetcore.
* `dotnet-test-sdk` is useful in cases where unit tests expect a different dotnet SDK. By default, this is set to the `dotnet-sdk` attribute.
@@ -151,3 +153,60 @@ in buildDotnetModule rec {
runtimeDeps = [ ffmpeg ]; # This will wrap ffmpeg's library path into `LD_LIBRARY_PATH`.
}
```
## Dotnet global tools {#dotnet-global-tools}
[.NET Global tools](https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools) are a mechanism provided by the dotnet CLI to install .NET binaries from Nuget packages.
They can be installed either as a global tool for the entire system, or as a local tool specific to project.
The local installation is the easiest and works on NixOS in the same way as on other Linux distributions.
[See dotnet documention](https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools#install-a-local-tool) to learn more.
[The global installation method](https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools#install-a-global-tool)
should also work most of the time. You have to remember to update the `PATH`
value to the location the tools are installed to (the CLI will inform you about it during installation) and also set
the `DOTNET_ROOT` value, so that the tool can find the .NET SDK package.
You can find the path to the SDK by running `nix eval --raw nixpkgs#dotnet-sdk` (substitute the `dotnet-sdk` package for
another if a different SDK version is needed).
This method is not recommended on NixOS, since it's not declarative and involves installing binaries not made for NixOS,
which will not always work.
The third, and preferred way, is packaging the tool into a Nix derivation.
### Packaging Dotnet global tools {#packaging-dotnet-global-tools}
Dotnet global tools are standard .NET binaries, just made available through a special
NuGet package. Therefore, they can be built and packaged like every .NET application,
using `buildDotnetModule`.
If however the source is not available or difficult to build, the
`buildDotnetGlobalTool` helper can be used, which will package the tool
straight from its NuGet package.
This helper has the same arguments as `buildDotnetModule`, with a few differences:
* `pname` and `version` are required, and will be used to find the NuGet package of the tool
* `nugetName` can be used to override the NuGet package name that will be downloaded, if it's different from `pname`
* `nugetSha256` is the hash of the fetched NuGet package. Set this to `lib.fakeHash256` for the first build, and it will error out, giving you the proper hash. Also remember to update it during version updates (it will not error out if you just change the version while having a fetched package in `/nix/store`)
* `dotnet-runtime` is set to `dotnet-sdk` by default. When changing this, remember that .NET tools fetched from NuGet require an SDK.
Here is an example of packaging `pbm`, an unfree binary without source available:
```nix
{ buildDotnetGlobalTool, lib }:
buildDotnetGlobalTool {
pname = "pbm";
version = "1.3.1";
nugetSha256 = "sha256-ZG2HFyKYhVNVYd2kRlkbAjZJq88OADe3yjxmLuxXDUo=";
meta = with lib; {
homepage = "https://cmd.petabridge.com/index.html";
changelog = "https://cmd.petabridge.com/articles/RELEASE_NOTES.html";
license = licenses.unfree;
platforms = platforms.linux;
};
}
```
@@ -0,0 +1,48 @@
{ buildDotnetModule, emptyDirectory, mkNugetDeps, dotnet-sdk }:
{ pname
, version
# Name of the nuget package to install, if different from pname
, nugetName ? pname
# Hash of the nuget package to install, will be given on first build
, nugetSha256 ? ""
# Additional nuget deps needed by the tool package
, nugetDeps ? (_: [])
# Executables to wrap into `$out/bin`, same as in `buildDotnetModule`, but with
# a default of `pname` instead of null, to avoid auto-wrapping everything
, executables ? pname
# The dotnet runtime to use, dotnet tools need a full SDK to function
, dotnet-runtime ? dotnet-sdk
, ...
} @ args:
buildDotnetModule (args // {
inherit pname version dotnet-runtime executables;
src = emptyDirectory;
nugetDeps = mkNugetDeps {
name = pname;
nugetDeps = { fetchNuGet }: [
(fetchNuGet { pname = nugetName; inherit version; sha256 = nugetSha256; })
] ++ (nugetDeps fetchNuGet);
};
projectFile = "";
useDotnetFromEnv = true;
dontBuld = true;
installPhase = ''
runHook preInstall
dotnet tool install --tool-path $out/lib/${pname} ${nugetName}
# remove files that contain nix store paths to temp nuget sources we made
find $out -name 'project.assets.json' -delete
find $out -name '.nupkg.metadata' -delete
runHook postInstall
'';
})
@@ -12,6 +12,7 @@
, nuget-to-nix
, cacert
, coreutils
, runtimeShellPackage
}:
{ name ? "${args.pname}-${args.version}"
@@ -74,7 +75,10 @@
, buildType ? "Release"
# If set to true, builds the application as a self-contained - removing the runtime dependency on dotnet
, selfContainedBuild ? false
# Whether to explicitly enable UseAppHost when building
# Whether to use an alternative wrapper, that executes the application DLL using the dotnet runtime from the user environment. `dotnet-runtime` is provided as a default in case no .NET is installed
# This is useful for .NET tools and applications that may need to run under different .NET runtimes
, useDotnetFromEnv ? false
# Whether to explicitly enable UseAppHost when building. This is redundant if useDotnetFromEnv is enabledz
, useAppHost ? true
# The dotnet SDK to use.
, dotnet-sdk ? dotnetCorePackages.sdk_6_0
@@ -158,7 +162,7 @@ stdenvNoCC.mkDerivation (args // {
# gappsWrapperArgs gets included when wrapping for dotnet, as to avoid double wrapping
dontWrapGApps = args.dontWrapGApps or true;
inherit selfContainedBuild useAppHost;
inherit selfContainedBuild useAppHost useDotnetFromEnv;
passthru = {
inherit nuget-source;
@@ -183,7 +187,7 @@ stdenvNoCC.mkDerivation (args // {
writeShellScript "fetch-${pname}-deps" ''
set -euo pipefail
export PATH="${lib.makeBinPath [ coreutils dotnet-sdk (nuget-to-nix.override { inherit dotnet-sdk; }) ]}"
export PATH="${lib.makeBinPath [ coreutils runtimeShellPackage dotnet-sdk (nuget-to-nix.override { inherit dotnet-sdk; }) ]}"
for arg in "$@"; do
case "$arg" in
@@ -262,7 +266,7 @@ stdenvNoCC.mkDerivation (args // {
echo "Restoring project..."
${dotnet-sdk}/bin/dotnet tool restore
mv $HOME/.nuget/packages/* $tmp/nuget_pkgs || true
cp -r $HOME/.nuget/packages/* $tmp/nuget_pkgs || true
for rid in "${lib.concatStringsSep "\" \"" runtimeIds}"; do
(( ''${#projectFiles[@]} == 0 )) && dotnetRestore "" "$rid"
@@ -271,6 +275,8 @@ stdenvNoCC.mkDerivation (args // {
dotnetRestore "$project" "$rid"
done
done
# Second copy, makes sure packages restored by ie. paket are included
cp -r $HOME/.nuget/packages/* $tmp/nuget_pkgs || true
echo "Succesfully restored project"
@@ -1,4 +1,7 @@
{ lib
, stdenv
, which
, coreutils
, callPackage
, makeSetupHook
, makeWrapper
@@ -67,6 +70,9 @@ in
substitutions = {
dotnetRuntime = dotnet-runtime;
runtimeDeps = libraryPath;
shell = stdenv.shell;
which = "${which}/bin/which";
dirname = "${coreutils}/bin/dirname";
};
} ./dotnet-fixup-hook.sh) { };
}
@@ -25,8 +25,6 @@ dotnetConfigureHook() {
${dotnetFlags[@]}
}
(( "${#projectFile[@]}" == 0 )) && dotnetRestore
# Generate a NuGet.config file to make sure everything,
# including things like <Sdk /> dependencies, is restored from the proper source
cat <<EOF > "./NuGet.config"
@@ -39,8 +37,16 @@ cat <<EOF > "./NuGet.config"
</configuration>
EOF
# Patch paket.dependencies and paket.lock (if found) to use the proper source. This ensures
# paket restore works correctly
# We use + instead of / in sed to avoid problems with slashes
find -name paket.dependencies -exec sed -i 's+source .*+source @nugetSource@/lib+g' {} \;
find -name paket.lock -exec sed -i 's+remote:.*+remote: @nugetSource@/lib+g' {} \;
env dotnet tool restore --add-source "@nugetSource@/lib"
(( "${#projectFile[@]}" == 0 )) && dotnetRestore
for project in ${projectFile[@]} ${testProjectFile[@]-}; do
dotnetRestore "$project"
done
@@ -5,13 +5,22 @@ makeWrapperArgs=( "${derivationMakeWrapperArgs[@]}" )
# First argument is the executable you want to wrap,
# the second is the destination for the wrapper.
wrapDotnetProgram() {
local dotnetRootFlags=()
if [ ! "${selfContainedBuild-}" ]; then
local -r dotnetRootFlag=("--set" "DOTNET_ROOT" "@dotnetRuntime@")
if [ "${useDotnetFromEnv-}" ]; then
# if dotnet CLI is available, set DOTNET_ROOT based on it. Otherwise set to default .NET runtime
dotnetRootFlags+=("--run" 'command -v dotnet &>/dev/null && export DOTNET_ROOT="$(@dirname@ "$(@dirname@ "$(@which@ dotnet)")")" || export DOTNET_ROOT="@dotnetRuntime@"')
dotnetRootFlags+=("--suffix" "PATH" ":" "@dotnetRuntime@/bin")
else
dotnetRootFlags+=("--set" "DOTNET_ROOT" "@dotnetRuntime@")
dotnetRootFlags+=("--prefix" "PATH" ":" "@dotnetRuntime@/bin")
fi
fi
makeWrapper "$1" "$2" \
--suffix "LD_LIBRARY_PATH" : "@runtimeDeps@" \
"${dotnetRootFlag[@]}" \
"${dotnetRootFlags[@]}" \
"${gappsWrapperArgs[@]}" \
"${makeWrapperArgs[@]}"
+17
View File
@@ -0,0 +1,17 @@
{ buildDotnetGlobalTool, lib }:
buildDotnetGlobalTool {
pname = "fable";
version = "4.1.4";
nugetSha256 = "sha256-9wMQj4+xmAprt80slet2wUW93fRyEhOhhNVGYbWGS3Y=";
meta = with lib; {
description = "Fable is an F# to JavaScript compiler";
homepage = "https://github.com/fable-compiler/fable";
changelog = "https://github.com/fable-compiler/fable/releases/tag/v${version}";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ anpin mdarocha ];
};
}
@@ -0,0 +1,45 @@
{ lib, buildDotnetModule, fetchFromGitHub, dotnetCorePackages, stdenv }:
let
inherit (dotnetCorePackages) combinePackages sdk_6_0 sdk_7_0;
in
buildDotnetModule rec {
pname = "fsautocomplete";
version = "0.60.0";
src = fetchFromGitHub {
owner = "fsharp";
repo = "FsAutoComplete";
rev = "v${version}";
sha256 = "sha256-9VFpERXZH6rOtPR4B2pOBOew5dGaouj+jgMKpbQKaek=";
};
nugetDeps = ./deps.nix;
postPatch = ''
rm global.json
substituteInPlace src/FsAutoComplete/FsAutoComplete.fsproj \
--replace TargetFrameworks TargetFramework \
'';
dotnet-sdk = combinePackages [
sdk_7_0
sdk_6_0
];
dotnet-runtime = sdk_6_0;
projectFile = "src/FsAutoComplete/FsAutoComplete.fsproj";
executables = [ "fsautocomplete" ];
useDotnetFromEnv = true;
meta = with lib; {
description = "The FsAutoComplete project (FSAC) provides a backend service for rich editing or intellisense features for editors.";
homepage = "https://github.com/fsharp/FsAutoComplete";
changelog = "https://github.com/fsharp/FsAutoComplete/releases/tag/v${version}";
license = licenses.asl20;
platforms = platforms.linux;
maintainers = with maintainers; [ gbtb mdarocha ];
};
}
+183
View File
@@ -0,0 +1,183 @@
# This file was automatically generated by passthru.fetch-deps.
# Please dont edit it manually, your changes might get overwritten!
{ fetchNuGet }: [
(fetchNuGet { pname = "altcover"; version = "8.3.838"; sha256 = "0l8b5rwpxxxqn6fj3irxx5lsl18wdm2nlg831lg9anyms91lfifn"; })
(fetchNuGet { pname = "BlackFox.VsWhere"; version = "1.1.0"; sha256 = "1brk2rv4yjdbyc4x1qhcmii6rjqsyk52galjxir5carzhr72jrs1"; })
(fetchNuGet { pname = "CliWrap"; version = "3.4.4"; sha256 = "1g67sbhqxfl15ilazj64jc0z60ig1x03p2d4jwk6iw64smkp24x8"; })
(fetchNuGet { pname = "Destructurama.FSharp"; version = "1.2.0"; sha256 = "0zbk88akz2k49zi5f62klz4h193zb4dfasjdcz4k4wr87chi06nv"; })
(fetchNuGet { pname = "DiffPlex"; version = "1.7.1"; sha256 = "1q78r70pirgb7j5wkh454ws237lihh0fig212cpbj02cz53c2h6j"; })
(fetchNuGet { pname = "dotnet-reportgenerator-globaltool"; version = "5.0.2"; sha256 = "0grzjd6h82f3whx8iax23v9dvq5c5qvqraadnrpkxsfc8p1z0ynh"; })
(fetchNuGet { pname = "DotNet.ReproducibleBuilds"; version = "1.1.1"; sha256 = "0wa0xwbwv1lzjmqwg1vq06vrpb9kkbv3xw5nq50savj0dzhqakzq"; })
(fetchNuGet { pname = "Expecto"; version = "9.0.4"; sha256 = "0wvxd5blm70k40kn5gzfp65wzzpp2bwf5lpagb73wqjna97fcrkg"; })
(fetchNuGet { pname = "Expecto.Diff"; version = "9.0.4"; sha256 = "06g6nbr5kdr7hyayh24ry6xfghxpcfkqc8kma5qa5lcvhmy56f7j"; })
(fetchNuGet { pname = "fake-cli"; version = "5.23.0"; sha256 = "1bmw5kyc9q1sqd08pamibgk0qm5xwylawc5nfrnfx3pl1pifd71y"; })
(fetchNuGet { pname = "Fake.Api.GitHub"; version = "5.20.4"; sha256 = "1hgzqin7bm5fm0n97w7s9cq3zcxyncjmd6xk2da3p12wi7kghx0v"; })
(fetchNuGet { pname = "Fake.Core.CommandLineParsing"; version = "5.23.1"; sha256 = "10zlkri6w2xly19v4qqvg9vii5mjwbjqfynn525swzwyna9jws76"; })
(fetchNuGet { pname = "Fake.Core.Context"; version = "5.23.1"; sha256 = "1z3a77d53f5084sai9r9w9cdnyp4xn3x0262nhsi0znx52vizppl"; })
(fetchNuGet { pname = "Fake.Core.Environment"; version = "5.23.1"; sha256 = "1cm25clxmpl66fg7bjggi4cziz99f7b9pym7528y94bmpskl3gra"; })
(fetchNuGet { pname = "Fake.Core.FakeVar"; version = "5.23.1"; sha256 = "11hap2xxz1kw3b16mkxlq0gigfg6k7dacq9l9pxc8jlkpq03pwd9"; })
(fetchNuGet { pname = "Fake.Core.Process"; version = "5.23.1"; sha256 = "0gpj6bi53hfkwxc7995fz9p1diq57azsl8znwj3cpc751phvg3dh"; })
(fetchNuGet { pname = "Fake.Core.ReleaseNotes"; version = "5.23.1"; sha256 = "1sxmpl2vp29s276vf8b7l7mxy7vsc8rsnbq5xzg97xgwi2s2k3wd"; })
(fetchNuGet { pname = "Fake.Core.SemVer"; version = "5.23.1"; sha256 = "0d94hwwmwqcl754wss35x61vbhpgry6gc5sj5ipva9kqhsp3d9a8"; })
(fetchNuGet { pname = "Fake.Core.String"; version = "5.23.1"; sha256 = "1znk6wzizkbslx8hfbpbr63sg05ilr9nr3vvxirxkmh37gkpwyb7"; })
(fetchNuGet { pname = "Fake.Core.Target"; version = "5.23.1"; sha256 = "1l51jlqab23yx3nfh46m3xblaqsfdh9sxsn457plxsf705vj9rgj"; })
(fetchNuGet { pname = "Fake.Core.Tasks"; version = "5.23.1"; sha256 = "1r6b6jma13z2075xpd69nai1wdzgkgbz6vnqbwr476gvlcfy6msl"; })
(fetchNuGet { pname = "Fake.Core.Trace"; version = "5.23.1"; sha256 = "0ji56f3w2g50rvq57xqcg7b3dcqgba71p9xihq06329bisk4pxca"; })
(fetchNuGet { pname = "Fake.Core.UserInput"; version = "5.23.1"; sha256 = "1anrmaxipyjbprwarjy57k5f4cghxwr7zb0cb4d61vr7njmdg9y2"; })
(fetchNuGet { pname = "Fake.Core.Xml"; version = "5.23.1"; sha256 = "1z7gmk3d44pgrzpna27v98wznia479s73f9234zxgrirm8jib5dw"; })
(fetchNuGet { pname = "Fake.DotNet.AssemblyInfoFile"; version = "5.23.1"; sha256 = "0ysmq83n1wilgl56z5bsrcqipl1i6l63rp807by7pwm2l0jjlazp"; })
(fetchNuGet { pname = "Fake.DotNet.Cli"; version = "5.23.1"; sha256 = "0m2d725rns19mvgmmcwwq641pygrg7xys8k89z0z721r9p1yfp1z"; })
(fetchNuGet { pname = "Fake.DotNet.MSBuild"; version = "5.23.1"; sha256 = "0j73cdxk4yzwkx7yk3yn3c7hzf6k60b6zmsjxipdv0h34cljinpp"; })
(fetchNuGet { pname = "Fake.DotNet.NuGet"; version = "5.23.1"; sha256 = "1mx0hip9pgdw246j80kcrj1m93gy49hlr7wn62cwh4nza845b9fk"; })
(fetchNuGet { pname = "Fake.DotNet.Paket"; version = "5.23.1"; sha256 = "15c58kpzdxifry9qdvch5aif6x3lildjdvb57gnlmxx4gwv1xcdq"; })
(fetchNuGet { pname = "Fake.IO.FileSystem"; version = "5.23.1"; sha256 = "0lgxbms4kg0ipfjclfpx9azqgg4rbl3jj97n1mmdzmgcpfhgfwwq"; })
(fetchNuGet { pname = "Fake.IO.Zip"; version = "5.23.1"; sha256 = "0iac86jlxb5bwgiich3zzvr7bz5aw8xq53ly263mwxhv9lrsd815"; })
(fetchNuGet { pname = "Fake.Net.Http"; version = "5.23.1"; sha256 = "1g0dpxi5b78qh7myz09pmjxzb0iblj3rqx5mpaammbppbbazvzdk"; })
(fetchNuGet { pname = "Fake.Tools.Git"; version = "5.23.1"; sha256 = "0cg1sbp7zl1d18cjhbs94ix8580hr6gyaxjw17q246lbaj9bfg8l"; })
(fetchNuGet { pname = "fantomas"; version = "6.0.0"; sha256 = "15zxh0priibyf77di389gi1ynsx6zf0yvlwdm55bc545wycn70vd"; })
(fetchNuGet { pname = "Fantomas.Client"; version = "0.9.0"; sha256 = "1zixwk61fyk7y9q6f8266kwxi6byr8fmyp1lf57qhbbvhq2waj9d"; })
(fetchNuGet { pname = "FParsec"; version = "1.1.1"; sha256 = "01s3zrxl9kfx0264wy0m555pfx0s0z165n4fvpgx63jlqwbd8m04"; })
(fetchNuGet { pname = "FSharp.Analyzers.SDK"; version = "0.11.0"; sha256 = "0djgbxnygmpdkrw923z2vgirs5kamrvf94ls7pvnk43c52xlb0pf"; })
(fetchNuGet { pname = "FSharp.Compiler.Service"; version = "43.7.300"; sha256 = "01aiczwsmv4ka6dkmw9vxfdy40wp5nzv7558pmywjixq3a780bqj"; })
(fetchNuGet { pname = "FSharp.Control.AsyncSeq"; version = "3.2.1"; sha256 = "02c8d8snd529rrcj6lsmab3wdq2sjh90j8sanx50ck9acfn9jd3v"; })
(fetchNuGet { pname = "FSharp.Control.Reactive"; version = "5.0.5"; sha256 = "0ahvd3s5wfv610ks3b00ya5r71cqm34ap8ywx0pyrzhlsbk1ybqg"; })
(fetchNuGet { pname = "FSharp.Core"; version = "6.0.5"; sha256 = "07929km96znf6xnqzmxdk3h48kz2rg9msf4c5xxmnjqr0ikfb8c6"; })
(fetchNuGet { pname = "FSharp.Core"; version = "7.0.300"; sha256 = "017mp4ndfi9ckps9jczw6d48xm0c2rakf3i5g5f6mimhd1cvlf54"; })
(fetchNuGet { pname = "FSharp.Data.Adaptive"; version = "1.2.13"; sha256 = "16l1h718h110yl2q83hzy1rpalyqlicdaxln7g0bf8kzq9b2v6rz"; })
(fetchNuGet { pname = "FSharp.Formatting"; version = "14.0.1"; sha256 = "0sx4jlxzmrdcmc937arc9v0r90qkpf2gd1m9ngkpg88qvqcx4xsa"; })
(fetchNuGet { pname = "FSharp.UMX"; version = "1.1.0"; sha256 = "1rzf5m38fcpphfhcv359plk2sval16kj00gdfwzpm9gi8wjw8j8k"; })
(fetchNuGet { pname = "FSharpLint.Core"; version = "0.21.2"; sha256 = "10wzcgrzmdpj00wb84yaclp5pgwk9h05cbrcwf99h81sjgkmczh0"; })
(fetchNuGet { pname = "FSharpx.Async"; version = "1.14.1"; sha256 = "1m0f4pv8sdm7iy7zbrmywc3j20pb6akld9y7yd5xvw26kbz5ndkc"; })
(fetchNuGet { pname = "FsToolkit.ErrorHandling"; version = "4.4.0"; sha256 = "0a5mii50a025ijmpvzh10zdqrgj7r87b75rswjmq6y03kk703iay"; })
(fetchNuGet { pname = "FsToolkit.ErrorHandling.TaskResult"; version = "4.4.0"; sha256 = "1qgw4mivfsdai30ldan7lqj8hhq6gbbdq4qdl63hm88q60bh34rq"; })
(fetchNuGet { pname = "GitHubActionsTestLogger"; version = "2.0.1"; sha256 = "155d1fmnxlq7p7wk4v74b8v8h36nq0i6bq1vhdjf8sbq7f95fj0f"; })
(fetchNuGet { pname = "Google.Protobuf"; version = "3.22.0"; sha256 = "1wjxxlqdrjjb0f3py8sbgsivqms8d22m7xk1zx68gfmyih671in7"; })
(fetchNuGet { pname = "Grpc"; version = "2.46.6"; sha256 = "1zj2j7h97qdns14z3ilfgqx3kir9p5a05kwsvyz3hpnx2z6j3ysj"; })
(fetchNuGet { pname = "Grpc.Core"; version = "2.46.6"; sha256 = "1lyy2l8xxjnfvrf9jxdffms70qqjlz41s0k3y53w637n5qif7hgz"; })
(fetchNuGet { pname = "Grpc.Core.Api"; version = "2.51.0"; sha256 = "1bz9dqkxwwjkdsh9lmqgc0ysdhysjs45xjcmffbs3hffnzd8jhrz"; })
(fetchNuGet { pname = "Grpc.Net.Client"; version = "2.51.0"; sha256 = "1l4qaa51i8pqjh6kz9w3zv9iqxxvk2gdd3yxg5w54904nl0jsanh"; })
(fetchNuGet { pname = "Grpc.Net.Common"; version = "2.51.0"; sha256 = "1b7iwf5qk4c449mi5lsnf6j99pwwrj79y8zkinzf5j2rslc97r0z"; })
(fetchNuGet { pname = "IcedTasks"; version = "0.5.3"; sha256 = "0yrdlhynxbdpg4lwqny7fah32lrsr3qwfszlb8n0bpgbx6pnkk6d"; })
(fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "7.2.1.6856"; sha256 = "19z68rgzl93lh1h8anbgzw119mhvcgr9nh5q2nxk6qihl2mx97ba"; })
(fetchNuGet { pname = "Ionide.KeepAChangelog.Tasks"; version = "0.1.8"; sha256 = "066zla2rp1sal6by3h3sg6ibpkk52kbhn30bzk58l6ym7q1kqa6b"; })
(fetchNuGet { pname = "Ionide.LanguageServerProtocol"; version = "0.4.14"; sha256 = "0jkwnvn2g2bbnfvc7a3l30c6kkzwcrzxryq31pq9sm2nnnvk1dxs"; })
(fetchNuGet { pname = "Ionide.ProjInfo"; version = "0.61.3"; sha256 = "0d6zzqzsd4gn2dnpkamzl0h2p94vfsnrkigjk3cyqp233xrbhqdf"; })
(fetchNuGet { pname = "Ionide.ProjInfo.FCS"; version = "0.61.3"; sha256 = "1hlxhlbvwgb997q7169a6q8v804w8bfxhin2yljd77alj2yzal9r"; })
(fetchNuGet { pname = "Ionide.ProjInfo.ProjectSystem"; version = "0.61.3"; sha256 = "1mhzvcfrnx5wd2nad321azsndr9yb47m3y7gim49a70fswngbl38"; })
(fetchNuGet { pname = "Ionide.ProjInfo.Sln"; version = "0.61.3"; sha256 = "1a01c7r3q3sjz81p8d0j8k0j9inwgj2xfy8mc8r2699xk55bih09"; })
(fetchNuGet { pname = "McMaster.NETCore.Plugins"; version = "1.4.0"; sha256 = "1k2qz0qnf2b1kfwbzcynivy93jm7dcwl866d0fl7qlgq5vql7niy"; })
(fetchNuGet { pname = "MessagePack"; version = "2.4.35"; sha256 = "0y8pz073ync51cv39lxldc797nmcm39r4pdhy2il6r95rppjqg5h"; })
(fetchNuGet { pname = "MessagePack.Annotations"; version = "2.4.35"; sha256 = "1jny2r6rwq7xzwymm779w9x8a5rhyln97mxzplxwd53wwbb0wbzd"; })
(fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
(fetchNuGet { pname = "Microsoft.Build"; version = "17.2.0"; sha256 = "09hs74nr0kv83wc1way9x7vq3nmxbr2s4vdy99hx78kj25pylcr7"; })
(fetchNuGet { pname = "Microsoft.Build"; version = "17.4.0"; sha256 = "0j8rqwl8h2hh4yl4bvsijm0rl8356a8vfvdqj4jk5blmvfcfs7b4"; })
(fetchNuGet { pname = "Microsoft.Build.Framework"; version = "17.4.0"; sha256 = "06yh8fxxfrqlhm5kd2mdlwz6zjfqb1haf7cp812q6apvh8akfnyd"; })
(fetchNuGet { pname = "Microsoft.Build.Framework"; version = "17.6.3"; sha256 = "0gj182wih2rr90c045a7x1cy04szv83zr21c725h70s7dcshdvn6"; })
(fetchNuGet { pname = "Microsoft.Build.Locator"; version = "1.5.3"; sha256 = "0km0zafgbm4qjg0azv40aanfn38fplkz057gqhyd76h4zgvwpxg4"; })
(fetchNuGet { pname = "Microsoft.Build.Tasks.Core"; version = "17.4.0"; sha256 = "12d3jg8qpf4k5gknxv728270faiwzb0qb6m8cfjwsqy990v54z2c"; })
(fetchNuGet { pname = "Microsoft.Build.Tasks.Git"; version = "1.1.1"; sha256 = "1bb5p4zlnfn88skkvymxfsn0jybqncl4356hwnic9jxdq2d4fz1w"; })
(fetchNuGet { pname = "Microsoft.Build.Utilities.Core"; version = "17.4.0"; sha256 = "1lzswq96gi3si61n6i3ddla05gpn8myhn4kkfc0wx2bw7y6308y7"; })
(fetchNuGet { pname = "Microsoft.Build.Utilities.Core"; version = "17.6.3"; sha256 = "1fxhv26rhx5mcrz08k0n3vlsy8wxpvsds44a32bm61wazfqcylhn"; })
(fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.4.1"; sha256 = "0bf68gq6mc6kzri4zi8ydc0xrazqwqg38bhbpjpj90zmqc28kari"; })
(fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; })
(fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "6.0.0"; sha256 = "0qn30d3pg4rx1x2k525jj4x5g1fxm2v5m0ksz2dmk1gmqalpask8"; })
(fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "6.0.1"; sha256 = "0ra0ldbg09r40jzvfqhpb3h42h80nafvka9hg51dja32k3mxn5gk"; })
(fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "6.0.1"; sha256 = "0wg6ilgm0vkhgh8jkvpna7kqiix47zpcgzdvh6c237bi8h0lz7mz"; })
(fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "6.0.0"; sha256 = "0w6wwxv12nbc3sghvr68847wc9skkdgsicrz3fx4chgng1i3xy0j"; })
(fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "6.0.0"; sha256 = "15hb2rbzgri1fq8wpj4ll7czm3rxqzszs02phnhjnncp90m5rmpc"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.1"; sha256 = "0kl5ypidmzllyxb91gwy3z950dc416p1y8wikzbdbp0l7aaaxq2p"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0"; sha256 = "1vi67fw7q99gj7jd64gnnfr4d2c0ijpva7g9prps48ja6g91x6a9"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "6.0.0"; sha256 = "08c4fh1n8vsish1vh7h73mva34g0as4ph29s4lvps7kmjb4z64nl"; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "6.0.0"; sha256 = "0fd9jii3y3irfcwlsiww1y9npjgabzarh33rn566wpcz24lijszi"; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "6.0.2"; sha256 = "1wv54f3p3r2zj1pr9a6z8zqrh2ihm6v6qcw2pjwis1lcc0qb472m"; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging.Configuration"; version = "6.0.0"; sha256 = "0plx785hk61arjxf0m3ywy9hl5nii25raj4523n3ql7mmv6hxqr1"; })
(fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "6.0.0"; sha256 = "008pnk2p50i594ahz308v81a41mbjz9mwcarqhmrjpl2d20c868g"; })
(fetchNuGet { pname = "Microsoft.Extensions.Options.ConfigurationExtensions"; version = "6.0.0"; sha256 = "1k6q91vrhq1r74l4skibn7wzxzww9l74ibxb2i8gg4q6fzbiivba"; })
(fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "6.0.0"; sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2"; })
(fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.4.0"; sha256 = "1smx30nq22plrn2mw4wb5vfgxk6hyx12b60c4wabmpnr81lq3nzv"; })
(fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.6.3"; sha256 = "0g5jdg0jp844a2ygwlm04igsxkrihqcq2rpmfx722nrv3vrk0r0z"; })
(fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.4.1"; sha256 = "02p1j9fncd4fb2hyp51kw49d0dz30vvazhzk24c9f5ccc00ijpra"; })
(fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.3"; sha256 = "0hc4d4d4358g5192mf8faijwk0bpf9pjwcfd3h85sr67j0zhj6hl"; })
(fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net461"; version = "1.0.3"; sha256 = "1jcc552rwpaybd2ql0b31063ayj70sd3k6qqpf850xmqbyg2hlmx"; })
(fetchNuGet { pname = "Microsoft.SourceLink.AzureRepos.Git"; version = "1.1.1"; sha256 = "059c8i2vybprn63sw2jr7xma4yyl2syx6hzygfdpr0zd5jlgy9rz"; })
(fetchNuGet { pname = "Microsoft.SourceLink.Bitbucket.Git"; version = "1.1.1"; sha256 = "1p7di7lihraqisd4yfslvhpwlb9zf2casssjhyad1a0hcqmgw7n9"; })
(fetchNuGet { pname = "Microsoft.SourceLink.Common"; version = "1.1.1"; sha256 = "0xkdqs7az2cprar7jzjlgjpd64l6f8ixcmwmpkdm03fyb4s5m0bg"; })
(fetchNuGet { pname = "Microsoft.SourceLink.GitHub"; version = "1.1.1"; sha256 = "099y35f2npvva3jk1zp8hn0vb9pwm2l0ivjasdly6y2idv53s5yy"; })
(fetchNuGet { pname = "Microsoft.SourceLink.GitLab"; version = "1.1.1"; sha256 = "0fm50cc05fmkz77xnl6qvawkx43asdklzxhz65jnbkjp633zvx41"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.4.1"; sha256 = "0s68wf9yphm4hni9p6kwfk0mjld85f4hkrs93qbk5lzf6vv3kba1"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.4.1"; sha256 = "1n9ilq8n5rhyxcri06njkxb0h2818dbmzddwd2rrvav91647m2s4"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Setup.Configuration.Interop"; version = "3.6.2115"; sha256 = "0924lvb8i1y1majjph1hczi8p72mxlvkk3b7apdqgv5hmbn9sdxq"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "17.3.44"; sha256 = "07w5ca1jwmiynpznb36xhxpf42y97v9flj6rxsmg4gqsh1h430i1"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "17.3.44"; sha256 = "0l1hh2xb183xr5nk8xvbd8zz45n7h15cxlicg5zii6q68q8z49wf"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "17.0.64"; sha256 = "1qm2dc9v1glpgy2blbcmsljwrsx55k82rjw4hiqh031h8idwryrl"; })
(fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
(fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.1"; sha256 = "1map729br97ny6mqkaw5qsg55yjbfz2hskvy56qz8rf7p1bjhky2"; })
(fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "7.0.0"; sha256 = "1bh77misznh19m1swqm3dsbji499b8xh9gk6w74sgbkarf6ni8lb"; })
(fetchNuGet { pname = "Mono.Cecil"; version = "0.11.4"; sha256 = "1yxa7mh432s7g7p9r7scqxvxjk5ypwc567qdbf0gmk8fbf0d3f8y"; })
(fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
(fetchNuGet { pname = "MSBuild.StructuredLogger"; version = "2.1.820"; sha256 = "04i27pcw06a7zb9p8yw255lczsap4aj8p2zncscm679380lxa7p1"; })
(fetchNuGet { pname = "Nerdbank.Streams"; version = "2.8.61"; sha256 = "1wxhrqlhb8wq1x5kn3wacylicznl3fgmfdqvx6r3s97yv89zyzy4"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.2"; sha256 = "1p9splg1min274dpz7xdfgzrwkyfd3xlkygwpr1xgjvvyjvs6b0i"; })
(fetchNuGet { pname = "NuGet.Common"; version = "6.3.0"; sha256 = "0j4ahrzakkrqqppp465bqi39bf4wn31020b96n4zl3j2zvppc0bg"; })
(fetchNuGet { pname = "NuGet.Configuration"; version = "6.3.0"; sha256 = "0adafjzzrbm285hhdfn2nd57xzn4r5ldm1zm2w9yaj97cdqd228f"; })
(fetchNuGet { pname = "NuGet.Frameworks"; version = "6.3.0"; sha256 = "05mqbfgkif9qa5hg1sjmcvx69ifdhiqs2xjplqjrvrj9ybmd5i0c"; })
(fetchNuGet { pname = "NuGet.Packaging"; version = "6.3.0"; sha256 = "0gw2r7iajdk8c52vv0g2bgwlnx79zsacy5n7yv5g2niggxrbm82x"; })
(fetchNuGet { pname = "NuGet.Protocol"; version = "6.3.0"; sha256 = "0vv8wbwrgvr02niv5dclcbhykxyw0mxhkmpnlh9i8rvajn0gfb0a"; })
(fetchNuGet { pname = "NuGet.Versioning"; version = "6.3.0"; sha256 = "1fimxklifac8ahdf02gq01533k502izay6plxcd1j8rg24xrjz6p"; })
(fetchNuGet { pname = "Octokit"; version = "0.48.0"; sha256 = "17ria1shx04rb6knbaswpqndmwam6v3r3lsfsd486q584798ccn8"; })
(fetchNuGet { pname = "octonav"; version = "0.0.1"; sha256 = "1zzv8nqgrrrh3ay4rvwx3npx3q0xvnsqib5q3xww5h17a6lzcbni"; })
(fetchNuGet { pname = "OpenTelemetry"; version = "1.3.2"; sha256 = "1v9ipc75ipwjhhz4mkyjygw85i6ba5flcbhyspmf90vfi2nk7b79"; })
(fetchNuGet { pname = "OpenTelemetry.Api"; version = "1.3.2"; sha256 = "0fgl99k6nm3n47vv9mx6y36pnljj2b5g641cs2zsw6l86n57qwv1"; })
(fetchNuGet { pname = "OpenTelemetry.Exporter.OpenTelemetryProtocol"; version = "1.3.2"; sha256 = "14p6rn68mqrch3ani17vwyl4ggjz680nxkw1nf65xmf1ljlkb4iq"; })
(fetchNuGet { pname = "Paket"; version = "7.2.1"; sha256 = "1d3ic5kw1yxb7ja07hzrsfjcv8vky6x60han5h6rjm0qbsnwb6xj"; })
(fetchNuGet { pname = "SemanticVersioning"; version = "2.0.2"; sha256 = "025l5akirkd9g7d5g5wydvkn1wabglcyvbfshkmly7j3r0k596vp"; })
(fetchNuGet { pname = "Serilog"; version = "2.11.0"; sha256 = "1nvd3hm615xlcdmw1i7llkd3xvwvpv66c4y4s28npv47v3yci3lh"; })
(fetchNuGet { pname = "Serilog.Sinks.Async"; version = "1.5.0"; sha256 = "0bcb3n6lmg5wfj806mziybfmbb8gyiszrivs3swf0msy8w505gyg"; })
(fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.0.1"; sha256 = "080vh9kcyn9lx4j7p34146kp9byvhqlaz5jn9wzx70ql9cwd0hlz"; })
(fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
(fetchNuGet { pname = "StreamJsonRpc"; version = "2.12.27"; sha256 = "15k0z6y3dsgipzfaa73irf5xjddr5mj9z26k27s8p6viay608cxc"; })
(fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
(fetchNuGet { pname = "System.CodeDom"; version = "6.0.0"; sha256 = "1i55cxp8ycc03dmxx4n22qi6jkwfl23cgffb95izq7bjar8avxxq"; })
(fetchNuGet { pname = "System.Collections.Immutable"; version = "6.0.0"; sha256 = "1js98kmjn47ivcvkjqdmyipzknb9xbndssczm8gq224pbaj1p88c"; })
(fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
(fetchNuGet { pname = "System.CommandLine"; version = "2.0.0-beta4.22272.1"; sha256 = "1iy5hwwgvx911g3yq65p4zsgpy08w4qz9j3h0igcf7yci44vw8yd"; })
(fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
(fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "6.0.0"; sha256 = "0sqapr697jbb4ljkq46msg0xx1qpmc31ivva6llyz2wzq3mpmxbw"; })
(fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "7.0.0"; sha256 = "149d9kmakzkbw69cip1ny0wjlgcvnhrr7vz5pavpsip36k2mw02a"; })
(fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.0"; sha256 = "0rrihs9lnb1h6x4h0hn6kgfnh58qq7hx8qq99gh6fayx4dcnx3s5"; })
(fetchNuGet { pname = "System.Diagnostics.EventLog"; version = "7.0.0"; sha256 = "16p8z975dnzmncfifa9gw9n3k9ycpr2qvz7lglpghsvx0fava8k9"; })
(fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
(fetchNuGet { pname = "System.Drawing.Common"; version = "7.0.0"; sha256 = "0jwyv5zjxzr4bm4vhmz394gsxqa02q6pxdqd2hwy1f116f0l30dp"; })
(fetchNuGet { pname = "System.Formats.Asn1"; version = "6.0.0"; sha256 = "1vvr7hs4qzjqb37r0w1mxq7xql2b17la63jwvmgv65s1hj00g8r9"; })
(fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.3"; sha256 = "1jgdazpmwc21dd9naq3l9n5s8a1jnbwlvgkf1pnm0aji6jd4xqdz"; })
(fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
(fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
(fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; })
(fetchNuGet { pname = "System.Reflection.Metadata"; version = "6.0.1"; sha256 = "0fjqifk4qz9lw5gcadpfalpplyr0z2b3p9x7h0ll481a9sqvppc9"; })
(fetchNuGet { pname = "System.Reflection.MetadataLoadContext"; version = "6.0.0"; sha256 = "1ijfiqpi3flp5g9amridhjjmzz6md1c6pnxx5h7pdbiqqx9rwrpk"; })
(fetchNuGet { pname = "System.Resources.Extensions"; version = "6.0.0"; sha256 = "1h73gps9ffw77vys4zwgm78fgackqw6a7rjrg75mmx79vdw1shgw"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
(fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0"; sha256 = "0a678bzj8yxxiffyzy60z2w1nczzpi8v97igr4ip3byd2q89dv58"; })
(fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "5.0.0"; sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw"; })
(fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "6.0.1"; sha256 = "0wswhbvm3gh06azg9k1zfvmhicpzlh7v71qzd4x5zwizq4khv7iq"; })
(fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "6.0.0"; sha256 = "05kd3a8w7658hjxq9vvszxip30a479fjmfq4bq1r95nrsvs4hbss"; })
(fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "7.0.1"; sha256 = "1nq9ngkqha70rv41692c79zq09cx6m85wkp3xj9yc31s62afyl5i"; })
(fetchNuGet { pname = "System.Security.Cryptography.Xml"; version = "6.0.1"; sha256 = "15d0np1njvy2ywf0qzdqyjk5sjs4zbfxg917jrvlbfwrqpqxb5dj"; })
(fetchNuGet { pname = "System.Security.Permissions"; version = "6.0.0"; sha256 = "0jsl4xdrkqi11iwmisi1r2f2qn5pbvl79mzq877gndw6ans2zhzw"; })
(fetchNuGet { pname = "System.Security.Permissions"; version = "7.0.0"; sha256 = "0wkm6bj4abknzj41ygkziifx8mzhj4bix92wjvj6lihaw1gniq8c"; })
(fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
(fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
(fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "7.0.0"; sha256 = "0sn6hxdjm7bw3xgsmg041ccchsa4sp02aa27cislw3x61dbr68kq"; })
(fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
(fetchNuGet { pname = "System.Text.Json"; version = "6.0.5"; sha256 = "12fg196sdq3gcjcz365kypfkkmdrprpcw2fvjnww9jqa4yn8v99l"; })
(fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "6.0.0"; sha256 = "1b4vyjdir9kdkiv2fqqm4f76h0df68k8gcd7jb2b38zgr2vpnk3c"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
(fetchNuGet { pname = "System.Windows.Extensions"; version = "6.0.0"; sha256 = "1wy9pq9vn1bqg5qnv53iqrbx04yzdmjw4x5yyi09y3459vaa1sip"; })
(fetchNuGet { pname = "System.Windows.Extensions"; version = "7.0.0"; sha256 = "11r9f0v7qp365bdpq5ax023yra4qvygljz18dlqs650d44iay669"; })
(fetchNuGet { pname = "YoloDev.Expecto.TestSdk"; version = "0.13.3"; sha256 = "0y9bhgws3m2idj8cr53rn0155wwi6nhgbp6hmci0gc2w7fp3387c"; })
]
@@ -23,7 +23,8 @@ let finalPackage = buildDotnetModule rec {
projectFile = "src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj";
nugetDeps = ./deps.nix;
useAppHost = false;
dotnet-sdk = sdk_6_0;
dotnet-runtime = sdk_6_0;
dotnetInstallFlags = [ "--framework net6.0" ];
dotnetBuildFlags = [ "--framework net6.0" "--no-self-contained" ];
@@ -48,24 +49,8 @@ let finalPackage = buildDotnetModule rec {
done
'';
dontDotnetFixup = true; # we'll fix it ourselves
preFixup = ''
# We create a wrapper that will run the OmniSharp dll using the `dotnet`
# executable from PATH. Doing it this way allows it to run using newer SDK
# versions than it was build with, which allows it to properly find those SDK
# versions - OmniSharp only finds SDKs with the same version or newer as
# itself. We still provide a fallback, in case no `dotnet` is provided in
# PATH
mkdir -p "$out/bin"
cat << EOF > "$out/bin/OmniSharp"
#!${stdenv.shell}
export PATH="\''${PATH}:${sdk_6_0}/bin"
dotnet "$out/lib/omnisharp-roslyn/OmniSharp.dll" "\$@"
EOF
chmod +x "$out/bin/OmniSharp"
'';
useDotnetFromEnv = true;
executables = [ "OmniSharp" ];
passthru.tests = let
with-sdk = sdk: runCommand "with-${if sdk ? version then sdk.version else "no"}-sdk"
+17
View File
@@ -0,0 +1,17 @@
{ buildDotnetGlobalTool, lib }:
buildDotnetGlobalTool {
pname = "pbm";
version = "1.3.1";
nugetSha256 = "sha256-ZG2HFyKYhVNVYd2kRlkbAjZJq88OADe3yjxmLuxXDUo=";
meta = with lib; {
description = "CLI for managing Akka.NET applications and Akka.NET Clusters.";
homepage = "https://cmd.petabridge.com/index.html";
changelog = "https://cmd.petabridge.com/articles/RELEASE_NOTES.html";
license = licenses.unfree;
platforms = platforms.linux;
maintainers = with maintainers; [ anpin mdarocha ];
};
}
+8
View File
@@ -804,6 +804,14 @@ with pkgs;
mkNugetSource = callPackage ../build-support/dotnet/make-nuget-source { };
mkNugetDeps = callPackage ../build-support/dotnet/make-nuget-deps { };
buildDotnetGlobalTool = callPackage ../build-support/dotnet/build-dotnet-global-tool { };
fsautocomplete = callPackage ../development/tools/fsautocomplete { };
pbm = callPackage ../tools/admin/pbm { };
fable = callPackage ../development/tools/fable { };
dotnetenv = callPackage ../build-support/dotnet/dotnetenv {
dotnetfx = dotnetfx40;
};