错误NU5012 - nuget pack无法找到路径(/ bin / release / MyProject / bin / release)

时间:2017-08-22 10:23:08

标签: nuget nuget-package nuget-cli

我尝试通过运行nuget pack -properties Configuration=Release命令来更新我的nuget包,但这会给我以下错误:

  

无法找到&bin / Release / {project-name} / bin / Release'。确定该项目已经建成

我不太确定为什么它会转到我的Release文件夹,然后继续转到另一个Release文件夹,因为它不存在?我在这里很迷茫,我不知道该怎么办。

4 个答案:

答案 0 :(得分:2)

TL; DR

对于新的<Project Sdk="Microsoft.NET.Sdk"> .csproj文件格式,请使用dotnet pack来构建NuGet软件包,即使它们以.Net Framework为目标或项目是多目标的也是如此。从包含您的.csproj(以及可选的.nuspec)的目录中运行此文件

dotnet pack MyProject.csproj -c Release

请注意,默认情况下,dotnet pack将输出.nupkg放置在/bin/Release文件夹中,这与旧的nuget pack放置它的当前默认文件夹不同。

我建议您不要为新的.nuspec格式创建显式的.csproj文件,因为大多数设置都可以在新的Project格式的“包”标签中设置。但是,如果您确实有.nuspec,则dotnet pack还将合并任何与项目名称匹配的.nuspec文件,从而允许从版本和元数据集中替换$符号在您的.csproj中。

更多详细信息

我也遇到了这个问题-在以前的版本中,我通常使用this approach来对同名.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

我只得到unhelpful message,因为nuget无法自动解析$令牌。

  

值不能为null或空字符串。   参数名称:值

但是,通过使用dotnet pack而不是nuget

dotnet pack MyProject.csproj -c Release

我到达了想要去的地方,即,多目标的NuGet程序包,其中的.nuspec中的$符号与.csproj正确同步(您可以通过打开{{ 1}}文件,例如7zip,并检查包根目录中的最终.nupkg文件)

答案 1 :(得分:0)

我在一个多目标项目中遇到了同样的问题(同时针对net452和netstandard2.0)。

我的解决方法/黑客是将'TargetFramework = net452'添加到传递给Nuget的属性列表中,然后手动将netstandard2.0-输出添加到.nuspec文件中的文件部分中

希望有人找到更好的解决方案

答案 2 :(得分:0)

符文答案的一部分(设置TargetFramework=net471 NuGet属性)

并使用NuGet版本4.9.1(此处的说明:https://stackoverflow.com/a/53614798/1813219

是我的理想之路。

答案 3 :(得分:0)

实际上,我只是解决了我的问题。 Nuget可能找不到隐藏的dll。这是我的解决方案:

  • 构建项目;

  • 在Visual Studio中显示所有文件,以便您可以查看隐藏的文件,以便可以看到bin文件夹下的dll;

  • 右键单击,在文件资源管理器中打开文件夹,然后将其复制到当前文件夹,以使其替换/或取消隐藏文件;

  • 再次执行“ Nuget Pack”。