![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
V0fka |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Привет!
Есть 2 сборки. Первая. Тип проекта WPF приложение. В нем создано окно с особым поведением.
Проблем нету. Вторая. Тип проекта Dll. Добавляю ссылку на сборку "первую", пробую создать объект:
В итоге получаю ошибку
Если добавить ссылку куда оно просит - ошибка пропадает. Но само решение перестает работать. Почему перестает работать - идей нету, т.к. это типо плагин для другой системы. Экспериментальным путем я определил, что без ссылки на WindowsBase сам плагин работает, но без неё я не могу скомпилировать проект используя свой PromptWindow. Непонятно почему оно вообще просит ссылку? Ведь в "первой" сборке есть все необходимые ссылки для его работы. Это сообщение отредактировал(а) V0fka - 22.6.2014, 20:19 |
||||||
|
|||||||
Ilya81 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
Если используется WPF, рекомендую reference'ить сразу: PresentationCore, PresentationFramework, WindowsBase и System.Xaml.
Ну т. с. ссылки транзитивностью не обладают. Каждую сборку, функции которой используются, надо reference'ить напрямую в использующей функции сборке. Что именно происходит? |
|||
|
||||
V0fka |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Вы правы, оно без ссылок на эти сборки тоже не хотело компилироваться.
Я перед тем как задать вопрос решил провести эксперимент. Создал 2 проекта: длл и консольное приложение. В длл добавил ссылку на сборку System.Windows.Forms и сделал там 1 метод:
После в консольное приложение добавил ссылку на проект с этой длл (не добавляя ссылку на System.Windows.Forms) и попробовал вызвать метод класса из длл:
В результате появляется окошко с сообщением. Поэтому и возник вопрос, почему же в случае который я описывал выше система требует ссылку? Я делаю плагин для другой системы. При попытке его подключить "другая система" говорит, мол "не могу подключить". Что при этом у неё внутри происходит - я не знаю. Но как только я убираю ссылку на WindowsBase (закоментировав весь функционал, который не хочет без неё работать) - плагин подключается без ошибок. |
||||||||
|
|||||||||
Ilya81 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
MessageBox есть в PresentationFramework, не надо для этого тащить WinForms. Ну а про другую систему - там возможно узнать, какие DLL используются? А то из сообщения "не могу подключить" и мне понятно не много.
|
|||
|
||||
V0fka |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Понял. Но, не в типе проекта "библиотека классов", не в типе проекта "консольное приложение" нету по умолчанию подключенного PresentationFramework. Соответственно в длл-ке для вызова MessageBox я подключил System.Windows.Forms. В конольном приложении ничего дополнительно не подключал, но MessageBox срабатывает. Почему так получается?
Я делал уже не одну длл под это дело, которые работают и с которыми особых проблем не возникает. Кроме того, как я говорил, оно подключает и эту длл если я удаляю ссылку на сборку WindowsBase. Получить детально сообщение, к сожалению, не представляется возможным. Система просто сообщает у неудачной попытке и не более. Но день сегодня был потрачен не зря. Создал я в VS новый проект, вязл все что было и копипастом перенес туда. И о чудо! Все заработало. Причину по которой не работает предыдущий проект (точно такой, казалось бы) я не знаю ![]() По итогу вышесказанного: - хотелось бы узнать почему работает MessageBox; - завтра воспользуюсь советами по поиску ошибки, которые вы мне дали в соседней теме и отпишусь там по результату, если опять работать не перестанет ![]() Это сообщение отредактировал(а) V0fka - 23.6.2014, 20:04 |
||||
|
|||||
Ilya81 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
В Visual Studio, если навести указатель мыши на название класса, он выведет пространство имён. MessageBox в пространстве имён System.Windows - это из PresentationFramework.dll (подключается не сложнее, чем System.Windows.Forms). А если нажать F12 и вывести данные, полученные из сборки, вверху Visual Studio напишет, в какой сборке этот класс.
|
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
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 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |