| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Не понимаю почему просит указать ссылку на сборку |
| Автор: V0fka 22.6.2014, 20:14 | ||||||
| Привет! Есть 2 сборки. Первая. Тип проекта WPF приложение. В нем создано окно с особым поведением.
Проблем нету. Вторая. Тип проекта Dll. Добавляю ссылку на сборку "первую", пробую создать объект:
В итоге получаю ошибку
Если добавить ссылку куда оно просит - ошибка пропадает. Но само решение перестает работать. Почему перестает работать - идей нету, т.к. это типо плагин для другой системы. Экспериментальным путем я определил, что без ссылки на WindowsBase сам плагин работает, но без неё я не могу скомпилировать проект используя свой PromptWindow. Непонятно почему оно вообще просит ссылку? Ведь в "первой" сборке есть все необходимые ссылки для его работы. |
| Автор: V0fka 23.6.2014, 12:07 | ||||||||
Вы правы, оно без ссылок на эти сборки тоже не хотело компилироваться.
Я перед тем как задать вопрос решил провести эксперимент. Создал 2 проекта: длл и консольное приложение. В длл добавил ссылку на сборку System.Windows.Forms и сделал там 1 метод:
После в консольное приложение добавил ссылку на проект с этой длл (не добавляя ссылку на System.Windows.Forms) и попробовал вызвать метод класса из длл:
В результате появляется окошко с сообщением. Поэтому и возник вопрос, почему же в случае который я описывал выше система требует ссылку? Я делаю плагин для другой системы. При попытке его подключить "другая система" говорит, мол "не могу подключить". Что при этом у неё внутри происходит - я не знаю. Но как только я убираю ссылку на WindowsBase (закоментировав весь функционал, который не хочет без неё работать) - плагин подключается без ошибок. |
| Автор: Ilya81 23.6.2014, 14:55 |
| MessageBox есть в PresentationFramework, не надо для этого тащить WinForms. Ну а про другую систему - там возможно узнать, какие DLL используются? А то из сообщения "не могу подключить" и мне понятно не много. |
| Автор: V0fka 23.6.2014, 20:04 | ||||
Понял. Но, не в типе проекта "библиотека классов", не в типе проекта "консольное приложение" нету по умолчанию подключенного PresentationFramework. Соответственно в длл-ке для вызова MessageBox я подключил System.Windows.Forms. В конольном приложении ничего дополнительно не подключал, но MessageBox срабатывает. Почему так получается?
Я делал уже не одну длл под это дело, которые работают и с которыми особых проблем не возникает. Кроме того, как я говорил, оно подключает и эту длл если я удаляю ссылку на сборку WindowsBase. Получить детально сообщение, к сожалению, не представляется возможным. Система просто сообщает у неудачной попытке и не более. Но день сегодня был потрачен не зря. Создал я в VS новый проект, вязл все что было и копипастом перенес туда. И о чудо! Все заработало. Причину по которой не работает предыдущий проект (точно такой, казалось бы) я не знаю По итогу вышесказанного: - хотелось бы узнать почему работает MessageBox; - завтра воспользуюсь советами по поиску ошибки, которые вы мне дали в соседней теме и отпишусь там по результату, если опять работать не перестанет |
| Автор: Ilya81 24.6.2014, 07:00 |
| В Visual Studio, если навести указатель мыши на название класса, он выведет пространство имён. MessageBox в пространстве имён System.Windows - это из PresentationFramework.dll (подключается не сложнее, чем System.Windows.Forms). А если нажать F12 и вывести данные, полученные из сборки, вверху Visual Studio напишет, в какой сборке этот класс. |
| Автор: V0fka 24.6.2014, 20:03 |
| Ilya81, я наверное непонятно объяснил. Попробую ещё раз. Смотрите, есть 2 проекта: 1) консольное приложение 2) библиотека классов Не тот, не другой по умолчанию не имеют ссылок не на System.Windows.Forms, не на System.Windows. Т.е. не там не там MessageBox не доступен. В библиотеку классов (2) я добавляю ссылку на сборку PresentationFramework, подключаю пространство имён System.Windows и MessageBox становится доступен. В консольное приложение (1) я не добавляю не System.Windows.Forms, не PresentationFramework. Добавляю ссылку на библиотеку классов (2). Вызываю из него метод класса из (2), в котором испольуется MessageBox и программа отрабатывает как положено. При этом она не требует ссылок на какие-то дополнительные сборки. ПС. на всякий случай пример того, о чём я тут рассказываю: http://www22.zippyshare.com/v/43621628/file.html |