【问题标题】:Error NU5012 - nuget pack unable to find path (/bin/release/MyProject/bin/release)错误 NU5012 - nuget pack 找不到路径 (/bin/release/MyProject/bin/release)
【发布时间】:2017-08-22 10:23:08
【问题描述】:

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

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

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

【问题讨论】:

  • 你能分享你的项目文件吗?从你现在给予的东西来看,没有什么可真正继续的。
  • 你有没有想过这个问题?
  • 抱歉,这已经有一段时间了。我忘了用我的解决方案回答这个问题:/

标签: nuget nuget-package nuget-cli


【解决方案1】:

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 放置它的当前默认文件夹不同。

我建议您不要为新的.csproj 格式创建明确的.nuspec 文件,因为大多数设置都可以在新项目格式的“包”选项卡中进行设置。但是,如果您确实有.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 正确同步(您可以通过打开 .nupkg 文件来验证这一点,例如7zip 并检查包根目录中的最终.nuspec 文件)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      对我来说是一种方式。

      【讨论】:

        【解决方案4】:

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

        • 构建项目;

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

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

        • 再次执行“Nuget Pack”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-07
          • 1970-01-01
          • 2019-04-29
          • 1970-01-01
          • 1970-01-01
          • 2018-09-19
          相关资源
          最近更新 更多