从 .NET 浏览的命名空间列表中删除 MyCompany.Task

Posted

技术标签:

【中文标题】从 .NET 浏览的命名空间列表中删除 MyCompany.Task【英文标题】:Remove MyCompany.Task from the list of namespaces that .NET looks through 【发布时间】:2021-03-27 07:34:26 【问题描述】:

我有一个项目使用命名空间 MyCompany.Task 导入 Nuget 包。我的项目文件的命名空间为MyCompany.MyProjectName.Services

我也有返回类型为System.Threading.Tasks.Task 的方法,它被导入为using System.Threading.Tasks,这样我就可以说Task 作为方法返回类型而不是完全限定名称。

但是,现在我已经导入了上述 Nuget 包,我收到 Task is a namespace but is used like a type. 的错误,这是因为它与默认系统 Task 类型命名空间冲突。

我该如何解决这个问题,而不必完全限定我对Task 的使用。基本上,我想在我说Task 时默认使用System.Threading.Tasks.Task,并在我想要其他任务命名空间中的某些内容时使用SomeAlias.Task

本质上,我正在寻找一种方法来覆盖 nuget 从我的项目中使用的命名空间。更改 nuget 本身不是一种选择。

这样的事情可能吗?

【问题讨论】:

请仔细阅读问题。这并不能解决问题。该问题是由于 MyCompany.Task 是一个命名空间(甚至还没有涉及 using 语句)而 System.Threading.Tasks.Task 是一个类型。所以我不能使用系统任务类型,因为 C# 认为我正在尝试使用来自 MyCompany.Task 命名空间的东西。 MyCompany.Task is a namespace (no using statement even involved yet),然后添加。这将消除冲突。 我已更改您问题的标题。希望这会减轻一些困惑。 好电话@robert @RyanWilson 我试过了 - 它不能解决问题。 【参考方案1】:

与其他答案类似,但您需要为 System.Threading.Tasks.Task 使用别名

using SystemTask = System.Threading.Tasks.Task;

或者,您可以添加别名,为此单击解决方案资源管理器下的引用中的 nuget,然后打开属性,在这里您可以设置别名,例如 myNuget。然后在需要它的任何类中添加以下内容

extern alias myNuget;
using myNuget::MyCompany.Task;

这是关于它的文档https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern-alias

【讨论】:

***.com/questions/65326678/… 这是我的后备计划,但我不想重构我的整个项目来使用这个别名类型。我想在不完全限定或别名的情况下使用系统类型。 我的意思是 .NET 例如具有命名空间解析范围。因此,当我开始输入内容时,它会查看所有名称空间以查看是否有任何匹配项。我想要做的是从 .NET 浏览的命名空间列表中删除 MyCompany.Task @Bassinator 不幸的是,这是我所知道的唯一方法,除非您要创建第二个项目和一个包装器,因此您不需要直接引用 MyCompany.Task 的 nuget,但这听起来像是更多的工作比它的价值。 @Bassinator 我实际上找到了一个解决方案,外部别名,我更新了我的答案,甚至都不知道它存在

以上是关于从 .NET 浏览的命名空间列表中删除 MyCompany.Task的主要内容,如果未能解决你的问题,请参考以下文章

名称空间“System.Runtime”中不存在类型或命名空间名称“缓存”

获取 AppDomain 中所有可用命名空间的列表

从 XML 中删除多个 XML 命名空间

如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?

如何从 XML 元素中删除一个特定的命名空间

从 WCF RESTful 响应中删除 xml 命名空间