#c# #.net #vector #namespaces
#c# #.net #вектор #пространства имен
Вопрос:
Я создаю приложение Windows Forms в Visual Studio 2010 Ultimate, но не могу заставить встроенный вектор работать.
Microsoft утверждает, что System.Windows.Vector
в .NET Framework 4:
Возможно, я совершаю какую-то большую ошибку, но Visual Studio жалуется на попытки каким-либо образом использовать Vector, и это не отображается в автозаполнении IntelliSense:
Строка Vector v = new Vector(20, 30);
выдает
Ошибка компиляции Ошибка 1 Не удалось найти тип или имя пространства имен ‘Vector’ (вам не хватает директивы using или ссылки на сборку?) «
Я попытался включить using System.Windows
вверху, но это не решило проблему.
Я зашел в раздел Ссылки -> Добавить ссылку, чтобы попытаться найти, что добавить, но ничего не было очевидного.
Проблема может быть: также, перечисленных Vector
в System.Windows
пространство имен, есть и другие классы, такие как Rect
или Application
. Я мог бы использовать их как System.Drawing.Rectangle
или System.Windows.Forms.Application
, но ни одно из них не отображается как часть какой-либо системы.Пространство имен Windows
Я пробовал разные вещи около 2 часов и нашел этот связанный пост (но Vector является частью .NET 4, поэтому их исправление не кажется стоящим?) и этот, возможно, связанный пост, но у меня установлен .NET Framework 4.
У кого-нибудь есть пример Vector
? Я знаю, что мог бы получить сторонний класс, но я чувствую, что чего-то не хватает, и хочу узнать / опубликовать решение для других людей, которые ищут ту же проблему в Google.
Ответ №1:
Добавьте ссылку на WindowsBase.
Vector
Класс определен в WindowsBase.dll сборка в системе.Пространство имен Windows.
Комментарии:
1. Отлично работает! Я не могу использовать систему. Пространство имен Windows без создания двусмысленности, но это не огромная проблема. Еще раз спасибо 🙂
2. Мне было трудно найти WindowsBase, пока я не понял, что моей целевой средой была .NET 2.0, поэтому на всякий случай убедитесь, что вы используете .NET 4.0 или новее, чтобы иметь возможность добавить эту ссылку.
Ответ №2:
System.Windows.Vector
является частью WPF, а не Windows Forms, отсюда и трудности, с которыми вы сталкиваетесь при попытке его использовать. Вы могли бы добавить ссылку на WindowsBase.dll
, но, учитывая, что она предназначена для использования в приложениях WPF, а не в приложениях Windows Forms, вполне вероятно, что вы получили бы мало пользы от этого.
Решение Microsoft поместить компоненты WPF в System.Windows
и WinForms в System.Windows.Forms
является источником бесконечной путаницы в Интернете, что именно было не так с System.Windows.Presentation
или подобным для WPF, я никогда не узнаю!
Ответ №3:
Чтобы узнать, какую сборку вы должны добавить в свои ссылки, может быть очень полезно использовать такой инструмент, как ILSpy (с открытым исходным кодом). Там вы можете выполнить поиск нужного вам типа и выяснить, в какой сборке он реализован и какое пространство имен вы должны использовать.
Найти реализующую сборку может быть довольно сложно, и мне приходится делать это часто. Я обнаружил, что это быстрый метод, и подумал, что он может помочь вам в будущем.
Комментарии:
1. Система. Windows.Vector — это класс, а не пространство имен. Нет ничего, даже отдаленно связанного с пространством имен.
2. @Rob — Извините, вы абсолютно правы, и я отредактирую свой ответ. Тем не менее, это может оказать реальную помощь в поиске сборки и пространства имен типа.