Определите, какая сборка приложения необходима

Есть 2 проекта. Оба являются приложениями WPF. Ошибка приложения

Приложение 1: просто обеспечивает взаимодействие с внешним аппаратным обеспечением. Для этого в корневом классе приложения есть несколько общедоступных общих классов:

Public Shared Log As New clsLog
Public Shared NavigationObjectContainer As New Dictionary(Of String, Object)

Второй проект в основном представляет собой графический интерфейс пользователя, а также использует некоторые общедоступные общие классы в корневом классе приложения:

Public Shared Nav As New clsNavigationHelper

Теперь второй проект (графический интерфейс) берет ссылку на проект 1 (аппаратное обеспечение) и показывает следующую ошибку:

Der Typeinitialisierer for "TB_HyperTerminal.Application" не может быть изменен. Это немецкий язык, но это означает, что объект приложения в классе 1 (аппаратное обеспечение) не может найти все общие классы (например, clsLog и NavigationObjectContainer).

Внутреннее исключение

{"Объект типов "FSCANT3.Application" не может быть исключен в типе "TB_HyperTerminal.Application" umgewandelt werden."}

Мой вопрос заключается в том, как решить эту проблему, чтобы получить правильные сборки и правильный объект Application для каждого проекта.

При поиске причины я переименовал класс проекта 2 (Оборудование) в TBHApplication, а проект 1 по-прежнему называется Application. Нет, мы видим, почему кастинг невозможен: Кастинг приложений


person Nasenbaer    schedule 20.09.2012    source источник
comment
Сообщение об исключении на самом деле. Инициализатор типа для «TB_HyperTerminal.Application» вызвал исключение. Это означает, что статический конструктор для TB_HyperTerminal.Application завершился неудачно. Вы должны проверить внутреннее исключение для деталей.   -  person Yiğit Yener    schedule 20.09.2012
comment
Добавлено внутреннее исключение. Надеюсь, что это поможет найти какое-либо решение.   -  person Nasenbaer    schedule 20.09.2012
comment
FSCANT3.Application и TB_HyperTerminal.Application — это разные типы, которые не могут быть преобразованы друг в друга. Где-то ваше приложение пытается преобразовать экземпляр FSCANT3.Application в экземпляр TB_HyperTerminal.Application. И это, вероятно, статический конструктор (Shared Sub New()) TB_HyperTerminal.Application. Если вы можете опубликовать код, это поможет разобраться.   -  person Yiğit Yener    schedule 20.09.2012
comment
У вас слишком много типов с именем Application. В том числе тот, который использует WPF. Выберите другое имя.   -  person Hans Passant    schedule 20.09.2012
comment
Приложение установлено WPF Visual Studio по умолчанию. Или я не понимаю, как переименовать Application.   -  person Nasenbaer    schedule 20.09.2012


Ответы (1)


Существуют ли какие-либо зависимые сборки Приложения 1, которые вы не копируете в выходной каталог второго проекта?

Обновление после обсуждения в комментариях ниже.

Насколько я понимаю вашу проблему, вы хотите, чтобы app1 мог использовать методы из app2. Для этого вам нужен общий интерфейс между двумя вашими приложениями. Создайте третий проект (типа «библиотека классов»), содержащий, например. интерфейс, который определяет все методы, необходимые для приложения 1 и реализуемые приложением 2. И app1, и app2 будут ссылаться на эту новую DLL. Вы можете реализовать этот интерфейс в своем объекте приложения app2, а затем app1 может привести текущий объект приложения к этому типу интерфейса и вызвать методы. Однако я не уверен, что понимаю, как app1 может работать в автономном режиме (нужно ли это? Если нет, не должно ли app1 быть библиотекой классов?).

Обратите внимание, что использование классов приложений для этой связи немного своеобразно. Обычный способ — использовать контейнер IoC или просто свойство в app1, где app2 может установить реализацию интерфейса.

person Timores    schedule 20.09.2012
comment
Нет, сборка не проблема. все есть. просто пространство имен приложения такое же в проекте 1, как и в проекте 2. Это по умолчанию в проекте WPF. Но я не знаю, как это решить. - person Nasenbaer; 20.09.2012
comment
Полное имя типа включает его пространство имен И сборку, в которой он определен, поэтому я не думаю, что у вас есть проблема с классами приложений. Что делает статический конструктор и что ему нужно? - person Timores; 20.09.2012
comment
Я добавлю скриншот.... В VB.Net (аналогично C#) используется Global.System.Windows.Application.Current для приведения его к классу Application. - person Nasenbaer; 20.09.2012
comment
Если вы сделаете это в Application1, это НЕ будет работать, так как он вернет объект приложения проекта 2 (независимо от его имени). - person Timores; 20.09.2012
comment
Я знаю, что это не работает. Но как заставить его работать? Потому что пространство имен Application предоставлено DotNet, а не мной. - person Nasenbaer; 20.09.2012
comment
У меня слишком много, чтобы написать в комментарии. Пожалуйста, смотрите обновленный ответ. - person Timores; 21.09.2012