I'm trying to update my nuget package by running the command nuget pack -properties Configuration=Release
but this gives me the following error:
Unable to find 'bin/Release/{project-name}/bin/Release'. Mae sure the project has been built
I'm not quite sure why it goes to my Release folder and then continues to go down to another Release folder as this doesn't exist? I'm quite lost here, and I'm not sure what to do.
TL;DR
For the new
<Project Sdk="Microsoft.NET.Sdk">
.csproj file format, usedotnet pack
to build NuGet packages, even if they target .Net Framework or if the project is multi-targeted. Run this from the directory containing your.csproj
(and optionally a.nuspec
)Note that by default
dotnet pack
places the output.nupkg
in the/bin/Release
folder, which is different from the current default folder where oldernuget pack
placed it.I would suggest you don't create explicit
.nuspec
files for the new.csproj
formats, since most settings can be set in the "Packages" tab of the new Project format. However, if you do have a.nuspec
, thendotnet pack
will also combine any.nuspec
file matching the project name, allowing for the$
symbol substitution from the version and metadata set in your.csproj
.More Detail
I also experienced this problem - in previous versions, I typically use to use this approach to pack against a
.csproj
with the.nuspec
file of the same name, so that I can use all of the $ tokens like$id$
,$version$
.However when attempting this against the newer
<Project Sdk="Microsoft.NET.Sdk">
csproj formats:I received the same error (note the "duplication" of
bin\release
):And if I tried packing against a
.nuspec
containing symbols (NuGet Version: 4.7.1.5393)I just get the unhelpful message because nuget isn't able to resolve the $ tokens automatically.
However, by using dotnet pack instead of nuget
I get to where I want to be, i.e. a multi-targeted NuGet package with the $ symbols in the
.nuspec
correctly synchronized from the.csproj
(you can verify this by opening up the.nupkg
file in e.g. 7zip and examining the final.nuspec
file in the package root)Part of Rune's answer (setting
TargetFramework=net471
NuGet property)and using NuGet version 4.9.1 (instruction here: https://stackoverflow.com/a/53614798/1813219)
was a way to go for me.
Actually I just solved the problem on my end. Nuget may not find hidden dll. Here is my solution:
Build the project;
Show all files in visual studio so you can see the hidden files, so that you can see the dll under bin folder;
Right click, open folder in file explorer, then copy it to current folder let them replace/ Or unhidden the files;
Do "Nuget Pack" again.
I had the same problem on a multi-targeted project (targetting both net452 and netstandard2.0).
My fix/hack was to add 'TargetFramework=net452' to the list of properties passed to Nuget, and manually adding the netstandard2.0-output to the files-section in the .nuspec-file
Hope someone finds a better solution