web-dev-qa-db-ja.com

dotnetはローカルパッケージファイルでパッケージを追加します

dotnetコマンドラインツールを使用して、nugetでダウンロードされたnotである既存のローカルパッケージへの参照を追加するにはどうすればよいですか? barでプロジェクトdotnetにローカルパッケージを追加しようとしました。

 $ dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg 

パッケージfoo.1.0.0.nupkgは、別のプロジェクトでdotnet packで作成されています。ただし、コマンドdotnet add packageは、ファイルfoo.1.0.0.nupkghttps://api.nuget.org/ からダウンロードしようとしますが、もちろん失敗します。

28
sakra

単一の.nupkgパッケージを直接インストールする方法はありません。 NuGetはフィードからのみインストールおよび復元できるため、パッケージが存在するディレクトリをフィードとして追加する必要があります。

これを行うには、ディレクトリの場所をフィードとして追加するNuGet.Configファイルを追加します。これにより、各puget関連コマンドにソースパラメーターを追加する必要がなくなります(esp dotnet restore):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="local-packages" value="../foo/bin/Debug" />
  </packageSources>
</configuration>

または、.NET Core 2.0ツール/ NuGet 4.3.0で、NuGetを使用することになっているcsprojファイルにソースを直接追加することもできます。

<PropertyGroup>
  <RestoreSources>$(RestoreSources);../foo/bin/Debug;https://api.nuget.org/v3/index.json</RestoreSources>
</PropertyGroup>

これにより、すべてのコマンドがパッケージを使用できるようになります。

  • dotnet add package foo(オプションで-v 1.0.0を追加)
  • dotnet restore
  • dotnet run

開発中に、nugetパッケージを変更しても、nupkgを生成するプロジェクトとそれを消費するプロジェクトの両方でバージョンをインクリメントしない場合、ローカルパッケージキャッシュをクリアしてから復元する必要があります。

dotnet nuget locals all --clear
dotnet restore

https://github.com/dasMulli/LocalNupkgExample に小さなサンプルプロジェクトを作成しました。

56
Martin Ullrich

私はこれに苦労しましたたくさん、そしてこれが私がそれを機能させることができる唯一の方法です:

  • 使用する新しい「パッケージソース」を作成する

  • nuget add ...を使用して、パッケージソースに.nupkgファイルをインストールします

  • dotnet add package Foo -s ...を使用してパッケージをインストールします。

具体的には、使用する必要があるコマンドは次のとおりです。

nuget add ../whatever/lib/MyPackage.1.0.0.nupkg -Source ./packages

そして:

dotnet add package MyPackage -s ./packages

注意してください具体的に、ここにいくつかのポイント:

  • まず、cannot.nupkgをパッケージフォルダーに単純にコピーします。これについて多くのバリエーションを試しましたが、言えることはそれだけです私、Windows、Mac、Linuxでは動作しません。

  • あなたはmust少なくとも3+以上のバージョンのnugetを使用する必要があります、またはこれは機能しません。 。netコアのデフォルトバージョンは2.xxです執筆時点。 nugetを手動でアップグレードする必要があります。

  • .csprojファイルでの参照は次のようになります。

... PackageReference Include = "SolidMud" Version = "1.0.0" ...

すなわち。特に、依存関係情報でパッケージソースを参照しないことに注意してください。パッケージ名とバージョンのみ。

基本的に、これはdotnet restoreを実行すると、パッケージがそのマシンのグローバルnugetキャッシュにキャッシュされない限り機能しないことを意味します。初めて復元を行うときにdotnet restore -s ./packagesを実行する必要があります。

別の回答で述べたように、パッケージはグローバルにキャッシュされます。同じバージョンIDの新しいバージョンにロールする場合は、dotnet nuget locals all --clearを使用するか、キャッシュされたパッケージバージョンを手動で削除する必要があります。

「SolidMud」という.nupkgを最新の.Net Coreコンソールアプリケーションに復元する特定の完全な例を次に示します。

$ dotnet new console -n TestPkgs
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on TestPkgs/TestPkgs.csproj...
Restore succeeded.

$ cd TestPkgs/
$ mkdir packages
$ nuget add ../core-solidmud/lib/SolidMud.1.0.0.nupkg -Source ./packages
Installing SolidMud 1.0.0.
Successfully added package '../core-solidmud/lib/SolidMud.1.0.0.nupkg' to feed './packages'.

$ dotnet add package SolidMud -s ./packages
Microsoft (R) Build Engine version 15.3.117.23532
Copyright (C) Microsoft Corporation. All rights reserved.

Writing /var/folders/29/0695l4fj26j64kp4p8vwqq5h0000gn/T/tmpkRBaST.tmp
info : Adding PackageReference for package 'SolidMud' into project '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
log  : Restoring packages for /Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj...
info : Package 'SolidMud' is compatible with all the specified frameworks in project '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
info : PackageReference for package 'SolidMud' version '1.0.0' added to file '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
17
Doug

-s|--sourceoption を使用して、パッケージの場所フォルダーを指定します。例えば:

dotnet add package Microsoft.AspNetCore.Cors -s "d:\Cache\localfeed" -f netcoreapp1.1

enter image description here

[〜#〜] update [〜#〜]:@MartinUllrichに感謝 answer :単にインストールすることはできません.nupkgファイル。パッケージをインストールする前に、 ローカルフィード を指定し、フィードにローカル.nupkgファイルを追加する必要があります。詳細については、@ MartinUllrich answer を確認してください。

残念ながら、このブロッキングの問題に直面する可能性があります。

パッケージ 'NameOfPackage'はプロジェクトの 'all'フレームワークと互換性がありません

この時点でそれは開いており、安定したパッケージバージョンで再現することができました。

6
Ilya Chumakov