为了总结其他答案并提供一些最新信息:
PackageReference
在C++项目中没有得到官方支持,因为它与NuGet和Visual Studio的整合不完全,
但是:
MSBuild支持
PackageReference
,Visual Studio 16.9及更高版本(这是2019年)也实现了一些集成。
完整步骤在
Make the PackageReference support general purpose for all languages PR的
评论中有描述,但基本上是:
在项目文件夹上面创建一个名为
Directory.Build.props
的文件,并包含以下内容:
<Project>
<Import Project="$(MSBuildProjectExtensionsPath)$(MSBuildProjectFile).*.props" />
</Project>
并创建 Directory.Build.targets
文件,并将以下内容添加到文件中:
<Project>
<Import Project="$(MSBuildProjectExtensionsPath)$(MSBuildProjectFile).*.targets" />
</Project>
- 在项目文件中,在
Project
节点下添加以下内容:
<ItemGroup>
<ProjectCapability Include="PackageReferences" />
</ItemGroup>
并且
<PropertyGroup>
<NuGetTargetMoniker Condition="'$(NuGetTargetMoniker)' == ''">native,Version=v0.0</NuGetTargetMoniker>
</PropertyGroup>
(或类似名称)
以上操作将使MSBuild和Package Manager工作,但有一些注意事项,例如在通过UI修改包后需要“全部保存”,包引用不会显示在解决方案资源管理器的引用节点中等。
请注意,Visual C++团队的PM Augustin Popa在此处解释了为什么将项目更新到部分支持的PackageReference
可能不是一个好主意,因为他们对未来有其他计划:
我们的担忧是,如果开发人员做了迁移到C++ PackageReference的工作,他们会后来意识到我们不打算提供持续支持,并希望他们转向其他东西。我预计这将是一种令人沮丧的经历。
他所说的“其他东西”可能是与vcpkg更好地集成,正如他在对Visual Studio的功能请求的评论中所讨论的那样:
从我们这边来看,我们必须考虑到具有不同要求的非常庞大的用户群体的需求,其中包括对CMake项目的支持,为非Windows平台安装软件包,以及提供一个更好的故事,以获得与它们附加到和相互兼容的可执行文件相容的库(今天使用vcpkg实现)。 NuGet没有设计来处理这些情况[...]
即使是Microsoft内部的开发团队也在使用PackageReference
方法,正如此评论中所见:
我们通过此Pull Request在React Native Windows中实现了这一点。
正如已经提到的,MSBuild可以处理C++(VCXPROJ)项目的这种情况。
Visual Studio IDE的一流支持对于想要放弃传统的NuGet.exe / pakcages.config机制但不能承担重写整个项目以适应VCPKG的现有项目将非常有益。
至少,在使用PackageReference时有一个驱动空间的好处,因此不仅仅是外观问题。
PackageReference
可以与各种类型的项目一起工作,详见我的答案。但是,完全集成到 Visual Studio 中的功能却无法正常运行。 - Borislav Ivanov