NuGet CLI 抛出错误无法找到 .nupkg

dem*_*emo 4 .net autofac visual-studio nuget nuget-package

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

.\nuget.exe pack D:\projects\CloudStorage.Client.csproj -OutputDirectory D:\packages -Build -Symbols -Properties Configuration=Release;
Run Code Online (Sandbox Code Playgroud)

但总是出现下一个错误:

错误 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>
Run Code Online (Sandbox Code Playgroud)

UPD

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

Lan*_*SFT 7

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

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

而不是正常的亲戚:

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

    但不知何故nuget.exe无法识别hintpath元素,并且由于该项目是格式化的,因此在打包过程中,它总是会尝试从Solution文件夹中的packagespackages.config文件夹中查找xx.nupkg文件。

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

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

以下是解决方法:

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

其内容应该是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="D:\PackagesForThisProject" />
  </config>
</configuration>
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 或者您可以将格式迁移packages.configPackageReference.

  • @demo 你好,现在已经解决了,对吧?您可以考虑将其添加为答案并标记它以分享有用的信息! (2认同)