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

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

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

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

但总是得到下一个错误:

Error NU5012: Unable to find 'Autofac.4.9.4.nupkg'. Make sure the project has been built.

但解决方案已构建。

我正在使用最新版本的 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 被复制了。

最佳答案

我想问题的根本原因是 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.configD:\projects 旁边文件夹。

其内容应该是:

<?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 .

关于.net - NuGet CLI 抛出错误无法找到 .nupkg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57851156/

相关文章:

c# - 我需要在处理完控件后删除控件吗?

.net - 为手动选择的行放置 DataGridView 的行指示器

visual-studio-2010 - 保存后如何保留VS更改历史记录?

c# - 自动重新生成设计器文件

nuget - 在“程序包管理器控制台”窗口中输入\退出PowerShell模式

visual-studio-2010 - Nuget 不会下载 Visual Studio 2010 中缺少的包

c# - DotNet 的消息队列抽象

.net - 结构到字节数组以通过套接字发送

visual-studio - Entity Framework 未出现在Visual Studio 2017的``添加新项''列表中

f# - RdKafka 安装程序在 Visual Studio 中找不到/识别 librdkafka