我尝试通过运行nuget pack -properties Configuration=Release
命令来更新我的nuget包,但这会给我以下错误:
无法找到&bin / Release / {project-name} / bin / Release'。确定该项目已经建成
我不太确定为什么它会转到我的Release文件夹,然后继续转到另一个Release文件夹,因为它不存在?我在这里很迷茫,我不知道该怎么办。
答案 0 :(得分:2)
TL; DR
对于新的<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
文件,因为大多数设置都可以在新的Project格式的“包”标签中设置。但是,如果您确实有.nuspec
,则dotnet pack
还将合并任何与项目名称匹配的.nuspec
文件,从而允许从版本和元数据集中替换$
符号在您的.csproj
中。
更多详细信息
我也遇到了这个问题-在以前的版本中,我通常使用this approach来对同名.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
我只得到unhelpful message,因为nuget无法自动解析$令牌。
值不能为null或空字符串。 参数名称:值
但是,通过使用dotnet pack而不是nuget
dotnet pack MyProject.csproj -c Release
我到达了想要去的地方,即,多目标的NuGet程序包,其中的.nuspec
中的$符号与.csproj
正确同步(您可以通过打开{{ 1}}文件,例如7zip,并检查包根目录中的最终.nupkg
文件)
答案 1 :(得分:0)
我在一个多目标项目中遇到了同样的问题(同时针对net452和netstandard2.0)。
我的解决方法/黑客是将'TargetFramework = net452'添加到传递给Nuget的属性列表中,然后手动将netstandard2.0-输出添加到.nuspec文件中的文件部分中
希望有人找到更好的解决方案
答案 2 :(得分:0)
符文答案的一部分(设置TargetFramework=net471
NuGet属性)
并使用NuGet版本4.9.1(此处的说明:https://stackoverflow.com/a/53614798/1813219)
是我的理想之路。
答案 3 :(得分:0)
实际上,我只是解决了我的问题。 Nuget可能找不到隐藏的dll。这是我的解决方案:
构建项目;
在Visual Studio中显示所有文件,以便您可以查看隐藏的文件,以便可以看到bin文件夹下的dll;
右键单击,在文件资源管理器中打开文件夹,然后将其复制到当前文件夹,以使其替换/或取消隐藏文件;
再次执行“ Nuget Pack”。