错误 NU5012 - NuGet 打包无法找到路径 (/bin/release/MyProject/bin/release)。

32

我试图通过运行命令nuget pack -properties Configuration=Release来更新我的NuGet包,但是我遇到了以下错误:

找不到'bin/Release/{project-name}/bin/Release'。请确保已经构建了该项目。

我不太确定为什么它会进入我的 Release 文件夹,然后继续进入另一个 Release 文件夹,因为这实际上不存在?我很困惑,也不知道该怎么做。


你能分享一下你的项目文件吗?从你现在提供的信息来看,我们没有太多可以依据的。 - techvice
2
你最终解决了这个问题吗? - Erik Hunter
抱歉,这有一段时间了。我忘记在SO上回答我的解决方案 :/ - Detilium
4个回答

40

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的默认文件夹不同。
我建议您不要为新的.csproj格式创建显式的.nuspec文件,因为大多数设置可以在新项目格式的“Packages”选项卡中设置。但是,如果您确实有一个.nuspec文件,那么dotnet pack还将组合与项目名称匹配的任何.nuspec文件,从而允许使用.csproj中设置的版本和元数据中的$符号替换。
更多细节:
我也遇到了这个问题 - 在以前的版本中,我通常使用此方法来针对具有相同名称的.nuspec文件的.csproj进行打包,以便我可以使用所有$标记,如$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不能自动解析$标记。

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

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

dotnet pack MyProject.csproj -c Release

我成功地实现了我的目标,即一个多目标 NuGet 包,其中 $ 符号在 .nuspec 中正确地与 .csproj 同步(您可以通过在例如 7zip 中打开 .nupkg 文件并检查包根目录中的最终 .nuspec 文件来验证此操作)。{{}}

3

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

我的解决方法/技巧是将'TargetFramework=net452'添加到传递给Nuget的属性列表中,然后在.nuspec文件的files部分手动添加netstandard2.0-output。

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


1

0

其实我已经在我的端解决了这个问题。Nuget可能无法找到隐藏的dll。以下是我的解决方案:

  • 构建项目;

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

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

  • 再次执行“Nuget Pack”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接