Перейти к содержимому

Как поменять namespace в проекте c

  • автор:

Как изменить пространство имен у формы Visual Studio

Работаю над проектом средней крупности в Visual Studio 2019. Количество форм проекта дошло до «неудобного», и решил я их раскидать по папкам (сразу не додумался). Дело в том что пространство имен существующих форм не поменялось (имя_проекта), а вот когда я создаю новую форму в конкретной папке, то ее пространство имен прописывается как «имя_проекта.имя_папки». Я бы хотел чтобы у всех форм в папке было такое пространство имен. Но меняя вручную начинается «красная площадь», студия громко ругается, но решений не предлагает. Вопрос чисто этический, т.к. текущее состояние на работу приложения не влияет, но продолжать работать немного неприятно (у меня легкая степень ОКР, и когда что-то не так мне это мешает сосредоточиться).

Отслеживать

задан 22 авг 2019 в 0:45

152 10 10 бронзовых знаков

Кое-что можно исправить поиском и заменой (Find and Replace) по всему решению. / Многие проблемы может исправить Resharper (но он платный). / Есть и бесплатные расширения для Студии: NamespaceFixer, Fix Namespace. Можете попытать удачу с ними. Если что, удалить их всегда можно.

Как поменять namespace в проекте c

Обычно определяемые классы и другие типы в .NET не существуют сами по себе, а заключаются в специальные контейнеры — пространства имен . Пространства имен позволяют организовать код программы в логические блоки, поволяют объединить и отделить от остального кода некоторую функциональность, которая связана некоторой общей идеей или которая выполняет определенную задачу.

Для определения пространства имен применяется ключевое слово namespace , после которого идет название название пространства имен:

namespace имя_пространства_имен < // содержимое пространства имен >

Например, определим в файле Program.cs пространство имен, которое будет называться Base

namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

Здесь пространство имен содержит класс Person, которой имеет одну переменную — name, конструктор и метод Print.

пространства имен в языке программирования C# и .NET

Теперь попробуем использовать класс Person:

Person tom = new Person("Tom"); // Ошибка - Visual Studio не видит класс Person tom.Print(); namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

Здесь на первой строке мы столкнемся с ошибкой, так как Visual Studio не может найти класс Person. Чтобы все-таки обратиться к классу Person, необходимо использовать полное имя этого класса с учетом пространства имен:

Base.Person tom = new("Tom"); tom.Print(); // Имя: Tom namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

Поскольку класс Person располагается в пространстве имен Base, то его полное имя — Base.Person . Соответственно, используя это имя, мы можем обращаться к данному классу вне его пространства имен.

Подключение пространства имен

Однако полное имя класса с учетом пространства имен добавляет в код избыточность — особенно, если пространство имен содержит множество классов, которые мы хотим использовать. И чтобы не писать полное имя класса, мы можем просто подключить пространство имен с помощью директивы using :

using Base; // подключение пространства имен Base Person tom = new("Tom"); tom.Print(); // Имя: Tom namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

подключение пространства имен и using в языке программирования C# и .NET

Вложенные пространства имен

Одни пространства имен могут содержать другие. Например:

namespace Base < namespace PersonTypes < class Person < string name; OrganisationTypes.Company company; public Person(string name, OrganisationTypes.Company company) < this.name = name; this.company = company; >public void Print() < Console.WriteLine($"Имя: "); company.Print(); > > > namespace OrganisationTypes < class Company < string title; public Company(string title) =>this.title = title; public void Print() => Console.WriteLine($"Название компании: "); > > >

В данном случае классы Person и Company находятся в разных вложенных пространствах имен, поэтому чтобы в классе Person использовать класс Company, надо прописывать имя класса с учетом его пространства имен: OrganisationTypes.Company (так как оба класса в итоге находятся в общем пространстве — Base, то его имя можно не указывать в названии класса) или подключать пространство имен класса Company с помощью директивы using .

Для обращения к этим классам вне пространства Base необходимо использовать всю цепочку пространств имен:

using Base.PersonTypes; // подключение пространства имен Base.PersonTypes для класса Person Base.OrganisationTypes.Company microsoft = new("Microsoft"); Person tom = new("Tom", microsoft); tom.Print(); // Имя: Tom Название компании: Microsoft namespace Base < namespace PersonTypes < class Person < string name; OrganisationTypes.Company company; public Person(string name, OrganisationTypes.Company company) < this.name = name; this.company = company; >public void Print() < Console.WriteLine($"Имя: "); company.Print(); > > > namespace OrganisationTypes < class Company < string title; public Company(string title) =>this.title = title; public void Print() => Console.WriteLine($"Название компании: "); > > >

Пространства имен уровня файла

Начиная с .NET 6 и C# 10 можно определять пространства имен на уровне файла. Например, добавим в проект новый файл с кодом c#. Для этого в Visual Studio нажмем на название проекта правой кнопкой мыши и в появившемся меню выберем пункт Add -> New Item.

