我正在尝试通过运行命令来更新我的 nuget 包,nuget pack -properties Configuration=Release
但这给了我以下错误:
找不到“bin/Release/{project-name}/bin/Release”。确定项目已经建成
我不太清楚为什么它会进入我的 Release 文件夹,然后继续进入另一个 Release 文件夹,因为它不存在?我在这里很迷茫,我不知道该怎么办。
我正在尝试通过运行命令来更新我的 nuget 包,nuget pack -properties Configuration=Release
但这给了我以下错误:
找不到“bin/Release/{project-name}/bin/Release”。确定项目已经建成
我不太清楚为什么它会进入我的 Release 文件夹,然后继续进入另一个 Release 文件夹,因为它不存在?我在这里很迷茫,我不知道该怎么办。
TL;博士
对于新的<Project Sdk="Microsoft.NET.Sdk">
.csproj 文件格式,用于dotnet pack
构建 NuGet 包,即使它们以 .Net Framework 为目标或项目是多目标的。.csproj
从包含您的(以及可选的.nuspec
)的目录中运行它
dotnet pack MyProject.csproj -c Release
请注意,默认情况下dotnet pack
将输出.nupkg
放置在/bin/Release
文件夹中,该文件夹与旧文件夹的当前默认文件夹不同nuget pack
。
我建议您不要.nuspec
为新.csproj
格式创建显式文件,因为大多数设置都可以在新项目格式的“包”选项卡中设置。但是.nuspec
,如果您dotnet pack
有..nuspec
$
.csproj
更多详情
我也遇到过这个问题——在以前的版本中,我通常使用这种方法来打包一个.csproj
具有.nuspec
相同名称的文件,这样我就可以使用所有的 $ 标记,如$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 无法自动解析 $ 令牌。
值不能为 null 或空字符串。参数名称:值
但是,通过使用 dotnet pack 而不是 nuget
dotnet pack MyProject.csproj -c Release
我到达了我想要的位置,即一个多目标 NuGet 包,其中 $ 符号.nuspec
正确同步.csproj
(您可以通过打开.nupkg
例如 7zip 中的文件并检查.nuspec
包根目录中的最终文件来验证这一点)
我在一个多目标项目(同时针对 net452 和 netstandard2.0)中遇到了同样的问题。
我的修复/破解是将“TargetFramework=net452”添加到传递给 Nuget 的属性列表中,并手动将 netstandard2.0 输出添加到 .nuspec 文件中的文件部分
希望有人找到更好的解决方案
Rune 的部分答案(设置TargetFramework=net471
NuGet 属性)
并使用 NuGet 4.9.1 版(此处的说明:https ://stackoverflow.com/a/53614798/1813219 )
对我来说是一条路。
其实我只是解决了我的问题。Nuget 可能找不到隐藏的 dll。这是我的解决方案:
构建项目;
在visual studio中显示所有文件,这样就可以看到隐藏的文件,这样就可以看到bin文件夹下的dll;
右键单击,在文件资源管理器中打开文件夹,然后将其复制到当前文件夹,让他们替换/或取消隐藏文件;
再次执行“Nuget Pack”。