从 .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”中不存在类型或命名空间名称“缓存”