Не удается найти System.Windows.Vector в C#

#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 — Извините, вы абсолютно правы, и я отредактирую свой ответ. Тем не менее, это может оказать реальную помощь в поиске сборки и пространства имен типа.