我正在尝试从 .Net Core 3.1 迁移到 .Net 6。我更新了 TargetFramework 和一些依赖项。
我有这段代码
public CustomerSettingsDefaults(Microsoft.Extensions.Configuration.IConfigurationSection configuration)
{
....
var personalizedUrls = configuration.GetRequiredSection(@"PersonalizedUrls");
但是在项目构建过程中
Severity Code Description Project File Line Suppression State Error CS0121 The call is ambiguous between the following methods or properties: 'Microsoft.Extensions.Configuration.ConfigurationExtensions.GetRequiredSection(Microsoft.Extensions.Configuration.IConfiguration, string)' and 'Common.Extensions.ConfigurationExtensions.GetRequiredSection(Microsoft.Extensions.Configuration.IConfiguration, string)' Crm.Infrastructure C:...\Configuration\CustomerSettingsDefaults.cs 23 Active
我的ConfigurationExtensions是这样定义的
namespace Common.Extensions
{
public static class ConfigurationExtensions
{
public static IConfigurationSection GetRequiredSection(this IConfiguration configuration, string sectionName)
{
var section = configuration.GetSection(sectionName);
if (section is null)
{
throw new InvalidOperationException($@"The configuration is missing the {sectionName} section");
}
return section;
}
}
}
如何解决?
最佳答案
嗯,您自己的 GetRequiredSection
扩展方法与添加到 Microsoft.Extensions.Configuration.Abstractions
中的 GetRequiredSection
之间存在冲突.NET 6。两者都扩展相同的接口(interface)并采用相同的参数,因此如果两个命名空间(您的 Common.Extensions 和 .NET 的 Microsoft.Extensions.Configuration)都在范围内,当然编译器不知道该选择哪一个。
因此,您可以完全删除自己的扩展方法,因为它似乎与 .NET 提供的扩展方法执行相同的操作,这意味着您少了一件需要维护的事情。
如果你绝对需要继续使用自己的方法,那么你需要像静态方法一样显式调用它:
var personalizedUrls = Common.Extensions.ConfigurationExtensions.GetRequiredSection(configuration, "PersonalizedUrls");
关于c# - 从 Net Core 3.1 迁移到 Net 6 期间,以下方法或属性之间的调用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73285074/