我试图通过运行命令nuget pack -properties Configuration=Release
来更新我的NuGet包,但是我遇到了以下错误:
找不到'bin/Release/{project-name}/bin/Release'。请确保已经构建了该项目。
我不太确定为什么它会进入我的 Release 文件夹,然后继续进入另一个 Release 文件夹,因为这实际上不存在?我很困惑,也不知道该怎么做。
我试图通过运行命令nuget pack -properties Configuration=Release
来更新我的NuGet包,但是我遇到了以下错误:
找不到'bin/Release/{project-name}/bin/Release'。请确保已经构建了该项目。
我不太确定为什么它会进入我的 Release 文件夹,然后继续进入另一个 Release 文件夹,因为这实际上不存在?我很困惑,也不知道该怎么做。
TL;DR
对于新的<Project Sdk="Microsoft.NET.Sdk">
.csproj文件格式,即使目标为.Net Framework或项目是多目标的,也请使用dotnet pack
来构建NuGet包。从包含您的.csproj
(和可选的.nuspec
)的目录中运行此命令。
dotnet pack MyProject.csproj -c Release
dotnet pack
会将输出的.nupkg
文件放在/bin/Release
文件夹中,这与旧版nuget pack
的默认文件夹不同。.csproj
格式创建显式的.nuspec
文件,因为大多数设置可以在新项目格式的“Packages”选项卡中设置。但是,如果您确实有一个.nuspec
文件,那么dotnet pack
还将组合与项目名称匹配的任何.nuspec
文件,从而允许使用.csproj
中设置的版本和元数据中的$
符号替换。.nuspec
文件的.csproj
进行打包,以便我可以使用所有$标记,如$id$
,$version$
。<Project Sdk="Microsoft.NET.Sdk">
csproj格式执行此操作时:nuget pack {MyProject}.csproj -Prop Configuration=Release
我收到了相同的错误(请注意bin\release
的“重复”):
错误 NU5012:无法找到 'bin\Release{MyProject}\bin\Release\'。确保已构建该项目。
如果我尝试针对包含符号的.nuspec
打包(NuGet版本:4.7.1.5393)
nuget pack {MyProject}.nuspec -Prop Configuration=Release
我只是收到了无用的信息,因为nuget不能自动解析$标记。
值不能为空或为空字符串。 参数名称:值
然而,通过使用dotnet pack而不是nuget
dotnet pack MyProject.csproj -c Release
我在一个多目标项目(同时针对net452和netstandard2.0)中遇到了同样的问题。
我的解决方法/技巧是将'TargetFramework=net452'添加到传递给Nuget的属性列表中,然后在.nuspec文件的files部分手动添加netstandard2.0-output。
希望有人能找到更好的解决方案。
Rune的回答中提到(设置TargetFramework=net471
NuGet属性),并使用NuGet版本4.9.1(这里有说明:https://dev59.com/2lcP5IYBdhLWcg3wDmUh#53614798)是我选择的方法。
其实我已经在我的端解决了这个问题。Nuget可能无法找到隐藏的dll。以下是我的解决方案:
构建项目;
在Visual Studio中显示所有文件,以便您可以看到隐藏的文件,从而可以在bin文件夹下看到dll;
右键单击,在文件资源管理器中打开文件夹,然后将其复制到当前文件夹并让它们替换/或取消隐藏文件;
再次执行“Nuget Pack”。