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

Det*_*ium 8 nuget nuget-package nuget-cli

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

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

我不太确定为什么它会进入我的Release文件夹,然后继续转到另一个Release文件夹,因为它不存在?我在这里迷路了,我不知道该怎么做.

Stu*_*tLC 6

TL; DR

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

dotnet pack MyProject.csproj -c Release
Run Code Online (Sandbox Code Playgroud)

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

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

更多详情

我也遇到了这个问题-在以前的版本中,我通常会使用这种方法.csproj具有.nuspec相同名称的文件进行打包,以便可以使用所有$令牌,例如$id$$version$

但是,当尝试针对较新的<Project Sdk="Microsoft.NET.Sdk">csproj格式执行此操作时:

nuget pack {MyProject}.csproj -Prop Configuration=Release
Run Code Online (Sandbox Code Playgroud)

我收到了相同的错误(请注意的“重复项” bin\release):

错误NU5012:找不到'bin \ Release {MyProject} \ bin \ Release \'。确保已构建项目。

如果我尝试对.nuspec包含符号的字符进行打包(NuGet版本:4.7.1.5393)

nuget pack {MyProject}.nuspec -Prop Configuration=Release
Run Code Online (Sandbox Code Playgroud)

我只是收到无用的消息,因为nuget无法自动解析$令牌。

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

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

dotnet pack MyProject.csproj -c Release
Run Code Online (Sandbox Code Playgroud)

我到达了想要的位置,即一个多目标的NuGet包,其中的$符号与.nuspec正确同步.csproj(您可以通过.nupkg在7zip中打开文件并检查.nuspec包根目录中的最终文件来验证这一点)


Run*_*une 4

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

我的修复/破解是将“TargetFramework=net452”添加到传递给 Nuget 的属性列表中,并手动将 netstandard2.0-output 添加到 .nuspec 文件中的文件部分

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