26

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

找不到“bin/Release/{project-name}/bin/Release”。确定项目已经建成

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

4

4 回答 4

30

TL;博士

对于新的<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格式创建显式文件,因为大多数设置都可以在新项目格式的“包”选项卡中设置。但是.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 或空字符串。参数名称:值

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

dotnet pack MyProject.csproj -c Release

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

于 2018-09-21T08:15:38.233 回答
3

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

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

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

于 2018-07-17T08:17:09.230 回答
1

Rune 的部分答案(设置TargetFramework=net471NuGet 属性)

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

对我来说是一条路。

于 2019-09-12T17:39:57.087 回答
0

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

  • 构建项目;

  • 在visual studio中显示所有文件,这样就可以看到隐藏的文件,这样就可以看到bin文件夹下的dll;

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

  • 再次执行“Nuget Pack”。

于 2019-11-21T16:57:23.273 回答