web-dev-qa-db-ja.com

エラーNU5012-nugetパックがパスを見つけることができません(/ bin / release / MyProject / bin / release)

コマンドnuget pack -properties Configuration=Releaseを実行してnugetパッケージを更新しようとしていますが、次のエラーが発生します。

'bin/Release/{project-name}/bin/Release'が見つかりません。プロジェクトが構築されたことを確認してください

なぜそれが自分のリリースフォルダに移動し、その後別のリリースフォルダに移動し続けるのかよくわかりません。私はここでかなり迷っています、そして私は何をすべきかわかりません。

14
Detilium

TL; DR

新しい<Project Sdk="Microsoft.NET.Sdk"> .csprojファイル形式の場合、.Net Frameworkをターゲットにしている場合やプロジェクトがマルチターゲットの場合でも、 dotnet pack を使用してNuGetパッケージをビルドします。 .csproj(およびオプションで.nuspec)を含むディレクトリからこれを実行します

dotnet pack MyProject.csproj -c Release

デフォルトでは、dotnet packは出力.nupkg/bin/Releaseフォルダーに配置します。これは、古いnuget packが配置した現在のデフォルトフォルダーとは異なります。

ほとんどの設定は新しいプロジェクト形式の[パッケージ]タブで設定できるため、新しい.nuspec形式用に明示的な.csprojファイルを作成しないことをお勧めします。ただし、.nuspecがある場合、dotnet packはプロジェクト名に一致する.nuspecファイルも結合し、バージョンとメタデータセットからの$シンボル置換を可能にします。 .csprojで。

詳細

私もこの問題を経験しました-以前のバージョンでは、私は通常 このアプローチ を使用して同じ名前の.csprojファイルで.nuspecに対してパックします。 $id$$version$などのすべての$トークンを使用します。

ただし、新しい<Project Sdk="Microsoft.NET.Sdk"> csproj形式に対してこれを試みる場合:

nuget pack {MyProject}.csproj -Prop Configuration=Release

同じエラーが発生しました(bin\releaseの「重複」に注意してください):

エラーNU5012:「bin\Release {MyProject}\bin\Release \」が見つかりません。プロジェクトがビルドされていることを確認してください。

そして、シンボルを含む.nuspecに対してパッキングしようとした場合(NuGetバージョン:4.7.1.5393)

nuget pack {MyProject}.nuspec -Prop Configuration=Release

Nugetが$トークンを自動的に解決できないため、 役に立たないメッセージ が表示されます。

値をnullまたは空の文字列にすることはできません。パラメータ名:値

ただし、nugetの代わりにdotnetパックを使用する

dotnet pack MyProject.csproj -c Release

目的の場所に到達します。つまり、.nuspecの$記号が.csprojから正しく同期されたマルチターゲットNuGetパッケージです(これは、.nupkgを開くことで確認できます)。たとえば7Zipのファイルで、パッケージルートの最後の.nuspecファイルを調べます)

2
StuartLC

マルチターゲットプロジェクト(net452とnetstandard2.0の両方をターゲット)でも同じ問題が発生しました。

私の修正/ハックは、Nugetに渡されるプロパティのリストに 'TargetFramework = net452'を追加し、.nuspec-fileのfiles-sectionにnetstandard2.0-outputを手動で追加することでした。

誰かがより良い解決策を見つけることを願っています

1
Rune

ルーンの答えの一部(設定TargetFramework=net471 NuGetプロパティ)

nuGetバージョン4.9.1を使用する(手順はこちら: https://stackoverflow.com/a/53614798/1813219

私のために行く方法でした。

0

実際、私は自分の側で問題を解決しただけです。 Nugetは非表示のdllを見つけられない場合があります。これが私の解決策です:

  • プロジェクトをビルドします。

  • Visual Studioですべてのファイルを表示して、隠しファイルを表示し、binフォルダーの下にあるdllを表示できるようにします。

  • 右クリックして、ファイルエクスプローラーでフォルダーを開き、現在のフォルダーにコピーして、ファイルを置き換えたり、非表示を解除したりします。

  • もう一度「NugetPack」を実行します。

0
Siren