Я знаю, что это действительно не умный вопрос, но у меня есть некоторые проблемы с пониманием того, как работает Visual Studio 2010.

При программировании формы Windows мне нужно было переместить класс (скажем, класс x) в исходный файл (скажем, x.cs), который был включен в основное пространство имен и сборку, в другой проект (и сборку) в другой пространство имен. Последняя представляет собой dll, предназначенную для сбора служебных классов. Наверное, я сделал это не так.

Симптомы: когда в основной форме (код, а не дизайн) нажатие F12 с помощью мыши над конструктором класса X приводит к отображению нового источника «из метаданных», включая объявление класса (но все же я могу открыть исходный код. код, щелкнув правой кнопкой мыши и выбрав «показать исходный код»). Кажется, что VS не может найти правильный исходный код в решении.

Мои вопросы:

  1. Как я могу оправиться от этого, имея F12 указывает на правильные методы?
  2. В целом, каков правильный метод перемещения кода в разных проектах и ​​/ или сборках?
4
Daniel 14 Янв 2013 в 14:15

1 ответ

Лучший ответ

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

  1. Создать новое решение.
  2. Добавьте новое приложение Windows Forms под названием FormsApp. Это дает мне форму под названием Form1 с пространством имен по умолчанию FormsApp.
  3. Создал класс с именем Util в файле с именем util.cs в проекте FormsApp. Он получает то же пространство имен, что и FormsApp.
  4. Если я создаю экземпляр класса Util в конструкторе Form1, я могу нажать F12, чтобы привести к определению Util, как и ожидалось.
  5. В решении создана новая библиотека классов под названием Utility.
  6. Можно перемещать файлы несколькими способами, но я просто щелкнул файл util.cs в обозревателе решений и перетащил его в проект Utility. Это скопирует файл, но оставит оригинал на месте. Может, вы по-другому скопировали свои файлы?
  7. Когда оригинал удаляется, вы должны получить ошибку сборки, если попытаетесь скомпилировать. Этого следовало ожидать, поскольку проект FormsApp ничего не знает о классе Util в недавно добавленном проекте Utility.
  8. Добавьте ссылку на проект Utility в проект FormsApp в обозревателе решений.
  9. Если вы попытаетесь построить сейчас, то все должно получиться. Нажатие F12 в конструкторе Form1 приводит меня к определению класса Util, как и ожидалось, хотя я не менял пространство имен класса Util.

Если это поможет прояснить ситуацию, вот несколько изображений:

Обозреватель решений:

Solution Explorer

Конструктор Form1:

enter image description here

Утилита:

enter image description here

2
Malice 14 Янв 2013 в 20:51
Спасибо за помощь. Я, вероятно, сделал что-то похожее на вашу процедуру, но я полагаю, что выбрал «исключить из проекта» в исходном файле после копии (не уверен). В любом случае, я не могу найти разницы между файлом, в котором указана проблема, и другими файлами. Кажется, трудно выйти из этой ситуации.
 – 
Daniel
15 Янв 2013 в 13:20
@Daniel: Вы всегда можете отменить свои изменения, а затем попробовать описанный мной метод перемещения файла. Если это все еще не работает, возможно, добавьте дополнительную информацию, такую ​​как соглашение об именах для проектов и задействованную иерархию.
 – 
Malice
15 Янв 2013 в 14:57