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

问题描述 投票:0回答:5

我尝试使用 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”和当前程序集之间的区别?

enter image description here

对于上述项目,也有

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

.net visual-studio nuget autofac nuget-package
5个回答
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>
  1. 当您使用像

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

    但是不知何故

    nuget.exe
    无法识别hintpath元素,并且由于该项目是
    packages.config
    格式,在打包过程中,它总是会尝试从Solution文件夹中的packages文件夹中查找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>

然后将

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

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

  1. 或者您可以
    packages.config
    格式迁移到
    PackageReference

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


1
投票

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

修复:删除文件

MyProject\MyProject.sln
或重命名为
MyProject\MyProject._sln
作品


0
投票

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


0
投票

就我而言,在与项目相同的文件夹中有一个解决方案文件。通过删除 sln 文件解决了这个问题,因为我们并不真正需要它。

© www.soinside.com 2019 - 2024. All rights reserved.