我正在尝试 NuGet 中的新 Central Package Management 功能。
如文档中所述,如果您使用多个 NuGet 源(我使用的),现在需要在
nuget.config
文件中配置包源映射,否则您应该收到 NU1507
警告。
我的简化文件树是这样的:
MySolution.sln
Proj1.csproj
MyLibrary\
(这是一个包含我所有共享项目的外部存储库)
Directory.Packages.props
nuget.config
Proj2\
(示例库项目)
Proj2.csproj
以下是
Proj1.csproj
内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);MyLibrary\**\*</DefaultItemExcludes>
</PropertyGroup>
</Project>
这是
Directory.Packages.props
:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="JetBrains.Annotations" Version="2022.1.0" />
</ItemGroup>
</Project>
这是
nuget.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear/>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json"/>
<add key="Custom NuGet" value="https://nuget.mydomain.net/"/>
</packageSources>
<packageSourceMapping>
<packageSource key="nuget.org">
<package pattern="*"/>
</packageSource>
<packageSource key="Custom NuGet">
<package pattern="MyNamespace.*"/>
</packageSource>
</packageSourceMapping>
</configuration>
和
Proj2.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
在官方文档中,恢复包时应该使用
MyLibrary\nuget.config
,因为它位于Proj2.csproj
的父目录中,实际上当我通过dotnet build
构建解决方案时它可以工作,但是当我构建它时Visual Studio 我仍然收到 NU1507
警告。
我知道我可以通过将
nuget.config
文件复制到与解决方案文件相同的目录中来解决该问题(警告消失),但我有数百个包含 MyLibrary
目录的项目,我想保持所有配置集中。
此外,当它从命令行构建时,它可以按预期工作,那么我做错了什么?
配置文件中的一切似乎都是正确的。但是 MS 文档提到了此注释:中央包管理正在积极开发中。您可以在 Nuget/Home
提供任何反馈您可以尝试检查以下建议:
1 检查您的 Visual Studio 版本,此功能适用于 Visual Studio 2022.17.2 及更高版本。因为较旧的工具会忽略中央包管理配置和功能。查看更多信息请参阅文档:CPM
2 如果您无法加入包源映射但想要使用中央包管理,可以抑制警告。请参考文档:
<PropertyGroup>
<NoWarn>$(NoWarn);NU1507</NoWarn>
</PropertyGroup>
3 使用
dotnet nuget list source
获取包源列表并检查是否启用。