добавление нового пространства имен C# в Visual Studio

В окне добавления нового элемента выберем пункт Class и поле Name в качестве имени файла укажем Base.cs

пространства имен уровня файла C# в Visual Studio

После этого в проект будет добавлен файл Base.cs . Удалим из него все содержимое по умолчанию и определим в нем следующий код:

namespace Base; class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); >

Директива namespace Base в начале файла указывает, что содержимое файла будет представлять пространство имен Base.

Теперь подключим это пространство имен в файле Program.cs :

using Base; // подключение пространства имен Base Person tom = new("Tom"); tom.Print();

Изменение пространства имен для конкретного домена языка

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Пространство имен для конкретного домена можно изменить. Внесите изменения в Обозреватель DSL в свойствах проекта пакета Dsl и в сведениях о сборке.

Изменение пространства имен конкретного домена

  1. В Обозреватель DSL выберите узел Dsl.
  2. В окне «Свойства» измените свойство пространства имен.
  3. Сохраните решение и преобразуйте шаблоны.
  4. В меню «Проект» выберите «Свойства Dsl». Отображаются свойства проекта.
  5. Перейдите на вкладку Приложение.
  6. Измените свойство пространства имен по умолчанию на новое имя пространства имен.
  7. Если вы также хотите изменить имя сборки, измените свойство имени сборки.
  8. Если вы изменили имя сборки, откройте dslPackage\Package.tt и обновите следующую строку: string dslAssembly = «YourDSLassembly.Dsl.dll»;
  9. Если вы написали любой пользовательский код, обязательно измените пространство имен и ссылки на классы в файлах кода.
  10. Сброс экспериментального экземпляра Visual Studio.
    1. Удалите \Users\\AppData\Local\Microsoft\VisualStudio\*Exp.
    2. В меню «Пуск Windows» выберите все программы>Microsoft Visual Studio 2010 SDK Tools>>Сброс экспериментального экземпляра.

    Связанный контент

    Синхронизация пространства имен и имени папки

    Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

    Область применения этого рефакторинга:

    Что: синхронизация пространства имен и имени папки.

    Когда: вы хотите переархитировать части решения, перетащив файл в новую папку.

    Почему: вы хотите убедиться, что пространство имен обновляется с новой структурой папок.

    Практические советы

    Sync Namespace And Folder Name

    1. Поместите курсор в имени пространства имен.
    2. Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
    3. Выберите «Изменить пространство имен» на папки.

    Изменение пространства имен для конкретного домена языка

    Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

    Пространство имен для конкретного домена можно изменить. Внесите изменения в Обозреватель DSL в свойствах проекта пакета Dsl и в сведениях о сборке.

    Изменение пространства имен конкретного домена

    1. В Обозреватель DSL выберите узел Dsl.
    2. В окне «Свойства» измените свойство пространства имен.
    3. Сохраните решение и преобразуйте шаблоны.
    4. В меню «Проект» выберите «Свойства Dsl». Отображаются свойства проекта.
    5. Перейдите на вкладку Приложение.
    6. Измените свойство пространства имен по умолчанию на новое имя пространства имен.
    7. Если вы также хотите изменить имя сборки, измените свойство имени сборки.
    8. Если вы изменили имя сборки, откройте dslPackage\Package.tt и обновите следующую строку: string dslAssembly = «YourDSLassembly.Dsl.dll»;
    9. Если вы написали любой пользовательский код, обязательно измените пространство имен и ссылки на классы в файлах кода.
    10. Сброс экспериментального экземпляра Visual Studio.
      1. Удалите \Users\\AppData\Local\Microsoft\VisualStudio\*Exp.
      2. В меню «Пуск Windows» выберите все программы>Microsoft Visual Studio 2010 SDK Tools>>Сброс экспериментального экземпляра.

      Связанный контент

      Как изменить пространство имен у формы Visual Studio

      Работаю над проектом средней крупности в Visual Studio 2019. Количество форм проекта дошло до «неудобного», и решил я их раскидать по папкам (сразу не додумался). Дело в том что пространство имен существующих форм не поменялось (имя_проекта), а вот когда я создаю новую форму в конкретной папке, то ее пространство имен прописывается как «имя_проекта.имя_папки». Я бы хотел чтобы у всех форм в папке было такое пространство имен. Но меняя вручную начинается «красная площадь», студия громко ругается, но решений не предлагает. Вопрос чисто этический, т.к. текущее состояние на работу приложения не влияет, но продолжать работать немного неприятно (у меня легкая степень ОКР, и когда что-то не так мне это мешает сосредоточиться).

      Отслеживать

      задан 22 авг 2019 в 0:45

      152 10 10 бронзовых знаков

      Кое-что можно исправить поиском и заменой (Find and Replace) по всему решению. / Многие проблемы может исправить Resharper (но он платный). / Есть и бесплатные расширения для Студии: NamespaceFixer, Fix Namespace. Можете попытать удачу с ними. Если что, удалить их всегда можно.

      Как поменять namespace в проекте c

      Обычно определяемые классы и другие типы в .NET не существуют сами по себе, а заключаются в специальные контейнеры — пространства имен . Пространства имен позволяют организовать код программы в логические блоки, поволяют объединить и отделить от остального кода некоторую функциональность, которая связана некоторой общей идеей или которая выполняет определенную задачу.

      Для определения пространства имен применяется ключевое слово namespace , после которого идет название название пространства имен:

      namespace имя_пространства_имен < // содержимое пространства имен >

      Например, определим в файле Program.cs пространство имен, которое будет называться Base

      namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

      Здесь пространство имен содержит класс Person, которой имеет одну переменную — name, конструктор и метод Print.

      пространства имен в языке программирования C# и .NET

      Теперь попробуем использовать класс Person:

      Person tom = new Person("Tom"); // Ошибка - Visual Studio не видит класс Person tom.Print(); namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

      Здесь на первой строке мы столкнемся с ошибкой, так как Visual Studio не может найти класс Person. Чтобы все-таки обратиться к классу Person, необходимо использовать полное имя этого класса с учетом пространства имен:

      Base.Person tom = new("Tom"); tom.Print(); // Имя: Tom namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

      Поскольку класс Person располагается в пространстве имен Base, то его полное имя — Base.Person . Соответственно, используя это имя, мы можем обращаться к данному классу вне его пространства имен.

      Подключение пространства имен

      Однако полное имя класса с учетом пространства имен добавляет в код избыточность — особенно, если пространство имен содержит множество классов, которые мы хотим использовать. И чтобы не писать полное имя класса, мы можем просто подключить пространство имен с помощью директивы using :

      using Base; // подключение пространства имен Base Person tom = new("Tom"); tom.Print(); // Имя: Tom namespace Base < class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); > >

      подключение пространства имен и using в языке программирования C# и .NET

      Вложенные пространства имен

      Одни пространства имен могут содержать другие. Например:

      namespace Base < namespace PersonTypes < class Person < string name; OrganisationTypes.Company company; public Person(string name, OrganisationTypes.Company company) < this.name = name; this.company = company; >public void Print() < Console.WriteLine($"Имя: "); company.Print(); > > > namespace OrganisationTypes < class Company < string title; public Company(string title) =>this.title = title; public void Print() => Console.WriteLine($"Название компании: "); > > >

      В данном случае классы Person и Company находятся в разных вложенных пространствах имен, поэтому чтобы в классе Person использовать класс Company, надо прописывать имя класса с учетом его пространства имен: OrganisationTypes.Company (так как оба класса в итоге находятся в общем пространстве — Base, то его имя можно не указывать в названии класса) или подключать пространство имен класса Company с помощью директивы using .

      Для обращения к этим классам вне пространства Base необходимо использовать всю цепочку пространств имен:

      using Base.PersonTypes; // подключение пространства имен Base.PersonTypes для класса Person Base.OrganisationTypes.Company microsoft = new("Microsoft"); Person tom = new("Tom", microsoft); tom.Print(); // Имя: Tom Название компании: Microsoft namespace Base < namespace PersonTypes < class Person < string name; OrganisationTypes.Company company; public Person(string name, OrganisationTypes.Company company) < this.name = name; this.company = company; >public void Print() < Console.WriteLine($"Имя: "); company.Print(); > > > namespace OrganisationTypes < class Company < string title; public Company(string title) =>this.title = title; public void Print() => Console.WriteLine($"Название компании: "); > > >

      Пространства имен уровня файла

      Начиная с .NET 6 и C# 10 можно определять пространства имен на уровне файла. Например, добавим в проект новый файл с кодом c#. Для этого в Visual Studio нажмем на название проекта правой кнопкой мыши и в появившемся меню выберем пункт Add -> New Item.

      добавление нового пространства имен C# в Visual Studio

      В окне добавления нового элемента выберем пункт Class и поле Name в качестве имени файла укажем Base.cs

      пространства имен уровня файла C# в Visual Studio

      После этого в проект будет добавлен файл Base.cs . Удалим из него все содержимое по умолчанию и определим в нем следующий код:

      namespace Base; class Person < string name; public Person(string name) =>this.name = name; public void Print() => Console.WriteLine($"Имя: "); >

      Директива namespace Base в начале файла указывает, что содержимое файла будет представлять пространство имен Base.

      Теперь подключим это пространство имен в файле Program.cs :

      using Base; // подключение пространства имен Base Person tom = new("Tom"); tom.Print();

      Синхронизация пространства имен и имени папки

      Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

      Область применения этого рефакторинга:

      Что: синхронизация пространства имен и имени папки.

      Когда: вы хотите переархитировать части решения, перетащив файл в новую папку.

      Почему: вы хотите убедиться, что пространство имен обновляется с новой структурой папок.

      Практические советы

      Sync Namespace And Folder Name

      1. Поместите курсор в имени пространства имен.
      2. Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
      3. Выберите «Изменить пространство имен» на папки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *