【发布时间】: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