如何处理nuget包中的类名冲突

问题描述 投票:0回答:1

我有一个带有静态类 MyNamespace.Global 的 C# 项目。 它包含在整个代码中使用的常量等内容。 例如全局。MAX_NAME_LENGTH。 我正在使用的第 3 方 nuget 包之一声明了一个没有命名空间的 Global 类。 当我尝试构建项目时,出现一堆错误,提示 Global 不包含 MAX_NAME_LENGTH。 它尝试使用第 3 方 Global 类而不是我的类,即使我的源文件顶部有“using MyNamespace”。 有没有办法解决这个问题,而不需要更改对 MyNamespace.Global 的所有调用或重命名我的 Global 类?

c# nuget-package build-error
1个回答
0
投票

我知道避免此问题并确保始终使用自己的命名空间内的类的最简单方法是将

using
指令移至 inside 命名空间声明。

如果你有这个:

using YourNamespaceWhereYourGlobalIs;

namespace SomeOtherNamespaceYouOwn;

internal class Consumer
{
    public void M()
    {
        Console.WriteLine(Global.Y);
    }
}

它将尝试使用全局范围的

Global
类。但如果你将
using
移到里面,就像这样:

namespace SomeOtherNamespaceYouOwn;

using YourNamespaceWhereYourGlobalIs;

internal class Consumer
{
    public void M()
    {
        Console.WriteLine(Global.Y);
    }
}

现在默认使用

Global
命名空间内的
YourNamespaceWhereYourGlobalIs
类。

对此的一些注意事项:

  1. 像这样在命名空间内使用声明实际上是一个很好的标准,并且受到 StyleCop 的鼓励。然而,这不是 Visual Studio 中的默认设置
  2. 我仍然会重命名你的
    Global
    类,因为这对于类(甚至命名空间)来说是一个非常糟糕的名称,因为
    global
    是语言中现有的保留关键字,应该避免重复使用它们。
© www.soinside.com 2019 - 2024. All rights reserved.