Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не понимаю почему просит указать ссылку на сборку 
:(
    Опции темы
V0fka
Дата 22.6.2014, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

Есть 2 сборки.

Первая. Тип проекта WPF приложение. В нем создано окно с особым поведением.
Код

public partial class PromptWindow : Window

Проблем нету.

Вторая. Тип проекта Dll. Добавляю ссылку на сборку "первую", пробую создать объект:
Код

PromptWindow pw = new PromptWindow();

В итоге получаю ошибку
Цитата
Тип "System.Windows.DependencyObject" определен в сборке, ссылка на которую отсутствует. Следует добавить ссылку на сборку "WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".

Если добавить ссылку куда оно просит - ошибка пропадает. Но само решение перестает работать. Почему перестает работать - идей нету, т.к. это типо плагин для другой системы. Экспериментальным путем я определил, что без ссылки на WindowsBase сам плагин работает, но без неё я не могу скомпилировать проект используя свой PromptWindow.

Непонятно почему оно вообще просит ссылку? Ведь в "первой" сборке есть все необходимые ссылки для его работы.

Это сообщение отредактировал(а) V0fka - 22.6.2014, 20:19
PM MAIL   Вверх
Ilya81
Дата 23.6.2014, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: нет
Всего: 4



Если используется WPF, рекомендую reference'ить сразу: PresentationCore, PresentationFramework, WindowsBase и System.Xaml.
Цитата(V0fka @  22.6.2014,  20:14 Найти цитируемый пост)
Непонятно почему оно вообще просит ссылку? Ведь в "первой" сборке есть все необходимые ссылки для его работы.

Ну т. с. ссылки транзитивностью не обладают. Каждую сборку, функции которой используются, надо reference'ить напрямую в использующей функции сборке.
Цитата(V0fka @  22.6.2014,  20:14 Найти цитируемый пост)
Но само решение перестает работать. 

Что именно происходит?
PM MAIL ICQ Skype   Вверх
V0fka
Дата 23.6.2014, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(Ilya81 @  23.6.2014,  08:28 Найти цитируемый пост)
Если используется WPF, рекомендую reference'ить сразу: PresentationCore, PresentationFramework, WindowsBase и System.Xaml.

Вы правы, оно без ссылок на эти сборки тоже не хотело компилироваться.

Цитата(Ilya81 @  23.6.2014,  08:28 Найти цитируемый пост)
Ну т. с. ссылки транзитивностью не обладают. Каждую сборку, функции которой используются, надо reference'ить напрямую в использующей функции сборке.

Я перед тем как задать вопрос решил провести эксперимент. Создал 2 проекта: длл и консольное приложение. В длл добавил ссылку на сборку System.Windows.Forms и сделал там 1 метод:
Код

public void Test()
{
   MessageBox.Show("Test");
}


После в консольное приложение добавил ссылку на проект с этой длл (не добавляя ссылку на System.Windows.Forms) и попробовал вызвать метод класса из длл:
Код

TestClass t = new TestClass();
t.Test();


В результате появляется окошко с сообщением. Поэтому и возник вопрос, почему же в случае который я описывал выше система требует ссылку?

Цитата(Ilya81 @  23.6.2014,  08:28 Найти цитируемый пост)
Что именно происходит? 

Я делаю плагин для другой системы. При попытке его подключить "другая система" говорит, мол "не могу подключить". Что при этом у неё внутри происходит - я не знаю. Но как только я убираю ссылку на WindowsBase (закоментировав весь функционал, который не хочет без неё работать) - плагин подключается без ошибок.
PM MAIL   Вверх
Ilya81
Дата 23.6.2014, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: нет
Всего: 4



MessageBox есть в PresentationFramework, не надо для этого тащить WinForms. Ну а про другую систему - там возможно узнать, какие DLL используются? А то из сообщения "не могу подключить" и мне понятно не много.
PM MAIL ICQ Skype   Вверх
V0fka
Дата 23.6.2014, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(Ilya81 @  23.6.2014,  14:55 Найти цитируемый пост)
MessageBox есть в PresentationFramework, не надо для этого тащить WinForms.

Понял. Но, не в типе проекта "библиотека классов", не в типе проекта "консольное приложение" нету по умолчанию подключенного PresentationFramework. Соответственно в длл-ке для вызова MessageBox я подключил System.Windows.Forms. В конольном приложении ничего дополнительно не подключал, но MessageBox срабатывает. Почему так получается?

Цитата(Ilya81 @  23.6.2014,  14:55 Найти цитируемый пост)
Ну а про другую систему - там возможно узнать, какие DLL используются?

Я делал уже не одну длл под это дело, которые работают и с которыми особых проблем не возникает. Кроме того, как я говорил, оно подключает и эту длл если я удаляю ссылку на сборку WindowsBase.

Цитата(Ilya81 @  23.6.2014,  14:55 Найти цитируемый пост)
А то из сообщения "не могу подключить" и мне понятно не много.

Получить детально сообщение, к сожалению, не представляется возможным. Система просто сообщает у неудачной попытке и не более.

Но день сегодня был потрачен не зря. Создал я в VS новый проект, вязл все что было и копипастом перенес туда. И о чудо! Все заработало. Причину по которой не работает предыдущий проект (точно такой, казалось бы) я не знаю smile . И скорей всего не узнаю никогда.

По итогу вышесказанного:
- хотелось бы узнать почему работает MessageBox;
- завтра воспользуюсь советами по поиску ошибки, которые вы мне дали в соседней теме и отпишусь там по результату, если опять работать не перестанет smile .

Это сообщение отредактировал(а) V0fka - 23.6.2014, 20:04
PM MAIL   Вверх
Ilya81
Дата 24.6.2014, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: нет
Всего: 4



В Visual Studio, если навести указатель мыши на название класса, он выведет пространство имён. MessageBox в пространстве имён System.Windows - это из PresentationFramework.dll (подключается не сложнее, чем System.Windows.Forms). А если нажать F12 и вывести данные, полученные из сборки, вверху Visual Studio напишет, в какой сборке этот класс.
PM MAIL ICQ Skype   Вверх
V0fka
Дата 24.6.2014, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1103 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.