代码之家  ›  专栏  ›  技术社区  ›  Ole Albers

获取混淆的“模糊引用”错误

  •  2
  • Ole Albers  · 技术社区  · 11 月前

    (免责声明):我知道什么是模棱两可的参考以及如何解决它。我只是很困惑为什么会出现在这里

    我有以下代码:

    using SMBLibrary;
    
    namespace SquirrelCam
    {
        public class NothingAtAll
        {
            public void DoNothing()
            {
                var fileAttribute = FileAttributes.Normal;
            }
        }
    }
    

    在VS中创建以下错误:

    CS0104:“FileAttributes”是“SMBLibrary”之间的不明确引用。FileAttributes“和”系统。IO.FileAttributes'

    我知道我能解决这个问题 完全有资格 SMBLibrary.FileAttributes .我只是想知道 为什么? 这就出现了。我不使用系统。IO无处不在。不在课堂上,也不在全球范围内。我甚至做了一个全文搜索只是为了确定。

    我也只需要nuget包(SMBLibrary和MS.AspNet.WebHooks.Receivers.Generic),它们似乎也不依赖于System。IO根据nuget描述。在.csproj-文件中也找不到任何内容。

    该项目对NetCore的依赖性不足为奇。使用系统的应用程序。IO,但单凭这一点不应该“足以”导致这种行为。

    我已经清理了解决方案,但仍然收到了警告。

    1 回复  |  直到 11 月前
        1
  •  3
  •   Guru Stron    11 月前

    启动。NET 6默认模板启用 implicit global usings :

    开始于。NET 6中,隐式全局使用指令被添加到新的C#项目中。这意味着您可以使用在这些命名空间中定义的类型,而无需指定其完全限定名称或手动添加using指令。隐式方面是指全局using指令被添加到项目的obj目录中生成的文件中。

    为使用以下SDK之一的项目添加了隐式全局使用指令:

    • Microsoft.NET.Sdk
    • Microsoft.NET.Sdk.Web
    • Microsoft.NET.Sdk.Worker
    • Microsoft.NET.Sdk.WindowsDesktop

    System.IO 是隐式导入的名称空间之一(请检查已链接的文档),因此添加时会出现问题 using SMBLibrary; 它也有 FileAttributes .

    您可以通过设置完全禁用该功能 ImplicitUsings disable 在csproj文件中:

    <ImplicitUsings>disable</ImplicitUsings>
    

    或者只是通过添加来删除不需要的 Using 具有 Remove 属性:

    <ItemGroup>
        <Using Remove="System.IO"/> <!-- will remove only the System.IO-->
    </ItemGroup>