无法在命名空间内使用“using”进行编译

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

我有以下代码:

using Data;
using MyProject_API.Models.ViewModels;
using System.Linq;
using Utilities.Web.Authentication;

namespace MyProject_API.Services.EmailTemplates
{

    /// <summary>
    /// Defines the <see cref="EmailTemplatesSearch" />
    /// </summary>
    public class EmailTemplatesSearch
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailTemplatesSearch"/> class.
        /// </summary>
        /// <param name="dataContext">The dataContext<see cref="DataContext"/></param>
        /// <param name="user">The user<see cref="MyProjectIdentity"/></param>
        public EmailTemplatesSearch(DataContext dataContext, MyProjectIdentity user)
        {
            _db = dataContext;
            _user = user;
        }

我在

CodeFormatter
的帮助下清理了代码并得到以下代码:

namespace MyProject_API.Services.EmailTemplates
{
    using MyProject_API.Models.ViewModels;
    using System.Linq;
    using Utilities.Web.Authentication;

    /// <summary>
    /// Defines the <see cref="EmailTemplatesSearch" />
    /// </summary>
    public class EmailTemplatesSearch
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailTemplatesSearch"/> class.
        /// </summary>
        /// <param name="dataContext">The dataContext<see cref="DataContext"/></param>
        /// <param name="user">The user<see cref="MyProjectIdentity"/></param>
        public EmailTemplatesSearch(DataContext dataContext, MyProjectIdentity user)
        {
            _db = dataContext;
            _user = user;
        }

如您所见,

CodeFormatter
失去了
using Data;
。我尝试将
using Data;
添加到使用列表中,但代码无法编译,无法找到
DataContext
命名空间中的
Data
。我解决了将
using Data;
从名称空间移出的问题,但它看起来像拐杖。
DataContext
的定义类似于

namespace Data
{
    public class DataContext

  • 为什么
    CodeFormatter
    会失去
    using Data;
  • 为什么
    using Data;
    在命名空间内不起作用?

我搜索过类似的问题: LINQ to SQL Designer Bug“using”指令应该在命名空间内部还是外部?等等,但我仍然不明白如何解决我的问题

c# visual-studio namespaces code-formatting
1个回答
0
投票

maccettura 的第一条评论中已经给出了解决方案。

如果您阅读了“我的回答”主题“‘using’指令应该在 C# 中的命名空间内部还是外部?”你已经链接了,你应该明白,当你有 using Data;

inside
你的声明 namespace MyProject_API.Services.EmailTemplates { /* ... */ } 时,任何命名空间:

MyProject_API.Services.EmailTemplates.Data

MyProject_API.Services.Data

MyProject_API.Data

将匹配
before

命名空间 Data 您真正想要的。

C# 解决这个问题的方法是使用 

global 别名

,如下所示:
namespace MyProject_API.Services.EmailTemplates { using global::Data; // <--- global alias used using MyProject_API.Models.ViewModels; // <--- unless you have other name conflicts, 'using Models.ViewModels;' is sufficient now using System.Linq; using Utilities.Web.Authentication; // your classes here }

这将使您的 
using

指向您想要的名称空间。这样,它将不再是未使用的

using
指令,并且代码格式将不再“丢失”(即删除)它。
您用于将 

using

从外向内移动的工具显然不够智能,无法添加所需的

global::
    

© www.soinside.com 2019 - 2024. All rights reserved.