【问题标题】:NuGet CLI throw error Unable to find .nupkgNuGet CLI 抛出错误无法找到 .nupkg
【发布时间】:2019-09-09 09:22:09
【问题描述】:

我尝试使用 NuGet CLI 构建一个包。 我运行下一个命令:

.\nuget.exe pack D:\projects\CloudStorage.Client.csproj -OutputDirectory D:\packages -Build -Symbols -Properties Configuration=Release;

但总是得到下一个错误:

错误 NU5012:无法找到“Autofac.4.9.4.nupkg”。确保项目已构建。

但是解决方案已经建立。

我正在使用最新版本的 NuGet (v5.2.0)

在 bin/Release 文件夹中存在 Autofac,或者我无法正确理解错过的“.nupkg”和当前程序集之间的区别?

对于提到的项目,还有CloudStorage.Client.nuspec文件


当我在现在需要 SemVer 2.0.0 包的解决方案中更新一个 nuget 包 (https://www.nuget.org/packages/Z.EntityFramework.Extensions/) 时检测到此问题...为了构建它,我将 Nuget 升级到 4.3.0+ 版本。结果如上。


项目nuspec内容:

<?xml version="1.0"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
       <metadata>
           <id>CloudStorage.Client</id>
           <version>$version$</version>
           <description>CloudStorage Client</description>
           <authors>MyTeam</authors>
           <tags>$branch$</tags>
       </metadata>
    </package>

UPD

我已经创建了测试项目,其中包括 Autofac 4.9.4 并尝试为其构建包。它已成功创建。从控制台我看到 Autofac 的所有 3 个文件都被复制到 bin 文件夹 .pdb.dll.xml 文件中......而在我的“问题”项目中只复制了 .dll

【问题讨论】:

  • 您好,您的项目使用哪种 nuget 管理格式? Packages.config 还是 PackageReference?我可以在 packages.config 格式项目中重现相同的问题(打包失败时构建成功),这是因为 nuget.exe 在路径SolutionFolder\packages\Autofac.4.9.4 中找不到Autofac.4.9.4.nupkg。您可以检查该路径中是否存在 xx.nupkg 文件,如果不存在,请运行 nuget restore 以检查是否有帮助:)
  • @LanceLi-MSFT 嗨!是的,它是 packages.config,是的,我在 SolutionFolder\packages\Autofac.4.9.4 中看到了 Autofac.4.9.4.nupkg。将尝试删除旧版本...也许它可以以某种方式帮助
  • 我建议你可以删除bin中的release文件夹,然后再次运行nuget pack命令,可能会显示一些警告来帮助定位这个问题。对我来说,我的 xx.csproj 文件中的提示路径有问题,但是由于上次构建成功,当我使用该 nuget pack 命令时,尽管打包失败,它总是成功构建而没有警告。在我删除 bin 文件夹并运行 nuget pack 命令进行干净构建后,出现警告以指示真正的问题。
  • @LanceLi-MSFT 刚刚做到了。看到包是从解决方案包文件夹中复制的,并且 Autofac 有正确的版本。但是同样的错误仍然存​​在...(注意:Autofac 只复制了 .dll 而不是 nupkg...也许这是一个问题)
  • @LanceLi-MSFT,当我在现在需要 SemVer 2.0.0 包的解决方案中更新一个 nuget 包(nuget.org/packages/Z.EntityFramework.Extensions)时检测到此问题...为了构建它,我需要有 Nuget 4.3.0+。我更新了 nuget 的版本 - 结果在上面

标签: .net visual-studio nuget autofac nuget-package


【解决方案1】:

我猜这个问题的根本原因是your project is not in solution folder

xx.csproj 文件中的提示路径应该是绝对路径,例如: &lt;HintPath&gt;C:\Users\xxx\source\repos\PackTest\packages\Autofac.4.9.4\lib\net45\Autofac.dll&lt;/HintPath&gt;

而不是正常的相对:

<HintPath>..\packages\Autofac.4.9.4\lib\net45\Autofac.dll</HintPath>
  1. 当你使用nuget.exe pack D:\projects\CloudStorage.Client.csproj -build这样的命令时,它会调用msbuild.exe来构建项目,然后使用nuget.exe本身来创建包。 Msbuild 是 VS 的构建引擎,因此它可以很好地识别 xx.csproj 文件,并从正确的路径获取必要的程序集。所以构建成功。

    但不知何故nuget.exe无法识别hintpath元素,而且由于这个项目是packages.config格式,在打包过程中,它总是会尝试从packages中找到xx.nupkg文件> 解决方案文件夹中的文件夹。

  2. 通常project文件夹和packages文件夹在solution文件夹中,所以运行良好。但是由于您的项目文件夹(在您的情况下,它的名称是projects)不在解决方案文件夹中,所以 nuget.exe 不知道在哪里可以找到它。这就是出现错误消息Unable to find 'Autofac.4.9.4.nupkg' 的原因。

这就是构建成功但我们无法创建 nuget 包的原因。

以下是解决方法:

  1. D:\ 中的projects 文件夹旁边创建一个nuget.config

它的内容应该是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="D:\PackagesForThisProject" />
  </config>
</configuration>

然后将packages文件夹从Solution Folder复制到D:\,重命名为PackagesForThisProject

然后就可以成功创建包了。

  1. 或者你可以Migrate the packages.config format to PackageReference

【讨论】:

  • 抱歉,请开始尝试...如果成功了,稍后会通知您
  • 解决方法 #1 不适合我,因为我应该转移到 teamcity 构建包。第二个 - 进行中
  • 还有一件事 - 解决方案中的类似项目 - 构建没有问题。它还包括 Autofac 4.9.4。所以可能有其他问题,但它没有显示出来......
  • @demo 嗨,您是否检查过 CloudStorage.Client.csproj 和解决方案中的其他项目之间的提示路径格式是否相同。迁移到 packagereference 并不能帮助解决这个问题?
  • @demo 嗨,现在已经解决了,对吧?您可以考虑将其添加为答案并将其标记以分享有用的信息!
【解决方案2】:

在我的例子中,项目的“packages”文件夹引用了以前的 NuGet 版本。删除“包”文件夹中的所有文件夹。然后,从您的项目中选择“管理 NuGet 引用...”并允许 NuGet 包管理器恢复您的引用。现在,尝试运行“nuget pack...”。

【讨论】:

    【解决方案3】:

    我有同样的错误,目录结构如下所示

    MySolution.sln
    MyProject\MyProject.csproj
    MyProject\MyProject.nuspec
    MyProject\MyProject.sln
    MyProject\packages.config
    packages\...
    

    命令是nuget.exe pack MyProject\MyProject.csproj

    修复:删除文件MyProject\MyProject.sln

    注意:重命名为 MyProject\MyProject.sln_ 没有帮助,但重命名为 MyProject\MyProject._sln 有效

    Nuget.exe 版本:5.6.0.6591

    【讨论】:

      【解决方案4】:

      Nikoloy Pakudin 的解决方案对我有用。 我花了将近 2 天的时间来解决这个问题。

      修复:删除文件MyProject\MyProject.sln 或重命名为MyProject\MyProject._sln作品

      【讨论】:

        猜你喜欢
        • 2019-01-14
        • 2018-10-29
        • 1970-01-01
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多