我尝试使用 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
。
我猜问题的根本原因是
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>
当您使用像
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文件。 通常
project
文件夹和packages
文件夹位于solution
文件夹中,因此效果很好。但由于您的项目文件夹(在您的情况下其名称为 projects
)不在解决方案文件夹中,nuget.exe 将不知道在哪里找到它。这就是出现错误消息 Unable to find 'Autofac.4.9.4.nupkg'
的原因。这就是为什么构建成功但我们无法创建 nuget 包。
以下是解决方法:
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
。
然后就可以成功创建包了。
我有同样的错误,目录结构如下
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
Nikoloy Pakudin 的解决方案对我有效。 我花了将近 2 天来解决这个问题。
修复:删除文件
MyProject\MyProject.sln
或重命名为MyProject\MyProject._sln
作品
就我而言,项目的“packages”文件夹引用了以前的 NuGet 版本。删除“packages”文件夹中的所有文件夹。然后,从项目中选择“管理 NuGet 引用...”并允许 NuGet 包管理器恢复您的引用。现在,尝试运行“nuget pack...”。
就我而言,在与项目相同的文件夹中有一个解决方案文件。通过删除 sln 文件解决了这个问题,因为我们并不真正需要它。