【问题标题】:Nuget package installation failureNuget包安装失败
【发布时间】:2020-08-17 12:40:42
【问题描述】:

当尝试从我们新创建的私有 Nuget Feed 安装包时,我收到以下错误。

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

Nuget 包还针对 4.5.1。 (来自 Nuget 包资源管理器的屏幕截图)

Nuget 包由 Octopack 通过本地 TFS 创建,然后发布到私有 Proget 服务器

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>

包装内容

这是怎么回事?

【问题讨论】:

  • 如果您检查 lib\net45\assemblyname.dll 程序集,您是如何获得该屏幕截图的,是从 NuGet 包资源管理器获得的吗?当不通过您的提要使用时,包是否可以工作,例如从文件系统中使用?它可以在其他机器上运行吗? .NuSpec 是什么样的?什么包的内容?您使用什么提要软件?

标签: .net nuget


【解决方案1】:

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

我第一次尝试安装我的程序集时:

无法安装包“包名”。您正在尝试将此 >package 安装到以“.NETFramework,Version=v4.6.1”为目标的项目中,但 >package 不包含任何与该框架兼容的程序集引用或内容文件。如需更多信息,请联系包>作者。

确保 Nuget 包中的程序集位于“lib\net45”文件夹中后,我仍然收到错误消息!

但是进入Tools->Options->Nuget->General并清除缓存后,问题就解决了。

【讨论】:

  • 我遇到了同样的问题。您还可以使用以下命令通过包管理器控制台清除 Nuget 缓存:nuget locals all -list
  • 嗯?我看到Tools &gt; Options 和“NuGet”是NuGet Package Manager,然后是General,如上所述,但只有3个选项:允许下载丢失的pkg,在构建期间自动检查它们,并跳过应用绑定重定向。没有关于清除缓存的内容。
  • 在 Visual Studio 2017 Pro 的 General 页面上有一个 [Clear All NuGet Cache(s)] 按钮。
【解决方案2】:

确保您的 nuspec 文件包含“lib/net45”目标

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

【讨论】:

    【解决方案3】:

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

    我收到的消息是:

    无法安装包“包名”。您正在尝试安装 这个包到一个针对目标的项目中 '.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:\Users\your_user_account\.Nuget\packages\

    只需在您的本地用户帐户下删除有问题的包,包管理器就会从服务器上拉下新包。

    【讨论】:

      【解决方案4】:

      问题在于,默认情况下,Octopack 只会复制现有的文件夹结构,而 Nuget 会将您的 dll 打包到 lib 文件夹中。

      对于懒惰的人,您可以使用这个包来获取在每个构建上构建的 nuget 包

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

      【讨论】:

      • 我会的,2 天后 SO 会让我 :)
      • 这个包太棒了,如果你用其他方式来做,你会疯的。谢谢!
      【解决方案5】:

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

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

      添加所有软件包为我解决了这个问题。

      【讨论】:

        【解决方案6】:

        我也收到了以下消息。

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

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

        【讨论】:

        • 谢谢!我在安装 Microsoft.VisualStudio.PlatformUI 以使用 DelegateCommand 时遇到问题,将 package.config 更改为 packagereference 有助于解决问题。
        【解决方案7】:

        我刚刚解决的另一种可能性是本地 Nuget 工具可能太旧了

        我正在尝试安装 https://github.com/alastairtree/LazyCache,这是一个 .Net 标准 2.0 项目。我的本地项目是 .NET 框架 4.7.2, 兼容。然而我得到了问题中引用的错误。

        问题是我安装的 VS2015 Nuget 不是最新的。尽管在“工具”>“扩展”下它没有显示任何可用的更新,但实际上在 https://www.nuget.org/downloads 上有一个更新的 Nuget(我相信是 3.6 倍和 3.4 倍)。

        我安装了那个,问题就解决了。显然,旧的 Nuget 并不了解 .NET Standard 是什么。

        【讨论】:

        • 你是怎么安装的?
        • @MuhammadAli 从 Visual Studio 2017 开始,安装程序包括 NuGet 包管理器。对于 2015 年或更早的版本,请参阅 nuget.org/downloads,其中包含 2015 年和 2013 年的下载
        • 是的,我安装了 VS2017,但你说我安装了新版本,因为 VS 安装了旧版本的 nuget。那么如何安装 nuget 呢?在下载中,我只看到一个控制台 exe。那个exe怎么办?请你能解释更多吗?
        • @MuhammadAli 在我的情况下是 2015 年。到 EXE 的直接链接是:dist.nuget.org/win-x86-commandline/latest/nuget.exe。另请参阅:stackoverflow.com/a/47497456/3195477
        • 您好,我解决了,我的包错误,例如 Mono.Android v8.0 版本,我使用的是 6。
        【解决方案8】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-21
          • 1970-01-01
          相关资源
          最近更新 更多