Nuget包安装失败

时间:2016-01-25 11:39:44

标签: .net nuget

尝试从我们新创建的私有Nuget Feed安装软件包时,会出现以下错误。

无法安装包' GC.Timecode 1.0.0.3'。您正在尝试将此软件包安装到以“.NETFramework,Version = v4.5.1'”为目标的项目中,但该软件包不包含与该框架兼容的任何程序集引用或内容文件。

Nuget包也针对4.5.1。 (截图取自Nuget Package Explorer)

Nuget Package由Octopack通过On premises TFS创建,然后发布到私有Proget Server

enter image description here

Nuspec文件看起来像这样

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>GC.Timecode</id>
<version>1.0.0.3</version>
<authors>user</authors>
<owners>user</owners>
<licenseUrl>http://example.com</licenseUrl>
<projectUrl>http://example.com</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>The GC.Timecode deployment package, built on 25/01/2016</description>
<releaseNotes />
</metadata>
</package>

包裹内容

enter image description here

这里发生了什么?

8 个答案:

答案 0 :(得分:14)

Slippery Pete为我解决了这个问题。

我第一次尝试安装我的装配时,我得到了:

  

无法安装包'包名称'。您正尝试将此&gt;软件包安装到以“.NETFramework,Version = v4.6.1”为目标的项目中,但&gt;软件包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请与包&gt;作者联系。

确保Nuget包中的Assembly在'lib \ net45'文件夹中后,我仍然收到错误!

然而,在转到Tools-&gt; Options-&gt; Nuget-&gt; General并清除缓存后,问题就解决了。

答案 1 :(得分:8)

确保您的nuspec文件包含&#39; lib / net45&#39;目标

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

答案 2 :(得分:7)

问题是Octopack默认只复制现有的文件夹结构,而Nuget会将你的dll打包成lib文件夹。

对于懒惰,您可以使用此包来获取构建在每个构建

上的nuget包

https://www.nuget.org/packages/CreateNewNuGetPackageFromProjectAfterEachBuild/

答案 3 :(得分:4)

这发生在我身上,我没有发现我的解决方案发布到任何这些网站,所以希望这有助于其他人。

我得到的信息是:

  

无法安装包'包名称'。您正在尝试安装   这个包成了一个目标项目   '.NETFramework,Version = v4.6.1',但包中不包含任何内容   程序集引用或与之兼容的内容文件   框架。有关更多信息,请与软件包作者联系。

我有一个为所有4.x版本构建的Nuget包,所以它没有特别指定版本4.6.1并不重要。我尝试将类库构建更改为4.0,4.5,4.5.2,4.6,4.6.1和4.6.2,但没有解决此问题。我还在个人/ lib / Net4(5,51,52,6,61,62)文件夹中添加了多个版本的DLL,错误仍然存​​在。

最后,我发现我的问题的原因是我创建的初始私有Nuget包是一个“坏”包而且坏包被缓存到我的本地机器。

我修复了包问题并将新包推送到我们的Nuget服务器(保留版本名称相同),但Visual Studio中的Nuget没有拉下新包,而是引用了我本地计算机上缓存的坏包在。软件包管理器显示软件包已更新并从我们的Nuget服务器正确显示信息,但它从未提取新软件包。它始终在以下位置检索缓存包:

C:\用户\ your_user_account \ .Nuget \包\

只需在本地用户帐户下删除相关软件包,强制软件包管理器从服务器下载新软件包。

答案 4 :(得分:1)

如果您使用的是nuspec,请确保在元数据中将所有已安装的软件包都标记为“依赖项”。

<dependencies>
      <dependency id="MyIncludedPackage" version="1.13.0" />
    </dependencies>
  </metadata>

添加所有软件包可以为我解决此问题。

答案 5 :(得分:1)

我也收到以下消息。

  

无法安装软件包“软件包名称”。您正在尝试安装   将该软件包打包成一个针对目标的项目   '.NETFramework,Version = v4.6.1',但该软件包不包含任何   程序集引用或与此兼容的内容文件   框架。有关更多信息,请与程序包作者联系。

就我而言,changing the package management format from packages.config to PackageReference解决了这个问题。

答案 6 :(得分:1)

我刚尝试过的另一种可能性是本地Nuget工具可能太旧了

我正在尝试安装{.3}},这是一个.Net标准2.0项目。我的本地项目是 兼容的.NET Framework 4.7.2。但是我得到了问题中引用的错误。

问题是我的VS2015安装的Nuget不是最新的。尽管在[工具]> [扩展] 下没有显示任何可用的更新,但实际上https://github.com/alastairtree/LazyCache上有更新得多的Nuget(我相信是3.6倍对3.4倍)。

我安装了该软件,问题已解决。显然,旧的Nuget无法理解什么是.NET Standard。

答案 7 :(得分:0)

我认为解决方案可能因情况而异,但就我而言,NuGet程序包是在“类库.NET Core 3.1”中构建/编译的,而使用此程序包的项目则属于.NET Framework。我只是将项目类型更改为.NET Core 3.1,并再次添加了NuGet包,它对我有用。

相关问题