【问题标题】:Native NuGet package installation failure本机 NuGet 包安装失败
【发布时间】:2019-08-11 14:58:17
【问题描述】:

我创建了两个 NuGet 包:一个原生 (C++) NuGet 包和一个依赖于前者的常规 .NET NuGet 包;并将两者部署到内部 NuGet 存储库。
然后我创建了一个测试 .NET 项目并成功安装主要的 .NET 包,而 PM 也安装了本机包。

接下来,我尝试将 .NET 包安装到实际的消费者 .NET 项目中,安装失败并显示错误消息:

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

两个项目(测试/成功和产品/不成功)确实以 .NET v4.7.1 为目标,都以 AnyCPU 为目标,并且都使用相同的工具集。

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Exe</OutputType>
    <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>

我不知道为什么安装我的包会在产品项目中产生上述错误。

提前感谢大家的帮助。

【问题讨论】:

  • 您好朋友,如果您通过Package Manager UI 清理nuget 包,结果是什么?看来您在两个项目中使用了不同的方式来使用包。请确保两个项目都是 PackageReference format ,然后通过 UI 使用所有包。我认为之后结果可能相同,全部安装成功或全部失败。如果失败,请分享更多细节。
  • 您说这两个项目都针对 .NET 4.7.2,所以我假设 C++ 项目仍然是 .NET,而不是需要从其他 .NET 库 P/Invoked 的本机 win32 dll .当您将 nupkg 作为 zip 文件打开时,这些 dll 是否在 lib/net472 文件夹中?
  • @zivkan 当我说两个项目都针对 .NET v4.7.1 时,我指的是两个消耗项目:第一个 - 测试/成功,第二个 - 产品/不成功。本机项目是纯 C++ 项目,不针对 .NET。
  • 在这种情况下,不能像打包 .net 程序集一样打包本机包,这几乎肯定是您收到错误的原因。如果您只想支持 SDK 风格的项目(由但不限于 .NET Core 使用),请查看 libuv 包的布局。否则,要支持所有 (.NET) 消费项目类型,您需要提供自己的道具和目标文件。以 System.Data.SQLite.Core 包为例,看看它是如何做到的。
  • @LanceLi-MSFT 是它????????在生产项目中 packages.config 仍在使用中。我将它转换为 PackageReference 格式,并且原生包像魅力一样被消耗。很遗憾,我无法将评论标记为答案,因此请务必为我的问题添加答案。

标签: c# c++ visual-studio-2017 nuget


【解决方案1】:

然后我创建了一个测试.NET项目并成功安装了lead .NET 包,而 PM 也安装本机包。

接下来,我尝试将 .NET 包安装到实际的消费者 .NET 中 项目,安装失败并显示错误消息:

这种消息the package does not contain any assembly references or content files that are compatible with that framework在线有很多解决方法。对于您的具体问题,一个成功,另一个不成功:

  1. 我建议先clean the nuget cache,然后再做其他检查。因为当您安装或恢复 nuget pakcages 时,它会首先尝试在缓存中找到它。类似问题见this

  2. 然后确保您在同一解决方案中的所有项目都使用相同的方式来管理 nuget 包。 (所有 PackageReference 或所有 packages.config)。对于 VS217 及更高版本,更推荐使用 packageReference :) 类似问题参见 this

【讨论】:

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