Ссылки на классы и пространства имен Visual Studio 2017 - PullRequest
3 голосов
/ 14 марта 2019

Я заметил для моего небольшого проекта, что при импорте классов некоторые используют полную ссылку на папку, а другие нет.Вот код из проекта Mini, над которым я работаю.

Папка моделей Содержит две сущности, Авто и Самолет

namespace Mini.Models {
     public class Auto {
         // code and stuff
     }
}

namespace Mini.Models {
     public class Airplane {
         // code and stuff
     }
}

Папка служб Содержит один класс обслуживания

namespace Mini.Services
{
   public class AutoService : IAutoService {
      public bool Get() {
            var autoObject = new Models.Auto();   // notice how it references Models folder
            var planeObject = new Airplane();  // Same folder but not referencing Models in front of it      
            // other code
      }
   }

   public interface IAutoService {
      bool Get();
      // others
   }
}

Хотя это и не основной багбир, по-прежнему раздражает, что на два класса в одной папке ссылаются по-разному, и я не могу понять, почему.

Любой совет будетприветствуется.

Сообщение об ошибке при удалении папки Models

Error CS0118: 'Auto' is a namespace but is used like a type (34, 27)

Ответы [ 3 ]

3 голосов
/ 14 марта 2019

На основании предоставленного вами сообщения об ошибке:

Error CS0118: 'Auto' is a namespace but is used like a type (34, 27)

Может показаться, что у вас есть пространство имен с именем Auto.Представьте себе следующий пример:

namespace MyApp.Auto
{
    class Test
    {
    }
}

namespace MyApp
{
    class Auto
    {
    }

    class MyTest
    {
        private Auto test;
    }
}

Поскольку из пространства имен MyApp вы можете видеть как класс с именем Auto, так и пространство имен с именем Auto (либо namespace MyApp.Auto, либо просто namespace Auto), C # не уверен, какой вы хотите.Таким образом, это заставляет вас быть конкретным в выборе того или другого.

Самое простое решение - это изменить пространство имен MyApp.Auto на что-то другое.

0 голосов
/ 15 марта 2019

Проблема, похоже, связана с VS2017 или с тем, как он создавал проект в первый раз.

При запуске совершенно нового проекта (ASP Core 2.2, Web API, с включенным https и отключенным докером) и использованиемв тех же классах проблема не существовала.

0 голосов
/ 14 марта 2019

Это не исправление, но объяснение с правильным примером кода (и почему).

namespace Mini.Models
{
    public class Auto
    {
        // code and stuff
    }
}

namespace Mini.Models
{
    public class Airplane
    {
        // code and stuff
    }
}

namespace Mini.Auto
{
    public class OtherAirplane
    {
        // code and stuff
    }
}

namespace Mini
{
    using Mini.Models;
    using namespaceAuto = Auto ; /// this also not fix the issue.

    class NamespaceIssue
    {
        void execute()
        {
            var autoObject = new Auto();   // Error 
            var planeObject = new Airplane();  // Same folder but not referencing Models in front of it      
            // other code
        }
    }
}

теперь вы можете видеть, что некоторые из них были в коде, у вас есть пространство имен "Mini.Auto", и это проблема коучинга.

У меня на VS 2015 была такая же проблема. может быть, мы должны сообщить об этом в команду VS, или это умышленно.

...