2016-11-09 232 views
1

我有一些Nuget包创建并安装在我的本地Nuget服务器上。他们工作正常。我可以安装它们没有问题。 但是,当我创造了另一个包,并把它放到包安装服务器总是失败,出现错误:Nuget包安装失败

Could not install package ... You are trying to install this package into a project that targets '.NETFramework,Version=v4.5', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author. 

该项目是完全一样的:它使用相同的架构版本(4.5)。我已经创建了另一个具有相同设置的包,并且它按预期工作。 该项目没有引用任何需要其他框架的东西。实际上,它使用的所有程序集也都用于其他程序包。

nuspec是相同的:与其他包中的目标位置相同。我试图包含其他框架版本,并没有帮助。

<file src="bin\Release\*.*" target="lib\net45\" /> 

我检查了生成的nupkg中包含了什么。它有lib/net45中的dll。我没有发现与其他软件包有任何不同之处。

我完全困惑。为什么非常类似项目的软件包会产生不同的结果。

有什么方法可以找出导致错误的原因: 安装失败。回滚...

维克多

+0

您使用的是哪种nuget饲料?我与ProGet有类似的问题。 –

回答

0

错误的意思是“这个项目是.NET 4.5和您正在试图安装NuGet包不包含任何用于.NET 4.5”。看起来有点不对劲。所以首先让我们来看看nuget包。

这条线*.nuspec文件:

<file src="bin\Release\*.*" target="lib\net45\" /> 

的意思是“从bin\Release的所有内容复制,并把在lib\net45目录中的NuGet包档案内”。它不检查“bin \ Release”中的文件是否实际上是针对.NET 4.5编译的。它不检查“bin \ Release”中是否有任何内容。

第1步:您需要检查包含您的nuget包(不是使用它的项目)的代码的项目,您实际上正在使用.NET 4.5构建它。例如,您可以检查*.csproj包含行这样的:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

是否确定运行干净,并且建设做出新的DLL。确保你使用“释放”配置,而不是偶然的“调试”。

第2步:在应该使用nuget包的项目中,检查第1步中制作的dll是否确实正常。您可以手动添加对dll的引用以绕过nuget(引用 - >添加引用 - >浏览并选择步骤1中创建的dll)。如果它能起作用,那么你知道你的dll是好的,问题在于 - nuget包装。

第3步:如果在第一步和第二步是确定检查你如何打包和发布的NuGet包,并检查您的NuGet饲料。很难说没有你的具体环境的细节,但有很多选择:

  • 也许你的nuget饲料拒绝nuget发布命令?
  • 也许你在推错版本号并使用不同的版本?
  • 也许您正在推送已存在版本的pkg,并且供稿不会覆盖它。
  • 也许你的nuget feed正在搞乱pkg文件?
+0

第1步很好。已经检查过了。所有项目都使用.Net 4.5。第2步也很好。我可以参考该项目没有问题。第3步更棘手。我使用Nuget包资源管理器检查了Feed中包含的内容。一切对我来说都是正确的。 lib/net45包含正确的文件。 – victor

+0

我已经更改了软件包的版本号,上传了它,并且已安装!有点奇怪。它看起来像是将包缓存在某个地方,而VS没有更新它。我考虑过并清理了解决方案使用的所有软件包文件夹,但它没有帮助。我一直得到失败的安装,直到我有一个更新的版本 – victor